2010-01-18 7 views
6

हमारे कोड में ऐसा कुछ है:संकलन समय में संसाधन एनोटेशन के लिए नाम कैसे निर्दिष्ट करें?

@Resource(name = "java:comp/resource/foo/bar/ONE_QUEUE") 
private Queue queue; 

हालांकि, एक परिनियोजन परिदृश्य में कतार एनोटेशन इस तरह दिखना चाहिए:

@Resource(name = "java:comp/resource/foo/bar/SECOND_QUEUE") 
private Queue queue; 

मैं मेवेन बिल्ड प्रोफाइल के साथ उपयोग करने के लिए नाम चुनना चाहता हूं।

मेरे पास कौन से विकल्प हैं?

उत्तर

10

यह चीजों को करने का सही तरीका नहीं है। संसाधनों को व्यक्तिगत ईजेबी के स्थानीय जिन्दी नाम में जोड़ा जाना चाहिए। बीन नियोक्ता द्वारा निर्धारित ग्लोबल जेएनडीआई बाइंडिंग से बीन कोड में इस्तेमाल किए गए जेएनडीआई नाम को अलग करना है। बीन स्थानीय 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> 
+1

कि अब बेहतर महसूस करता है के लिए देख :) – Bozho

1

मुझे लगता है कि आप मेवेन फ़िल्टरिंग का उपयोग कर सकते हैं, हालांकि यह अजीब लगेगा।

Here इस दृष्टिकोण के बारे में एक लेख है।

+0

एक दिलचस्प विचार है कि, धन्यवाद टिप – tputkonen

0

आप प्रति-सेम config करने के लिए नहीं करना चाहते हैं, तो आप इस के लिए JBoss सीवन कार्यक्षमता (Seam reference doc देखें) इस्तेमाल कर सकते हैं। मुझे नहीं पता कि यह जावा निर्भरता इंजेक्शन विनिर्देश (जेएसआर -29 9) का हिस्सा है (यदि आप विक्रेता स्वतंत्रता के बारे में चिंता करते हैं)।

संपादित करें: जाहिर है यह JSR-299 का हिस्सा है, resin's doc about JSR-299

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