2010-11-24 8 views
2

前のタイトルは:WebアプリケーションがJBOSS 6.0で起動するとき、ホーネットキューが確実に存在するようにするにはどうすればよいですか?

Springを使用してJBOSS 6内のキューにJNDIリファレンスを取得するにはどうすればよいですか?

は、私は、ファイルmytopic-HornetQは-のjms.xmlである。このようなJMSキューを、構成された:

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

私の本は、それでも春は

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

を投げるん、実際に見上げ問題ではないこと、思わ

、トピックはJNDI名「mytopic」にバインドされていることJNDIリファレンスを使用していますが、実際にはアプリケーションの起動時にはホーネットキューは設定されていません。

この時点で、ホーネットキューに設定されているため、後でアプリケーションを展開するとうまく動作します。

キューが始まるまでアプリケーションが起動しないように指定する方法や、残りが開始されるまでjbossが配置を保持するための設定オプションはありますか?

答えて

2

私はJboss 4.2で "depends"メカニズムを採用しました。これにより、何かが他のものに依存することを指定できます(xml記述子を使用するか、ejb3の場合は注釈を使用できます)。ここにあなたを得るためのリンクですstarted

+0

はい、これは正常に動作します – Mauli

0

java:/接頭辞を追加した場合(JmsXAの場合と同じ)すなわち

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

私はあなたのJNDIダンプにJmsXAという名前で定義されたものは表示されません。あなたもそれに問題があるかもしれません。

+0

私はすでに異なる組み合わせを試しました。 JNDIダンプは、グローバル名前空間のダンプだけです。 JmsXAはjava接頭辞の下に実際に登録されているため、グローバル名前空間には含まれておらず、そのルックアップはうまく動作します。 – Mauli

0

私はHornetQを使用していません。あなたの質問のためだけに、tutorial on setting up Spring together with HornetQを読んでください。そこには、jndi.propertiesを設定するセクションがあります。これは、おそらく、HornetQがJBossのJNDIコンテキストにその要素を登録するようにするためです。

ファイルがあり、正しく配置されていますか?

関連する問題