سؤال

أحاول خلق ببساطة الاتصال شكرا باستخدام JNDI.


لدي

  1. طابور اسمه 'على سبيل المثال.A'.

  2. وفقا شكرا الوثائق لمس JNDI, إذا كنت ترغب في استخدام ConectionFactories و طوابير (الموضوعات) من طريق JNDI يجب أن المكان jndi.خصائص الملف على classpath.كما فهمت, شكرا classpath هو %شكرا%/conf الدليل بشكل افتراضي.لم يتغير ذلك.لذلك لدي هذه الخاصية بلدي الانتظار:

    قائمة الانتظار.MyQueue = مثال.A

  3. لقد خلق جافا العميل فئة شكرا والذي يستخدم JNDI على النحو التالي:

        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.تسمية.NameNotFoundException:MyQueue

أين هي بلدي misstakes?

هل كانت مفيدة؟

المحلول

المشكلة هي أنك صراحة إيجاد خصائص وتمريرها إلى InitialContext منشئ.هذا يعني jndi.خصائص على مسار الفئة لن تكون قراءة.

التعليمات البرمجية الخاصة بك ينبغي أن يكون شيئا مثل:

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

نصائح أخرى

يمكنك تعيين خصائص ثابتة وكذلك لاستردادها من الملف على هذا النحو:

    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);
...

يعمل هذا طالما يمكنك تعيين ثابت الدعائم بعد تحميل الموارد.مفيدة إذا كنت تحميل موفر url من مكان آخر على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top