2012-10-18 13 views
7

मैं वसंत में EJB इंजेक्षन कोशिश कर रहा हूँ (3.1.2) सेवा (दोनों अलग युद्धों में) में EJB 3 इंजेक्शन दोनों बहुत ही सरल (उदाहरण के सरल करने के लिए हटा दिया विधि) कर रहे हैं:स्प्रिंग बीन

@Remote 
public interface MyBean { 
} 

@Singleton 
public class MyBeanImpl implements MyBean{ 
} 

सेवा:

@Service 
public class MyServiceImpl implements MyService{ 
} 

पहली नजर बात पर बहुत सरल है, लेकिन मैं करने की कोशिश की:

@EJB(lookup = "java:global/ejbApp/MyBeanImpl!com.my.MyBean") 
private MyBean myBean; 

और यह काम नहीं किया। तब मैं भी करने की कोशिश की:

@EJB(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean") 
private MyBean myBean; 

और

@Resource(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean") 
private MyBean myBean; 

लेकिन न तो काम किया। लेकिन

@Autowired 
private MyBean myBean; 

मैं वास्तव में इस समाधान पसंद नहीं: मेरे वसंत विन्यास में और सेवा में

<jee:jndi-lookup id="myBean" jndi-name="java:global/ejbApp/MyBeanImpl!com.my.MyBean" /> 

:

मैं उपयोग करते हुए मेरे EJB इंजेक्षन करने में कामयाब रहे।

@EJB(lookup = MyBean.JNDI_NAME) 
private MyBean myBean; 
+0

धन्यवाद टोमेक :) यह "किसी भी तरह" मेरी समस्या हल करता है। मैं कुछ सरल समाधान का लक्ष्य रख रहा था, लेकिन अगर मैं इसे एक ही एनोटेशन के साथ हल नहीं कर सकता हूं तो मैं आपका रास्ता आजमाउंगा। मैंने सोचा कि स्प्रिंग में ईजेबी इंजेक्ट करना वास्तव में आसान होगा (यह सब के बाद मानक है))। –

+0

मेरी टिप्पणी को किसी उत्तर में बदलना क्योंकि किसी और ने उत्तर नहीं दिया। –

उत्तर

8

हमने पाया है काफी अच्छा और सरल उपाय। वसंत विन्यास फाइल में डाल करने के लिए है:

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"> 
    <property name="alwaysUseJndiLookup" value="true" /> 
</bean> 

और वह सेम JNDI में @Resource साथ एनोटेट के लिए खोज करने के लिए वसंत सक्षम बनाता है। तो अब कोई भी कर सकता है:

@Resource(mappedName = MyBean.JNDI_NAME) 
private MyBean myBean; 
0

आप XML की या एनोटेशन में JNDI नाम की छुटकारा पाने के लिए लक्ष्य कर रहे हैं: मैं, उदा, ऐसा करने में सक्षम होने के लिए कुछ एनोटेशन में मेरी JNDI पथ चाहते हैं? यदि पूर्व, मैं यह परीक्षण किया है नहीं है, लेकिन काम करना चाहिए:

@Configuration 
public class EjbCfg { 

    @Bean 
    public JndiObjectFactoryBean myBean() { 
     JndiObjectFactoryBean factory = new JndiObjectFactoryBean(); 
     factory.setJndiName(MyBean.JNDI_NAME); 
     return factory; 
    } 

} 

अब आप बस इंजेक्षन कर सकते हैं:

@Autowired 
private MyBean myBean; 
+0

मैंने कभी कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग नहीं किया है, लेकिन मुझे लगता है कि यह काम नहीं करेगा। इसका कारण यह है कि हम स्प्रिंग पोर्टल एमवीसी का उपयोग कर रहे हैं और इसे वसंत xml फ़ाइल की आवश्यकता है जिसमें कुछ नाम है। मैंने पाया है कि xCon फ़ाइल को xConfiguration ऑब्जेक्ट से कैसे संदर्भित किया जाए - oposite नहीं, इसलिए मुझे लगता है कि यह कॉन्फ़िगरेशन wokr नहीं होगा। –

+0

@ MichałMargiel: इसे किसी अन्य '@ सेवा' या '@ रिपोजिटरी 'की तरह ही' @ कॉन्फ़िगरेशन 'की खोज के बाद से काम करना चाहिए। लेकिन कभी नहीं, आपका समाधान बहुत सरल और साफ दिखता है, +1। –

+0

जानकारी के लिए धन्यवाद। जिज्ञासा से बाहर मैं इसे देख लूंगा। –

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