2010-03-01 18 views
6

वेबलॉगिक 10.3 में, मैं एक ईएआर से एक ईएआरबी को एक दूसरे के स्टेटलेस बीन में कैसे इंजेक्ट कर सकता हूं, दोनों ईएआरएस को उसी कंटेनर में तैनात किया जा रहा है? आदर्श रूप में मैं एनोटेशन के साथ जितना संभव हो उतना करना चाहता हूं।मैं एक ईएआर में रिमोट ईजेबी को दूसरे से कैसे कॉल करूं?

public interface HelloService { 
    public String hello(); 
} 

निम्नलिखित EJB द्वारा कार्यान्वित:

@Stateless 
@Remote 
public class HelloServiceBean implements HelloService { 
    public String hello() { 
     return "hello"; 
    } 
} 

मान लीजिए वे पैक और server.ear में तैनात रहे

तो मैं निम्नलिखित इंटरफेस है लगता है। client.ear में अब, मैं निम्नलिखित है:

@Stateless 
public class HelloClientBean { 
    @EJB 
    HelloService helloService; 

// other methods... 
} 

क्या मुझे लगता है कि सही ढंग से Weblogic तारों का पता लगा लेता client.ear में HelloClientBean और server.ear में HelloServiceBean के बीच इतना जोड़ने की जरूरत है? आधिकारिक दस्तावेज और/या किताबों के लिए पॉइंटर्स गर्मजोशी से स्वागत करते हैं।

+0

बेकार टक्कर। मैं सभी जान गए होंगे कि अब तक Weblogic "foo # fully.qualified.interface.name" JNDI में करने के लिए एक राज्यविहीन सेम @Stateless (mappedName = "foo") के साथ एनोटेट बाध्य होगा। लेकिन फिर मुझे 'हैलो क्लाइंट बीन' में अपना 'हैलो सेवा' फ़ील्ड कैसे एनोटेट करना चाहिए? – lindelof

उत्तर

4

अब तक का सबसे आसान समाधान निम्न पाया गया है।

सबसे पहले, एक mappedName विशेषता के साथ राज्यविहीन सेम व्याख्या:

@Stateless(mappedName="HelloService") 
@Remote 
public class HelloServiceBean implements HelloService { 
    public String hello() { 
     return "hello"; 
    } 
} 

http://forums.oracle.com/forums/thread.jspa?threadID=800314&tstart=1 के अनुसार, Weblogic एक EJB के लिए एक JNDI प्रविष्टि बनाने कभी नहीं होगा जब तक कि एक JNDI नाम (या में mappedName विशेषता के रूप में दिया जाता है तैनाती वर्णनकर्ता, या एक मालिकाना एनोटेशन में)।

इसके बाद, आप अब अपने ग्राहक क्षेत्र @EJB के साथ एक mappedName विशेषता है, जो सर्वर सेम पर विशेषता के रूप में एक ही होना चाहिए के साथ उनकी व्याख्या कर सकते हैं। (मैं ईमानदारी से यह द्वारा विस्मित कर रहा हूँ NameNotFoundException when calling a EJB in Weblogic 10.3 पता चलता है कि मैं mappedName#interfaceName सिंटैक्स का उपयोग करने में सक्षम होना चाहिए, लेकिन मेरे परीक्षण में यह काम नहीं करता।।):

@Stateless 
public class HelloClientBean { 
    @EJB(mappedName="HelloService") 
    HelloService helloService; 

// other methods... 
} 

यह अब काम करता है, जब तक कि दोनों कानों हैं एक ही कंटेनर में तैनात। इसके बाद मैं अलग-अलग मशीनों पर तैनात किए जाने पर सही वाक्यविन्यास को समझने की कोशिश करूंगा।

+0

नामकरण का उपयोग करना सहायक है I और ठीक काम करता है लेकिन अनुकूलन के लिए उपयुक्त नहीं है। कोई भी कॉन्फ़िगरेशन परिवर्तन आपके कोड को प्रभावित करेगा। EJB जार एक्सएमएल विन्यास या कुछ विन्यास इंजेक्शन/CDI के माध्यम से स्टार्टअप पर proxifying भी ऐसा ही होता है, लेकिन यह भी रखरखाव और तैनाती क्षमता बढ़ाने, आप इसे parametirize लिए सक्षम बनाता है। – kij

+0

मैप किए गए नामों का उपयोग करने वाले ईजेबी पोर्टेबल नहीं हो सकते हैं। –