2010-11-24 8 views
2

früheren Titel war:Wie kann ich sicherstellen, dass die Hornet-Warteschlangen vorhanden sind, wenn meine Webanwendung in JBOSS 6.0 gestartet wird?

Wie bekomme ich einen JNDI-Verweis auf eine Warteschlange in JBOSS 6 mit Spring?

konfiguriert ich eine JMS-Warteschlange wie diese, die in einem MyTopic-HornetQ-jms.xml Datei ist:

<?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> 

Meine applicationContext.xml wie folgt aussieht:

<?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> 

Dies ist der Ausgang der JMX Console org.jboss.naming.JNDIView Verwendung:

+- 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) 

welche in mein Buch bedeutet, wird das Thema auf den JNDI-Namen „MyTopic“ gebunden

Dennoch Frühling

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] 

UPDATE

Es scheint, dass es nicht wirklich ein Problem aufzublicken wirft die JNDI-Referenz, aber tatsächlich, dass die Hornet-Warteschlangen nicht konfiguriert sind, wenn die Anwendung gestartet wird.

Wenn ich die Anwendung einige Zeit später bereitstellen, wird es problemlos ausgeführt, da zu diesem Zeitpunkt die Hornet-Warteschlangen konfiguriert sind.

Gibt es eine Möglichkeit, anzugeben, dass die Anwendung nicht gestartet wird, bis die Warteschlangen sind, oder ist die Konfigurationsoption für den Jboss, die Bereitstellung zu warten, bis der Rest gestartet wird?

Antwort

2

Ich habe erfolgreich den "Abhängigen" Mechanismus in Jboss 4.2 verwendet. Damit können Sie festlegen, dass etwas von etwas anderem abhängt (entweder mit XML-Deskriptoren oder für ejb3 können Sie Anmerkungen verwenden). Hier ist ein Link, um Sie zu bekommen started

+0

ja, das funktioniert gut – Mauli

0

Was ist, wenn Sie das Präfix java:/ hinzugefügt haben (das gleiche wie für JmsXA)? das heißt

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

BTW, ich sehe in Ihrem JNDI-Dump nichts definiert unter JmsXA Namen. Sie könnten auch ein Problem damit haben.

+0

Ich habe schon verschiedene Kombinationen ausprobiert. Der JNDI-Dump ist nur der Speicherauszug des globalen Namespaces. Der JmsXA ist tatsächlich unter dem Java-Präfix registriert, daher ist er nicht im globalen Namespace enthalten, und diese Nachschlagefunktion funktioniert einwandfrei. – Mauli

0

Ich habe nicht verwendet HornetQ, ich habe nur für Ihre Frage lesen Sie die tutorial on setting up Spring together with HornetQ. Dort gibt es einen Abschnitt über die Einrichtung jndi.properties. Dies ist wahrscheinlich, um sicherzustellen, dass HornetQ seine Daten in JBoss JNDI-Kontext registriert.

Sind Sie sicher, dass Sie eine Datei haben, wie sie sie vorschlagen, und sie richtig platziert?