2013-02-05 51 views
5

के रूप में पैक किए जाने पर एक डब्ल्यूएआर के अंदर एक सीडीआई घटना का निरीक्षण करना संभव है। मेरे पास एंटरप्राइज़ एप्लिकेशन आर्काइव (ईएआर) है जिसमें एकाधिक बैकएंड मॉड्यूल (ईजेबी) और कुछ वेब मॉड्यूल (WAR) शामिल हैं।ईएआर

घटना बैकएंड मॉड्यूल में से एक के अंदर निकाल दिया जाता:

@Inject private Event<MyEvent> myEvent; 
... 
public void fireEvent() { 
    myEvent.fire(new MyEvent()); 
} 
... 

यह इस तरह के कोड के साथ अन्य बैकएंड मॉड्यूल में से किसी में मनाया जा सकता है:

public void listener(@Observes MyEvent myEvent) { 
.. 
} 

लेकिन मैं नहीं कर सकता वार्स के अंदर घटना को पुनः प्राप्त करें। क्या यह क्लासलोडर दृश्यता के कारण है (डब्ल्यूएआर से कक्षाएं ईजेबी को दिखाई नहीं दे रही हैं) या सीडीआई को इसे संभालना चाहिए?

यदि आवेदन व्यापक घटनाओं के लिए सीडीआई का उपयोग नहीं किया जा सकता है, तो विकल्प क्या हैं?

  • JMS
  • अमरूद EventBus
  • ...

कुछ ऐसा है जिसे CDI के साथ काम करता है? शायद कुछ सीडीआई एक्सटेंशन जो घटनाओं को युद्धों में पुल करता है?

----------- संपादित करें:

मैं घटना का निरीक्षण करने के अगर यह एक ही युद्ध के अंदर निकाल दिया जाता है सक्षम हूँ। इसके अलावा मैंने सफलता के बिना ईवेंट श्रोता के रूप में @ स्टेटलेस बीन का उपयोग करने की कोशिश की।

पैकेजिंग इस तरह है:

  • EAR
    • युद्ध (घटना यहाँ देखा जाना चाहिए)
    • युद्ध
    • EJB (घटना यहाँ में निकाल दिया जाता)
+0

युद्ध फ़ाइल आप एक '/ वेब-INF/beans.xml' –

+0

हाँ .. beans.xml फ़ाइलों स्थान पर हैं। – psartini

+0

क्या आप कृपया WAR ईवेंट श्रोताओं को पोस्ट कर सकते हैं (कुछ समझने के लिए कि आप कैसे तत्काल हैं और उनका उपयोग करते हैं, शायद सीडीआई आपके बीन उदाहरणों से अवगत नहीं है ...)। एक विस्तृत पैकेजिंग विवरण भी मदद करेगा। –

उत्तर

3

कुछ और शोध के बाद ऐसा लगता है कि इसकी अपेक्षित व्यवहार क्योंकि डब्ल्यूएआर कक्षाएं ईजेबी को दिखाई नहीं दे रही हैं।

इसके बारे में और सोचना यह एक अच्छी बात है - क्लस्टर्ड वातावरण में सीडीआई इवेंट केवल उसी नोड पर चलने वाले युद्ध द्वारा प्राप्त किया जाएगा क्योंकि ईजेबी मॉड्यूल घटना को फायर कर रहा है। लेकिन उपयोगकर्ताओं को विश्वसनीय अपडेट करने के लिए, हमें इसे हर उदाहरण पर प्राप्त करने की आवश्यकता है।

जेएमएस या अन्य संदेश प्रणाली स्पष्ट रूप से इस मामले में जाने का तरीका है। वहाँ भी एक CDI एक्सटेंशन CDI < के लिए उपलब्ध है -> ब्रिजिंग JMS: Seam3 JMS

आप में निश्चित रूप से