यह चीजों को करने का सही तरीका नहीं है। संसाधनों को व्यक्तिगत ईजेबी के स्थानीय जिन्दी नाम में जोड़ा जाना चाहिए। बीन नियोक्ता द्वारा निर्धारित ग्लोबल जेएनडीआई बाइंडिंग से बीन कोड में इस्तेमाल किए गए जेएनडीआई नाम को अलग करना है। बीन स्थानीय jndi बाध्यकारी और वैश्विक बाध्यकारीejb-jar.xml
और ऐप्स सर्वर-विशिष्ट परिनियोजन वर्णनकर्ताओं के माध्यम से संभाला जा सकता है।
तो, बजाय, आप घोषणा चाहिए अपने @Resource
इस तरह (जो एक <resource-ref>
तत्व का संकेत संसाधन संदर्भ नाम और प्रकार के बराबर है):
@Resource(name = "jms/queue/aQueue")
private Queue queue;
तब (ग्लासफिश के लिए एक appserver विशेष तैनाती डिस्क्रिप्टर में, यह sun-ejb-jar.xml
है, जेबॉस के लिए यह jboss.xml
है, वेबलोगिक के लिए यह weblogic-ejb-jar.xml
इत्यादि), <resource-ref>
तत्व घोषित करता है जो <jndi-name>
तत्व के माध्यम से संसाधन संदर्भ नाम और वैश्विक jndi बाध्यकारी इंगित करता है।
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name>
</resource-ref>
एक बार जब आप पूरी बात काम कर रहे हो, यह इस appserver विशेष तैनाती प्रोफाइल और छानने के साथ अलग अलग वातावरण के लिए Maven का उपयोग कर वर्णनकर्ता variabalize करने के लिए आसान हो जाएगा। बस एक संपत्ति का उपयोग करें, संसाधनों के फ़िल्टरिंग को सक्रिय करें, और प्रोफाइल में अलग-अलग मान सेट करें। ऐसा ही कुछ:
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>${my.jndi.name}</jndi-name>
</resource-ref>
स्रोत
2010-01-18 10:24:36
कि अब बेहतर महसूस करता है के लिए देख :) – Bozho