2009-01-17 14 views
6

के माध्यम से ActiveMQ का उपयोग करके मैं जेएनडीआई का उपयोग कर ActiveMQ से बस कनेक्ट करने की कोशिश कर रहा हूं। जेएनडीआई


मैं

  1. कतार 'example.A' नाम दिया है।

  2. ActiveMQ documentation touching JNDI के अनुसार, यदि मैं जेएनडीआई के माध्यम से कॉनक्शन फैक्ट्रीज और क्यूईज़ (टॉपिक्स) का उपयोग करना चाहता हूं, तो मुझे अपने क्लासपाथ पर jndi.properties फ़ाइल रखना होगा। जैसा कि मैंने समझा है, सक्रिय एमक्यू क्लासपाथ डिफ़ॉल्ट रूप से% activemq%/conf निर्देशिका है। मैंने इसे नहीं बदला है। तो मैं मेरी कतार के लिए इस संपत्ति है:

    queue.MyQueue = example.A

  3. मैं जो नीचे के रूप में JNDI का उपयोग करता ActiveMQ के लिए जावा ग्राहक वर्ग बनाया है:

    Properties jndiParameters = new Properties() ; 
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); 
        Context context = new InitialContext(jndiParameters); 
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); 
        Queue queue = (Queue) context.lookup("MyQueue"); 
    

लेकिन यह मेरी कतार नहीं पा रहा है, यह अपवाद फेंकता है: javax.naming.NameNotFoundException: MyQueue

मेरे गलत कहां हैं?

+0

मुझे एक समान समस्या है, मैं jndi url और कनेक्शन फैक्ट्री को कॉन्फ़िगर कर सकता हूं लेकिन मैं अतिरिक्त गुण प्रदान नहीं कर सकता। इस तरह ऐसा लगता है कि कतार अंतराल परिभाषित नहीं किया गया है। यह काम करता है अगर मैं गतिशील क्यूई/टेस्ट का उपयोग करता हूं, लेकिन क्या स्थाई नामित गंतव्यों को संबोधित करना भी संभव है? – eckes

उत्तर

5

समस्या यह है कि आप स्पष्ट रूप से गुण बना रहे हैं और उन्हें InitialContext कन्स्ट्रक्टर में पास कर रहे हैं। इसका मतलब है कि कक्षा पथ पर jndi.properties पढ़ा नहीं जाएगा। कुछ

आपका कोड होना चाहिए की तरह:

Context context = new InitialContext(); 
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); 
Queue queue = (Queue) context.lookup("MyQueue"); 
1

आप स्थिर गुण सेट करने के साथ ही उन्हें इस तरह के रूप में किसी फ़ाइल से प्राप्त कर सकते हैं:

InputStream is = getClass().getResourceAsStream("/my.jndi.properties"); 
    Properties jndiParameters = new Properties(); 
    jndiParameters.load(is); 
    jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
    jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); 
    Context ctx = new InitialContext(jndiParameters); 
... 

यह जब तक आप स्थिर सेट के रूप में काम करता है संसाधन लोड करने के बाद प्रोप। उपयोगी है अगर आप उदाहरण के लिए कहीं और से प्रदाता यूआरएल लोड कर रहे हैं।

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