2009-02-11 16 views
5

मैं जेबीएस 4.0.3.SP1_CP04 चला रहा हूं और जेडीके 1.6.0_11 का उपयोग कर ग्रहण 3.4.1 के डीबगर के साथ इसे जोड़ रहा हूं।मैं जेबॉस में जावा "हॉट कोड प्रतिस्थापन" कैसे काम करूं?

जब मैं किसी विधि में मामूली परिवर्तन करता हूं (उदाहरण के लिए "+ 2" में तर्क में "+ 1" बदलना) और इसे सहेजना, मुझे तुरंत "हॉट कोड रीप्लेस असफल" शीर्षक वाला एक त्रुटि संदेश संवाद प्राप्त होता है त्रुटि "हटाएँ विधि लागू नहीं की"

Hot code replace failed dialog http://img6.imageshack.us/img6/531/hotcodereplacefailedkp6.png

किसी को भी इस काम करने के लिए प्राप्त करने के लिए चरणों का सुझाव है कि कर सकते हैं?

उत्तर

3

आप जो करना चाहते हैं वह exploded WAR के रूप में JBOSS पर तैनात है। आम तौर पर, यदि कोई संपादक प्रारंभिक तैनाती करता है, तो वह अलग-अलग फ़ाइलों को प्रतिलिपि बनाते समय कॉपी करेगा।

इंटेलिजे में, this is easy। मैंने इसे ग्रहण से कभी नहीं किया है, लेकिन this project आपकी सबसे अच्छी शर्त है।

+0

इस उत्तर ने मुझे यह जांचने के लिए याद दिलाया कि क्या एक नया प्रोजेक्ट बनाने के बाद मेरा युद्ध विस्फोट हुआ था और यह पता चला कि मैं गर्म स्वैप नहीं कर सकता - धन्यवाद! – peteorpeter

2

मैं JRebel का उपयोग कर रहा हूं और यह कोड को संशोधित करने और ऐप सर्वर को गतिशील रूप से अद्यतन करने तक एक जीवन बचतकर्ता है। पहले दिन के लिए भुगतान किया। (हमारे पास 7 मिनट का संकलन/तैनाती/पुनरारंभ चक्र है)

0

जो आपने वर्णित किया है उसे काम करना चाहिए। डीबगिंग सक्षम करने के लिए jboss पर आपका जेवीएम तर्क क्या है? , परिवहन = dt_socket, पता = 8000, सर्वर = y निलंबित = n

0

मैं एक मुद्दा जहां गर्म कोड प्रतिस्थापन ही काम नहीं कर रहा था: -Xdebug -Xnoagent -Xrunjdwp:

खान इन कर रहे हैं। हमने कुछ बदलाव किए हैं जैसे यह सुनिश्चित करना कि "स्वचालित रूप से निर्माण" की जांच की गई थी और - "बिल्ड पथ त्रुटि उत्पन्न होने पर निर्माण रद्द करें" को अनचेक कर दिया गया था। लेकिन मेरे मामले में, एचसीआर स्वयं काम नहीं कर रहा था। जैसा कि आपने उल्लेख किया था, मुझे संदेश नहीं मिला था। अधिक जानकारी इस लिंक में हैं। https://sites.google.com/site/javaerrorsandsolutions/home/hot-code-replacement

+0

लिंक टूटा हुआ है। – palacsint

1
  1. ग्रहण में डिबगर को चलाने से पहले सभी परियोजनाओं अपने कार्यक्षेत्र में ताजा कर रहे हैं (यदि कोड ग्रहण के बाहर बदल गया था यह आवश्यक है, जैसे बाहर उपकरण का उपयोग संस्करण नियंत्रण प्रणाली से परिवर्तन होने के बाद)
  2. जावा बिल्ड में बीमा ग्रहण बीमा के पथ में आप कुछ लाइब्रेरी कक्षाओं के हिस्से के रूप में शामिल नहीं हैं जिन्हें आप हॉट स्वैप
  3. जांचें कि Eclipse JRE = JBoss JRE
  4. उस वर्ग को चेक करें जिसे आप हॉट स्वैप करने का प्रयास कर रहे हैं। क्या इसमें आंतरिक कक्षाएं हैं? मैं बस समस्या में भाग लेता हूं जब मैं कक्षा के भीतर कक्षा को स्वैप नहीं कर सकता, जबकि अन्य वर्ग बिना किसी समस्या के बदल जाते हैं।
1

कारण यह है कि असेंबली को एक और कंपाइलर का उपयोग किया जा सकता है जो गर्म स्वैप करता है। उदाहरण के लिए, यदि आप मेवेन द्वारा प्रोजेक्ट बनाते हैं, तो हमने जावैक का इस्तेमाल किया। जब आप हॉट स्वैप करने की कोशिश करते हैं तो इट्लिप्से अंतर्निहित कंपाइलर जेडीटी कंपाइलर का उपयोग करता है (कंपाइलर स्थापित जेडीके से नहीं लिया जाता है और नियमित माध्यमों से बदला नहीं जा सकता है।)। प्राप्त बाइनरी कक्षाएं अलग हैं और जेवीएम उन्हें प्रतिस्थापित नहीं कर सकता है।

+0

क्या आप एक उद्धरण प्रदान कर सकते हैं कि JVM आंतरिक ग्रहण कंपाइलर द्वारा निर्मित कक्षाएं नहीं कर सकता है या जब विभिन्न कंपाइलरों के वर्ग मिश्रित होते हैं। मैं छवि नहीं कर सकता क्यों यह मामला होना चाहिए, लेकिन यह भी शासन नहीं कर सकता। – dmeister

+2

मैंने अनुभव किया है कि सामान्य कक्षाएं आमतौर पर ठीक काम करती हैं, लेकिन जैसे ही आंतरिक/अज्ञात वर्ग शामिल होते हैं, चीजें तोड़ती हैं, मुझे लगता है कि जेडीटी और जावैक जेनरेट कक्षाओं के लिए विभिन्न नामकरण सम्मेलनों का उपयोग करते हैं। –

संबंधित मुद्दे