كيف يمكنني التأكد من أن طوابير الدبور موجودة عندما يبدأ الويب الخاص بي في JBOSS 6.0؟

StackOverflow https://stackoverflow.com/questions/4269960

سؤال

العنوان السابق كان:

كيف يمكنني الحصول على إشارة JNDI إلى قائمة انتظار داخل JBOSS 6 باستخدام الربيع؟

قمت بتكوين قائمة انتظار JMS مثل هذا ، وهو في ملف mytopic-hornetq-jms.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
    <topic name="mytopic">
        <entry name="mytopic"/>
    </topic>
</configuration>

يبدو ApplicationContext.xml مثل هذا:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee 
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <jee:jndi-lookup id="jmsConnectionFactory" jndi-name="java:/JmsXA" />
    <jee:jndi-lookup id="jmsDestination" jndi-name="mytopic" expected-type="javax.jms.Topic" />
</beans>

هذا هو الإخراج باستخدام وحدة التحكم jmx org.jboss.naming.jndiview:

  +- UserTransactionSessionFactory (proxy: $Proxy103 implements interface org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory)
  +- UUIDKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory)
  +- HiLoKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory)
  +- SecureDeploymentManager (class: org.jnp.interfaces.NamingContext)
  |   +- remote[link -> DeploymentManager] (class: javax.naming.LinkRef)
  +- SecureManagementView (class: org.jnp.interfaces.NamingContext)
  |   +- remote[link -> ManagementView] (class: javax.naming.LinkRef)
  +- mytopic (class: org.hornetq.jms.client.HornetQTopic)
  +- DeploymentManager (class: org.jboss.aop.generatedproxies.AOPProxy$4)
  +- XAConnectionFactory (class: org.hornetq.jms.client.HornetQConnectionFactory)
  +- ProfileService (class: org.jboss.aop.generatedproxies.AOPProxy$2)
  +- SecureProfileService (class: org.jnp.interfaces.NamingContext)
  |   +- remote[link -> ProfileService] (class: javax.naming.LinkRef)
  +- queue (class: org.jnp.interfaces.NamingContext)
  |   +- DLQ (class: org.hornetq.jms.client.HornetQQueue)
  |   +- ExpiryQueue (class: org.hornetq.jms.client.HornetQQueue)
  +- UserTransaction (class: org.jboss.tm.usertx.client.ClientUserTransaction)
  +- ConnectionFactory (class: org.hornetq.jms.client.HornetQConnectionFactory)
  +- jmx (class: org.jnp.interfaces.NamingContext)
  |   +- invoker (class: org.jnp.interfaces.NamingContext)
  |   |   +- RMIAdaptor (class: javax.management.MBeanServerConnection)
  |   +- rmi (class: org.jnp.interfaces.NamingContext)
  |   |   +- RMIAdaptor (class: javax.management.MBeanServerConnection)
  +- BeanValidatorFactories (class: org.jnp.interfaces.NamingContext)
  +- TomcatAuthenticators (class: java.util.Properties)
  +- XAThroughputConnectionFactory (class: org.hornetq.jms.client.HornetQConnectionFactory)
  +- ManagementView (class: org.jboss.aop.generatedproxies.AOPProxy$3)
  +- ThroughputConnectionFactory (class: org.hornetq.jms.client.HornetQConnectionFactory)

وهذا يعني في كتابي ، الموضوع مرتبط باسم JNDI "mytopic"

ومع ذلك لا يرمي الربيع

18:45:29,636 ERROR [ContextLoader] Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsDestination': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: mytopic not bound
...
Caused by: javax.naming.NameNotFoundException: mytopic not bound
  at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) [:5.0.5.Final]
  at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) [:5.0.5.Final]
  at org.jnp.server.NamingServer.getObject(NamingServer.java:785) [:5.0.5.Final]
  at org.jnp.server.NamingServer.lookup(NamingServer.java:443) [:5.0.5.Final]

تحديث

يبدو أن الأمر ليس مشكلة في الواقع في البحث عن مرجع JNDI ، ولكن في الواقع لم يتم تكوين طوابير الدبور في الوقت الذي يبدأ فيه التطبيق.

إذا قمت بنشر الطلب في وقت لاحق ، فسيتم تشغيله بشكل جيد ، لأنه في هذا الوقت طوابير الدبور نكون تكوين.

هل هناك طريقة لتحديد أن التطبيق لن يبدأ حتى تكون قوائم الانتظار ، أم أن خيار التكوين لـ JBOSS ليحتفظ بالنشر حتى يتم تشغيل الباقي؟

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

المحلول

لقد استخدمت بشكل ناجح آلية "تعتمد" في JBOSS 4.2. مع ذلك ، يمكنك تحديد أن شيئًا ما يعتمد على شيء آخر (إما باستخدام واصفات XML أو لـ EJB3 يمكنك استخدام التعليقات التوضيحية). هنا رابط للحصول عليك بدأت

نصائح أخرى

ماذا لو أضفت java:/ بادئة (نفس ما لديك لـ JMSXA)؟ بمعنى آخر

<jee:jndi-lookup id="jmsDestination" jndi-name="java:/mytopic" expected-type="javax.jms.Topic" />

راجع للشغل ، لا أرى أي شيء محدد تحت JmsXA الاسم في تفريغ JNDI الخاص بك. قد تواجه مشكلة في ذلك أيضًا.

لم أستخدم Hornetq ، لقد قمت فقط من أجل سؤالك اقرأ البرنامج التعليمي عند إعداد الربيع مع Hornetq. هناك قسم حول الإعداد jndi.properties. ربما يكون هذا هو التأكد من قيام Hornetq بتسجيل أغراضه في سياق JBOSS JNDI.

هل أنت متأكد من أن لديك ملف كما يقترحون ويتم وضعه بشكل صحيح؟

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