Как я могу обеспечить, чтобы очереди шершней, когда мой WebApp начинается в JBOSS 6.0?
Вопрос
Предыдущее название было:
Как мне получить ссылку 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>
Мое icaperscontext.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 "Myтопическое"
Тем не менее делает весенний бросок
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, но на самом деле, что очереди шершней не настроены в то время, когда приложение запускается.
Если я развернул приложение некоторое время спустя, он будет работать совсем хорошо, потому что в это время очередей Hornet являются настроен.
Есть ли способ указать, что приложение не начнется до упора, или вариант конфигурации для 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.
Вы уверены, что у вас есть файл, как они предлагают, и он установлен правильно?