JBoss AS 4.0.4.GA から JBoss 6.0.0.Final にアップグレードしています。外部 Java クライアントから HornetQ トピックをルックアップできなかったため、DataSource の単純なルックアップを行う小さなテスト Java プログラムを作成することにしました。そのルックアップは失敗しています。Web コンソールで DataSource を確認できます。
Pool JNDI Name = MyDS
以前は (JBoss 4.0.4.GA で) "java:/MyDS" を使用して DataSource をルックアップしていましたが、うまくいきません。AS の外部からオブジェクト (キュー、トピック、データソース、EJB など) を検索できないという話を見たことがあります。その場合は驚くでしょうが、そうであれば、その「機能」を無効にするにはどうすればよいですか?
DS は server/myconf/deploy/mysql-ds.xml にあります。
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MyDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/mydb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>xxxxxxxx</user-name>
<password>xxxxxxxx</password>
<prepared-statement-cache-size>50</prepared-statement-cache-size>
<min-pool-size>20</min-pool-size>
<max-pool-size>40</max-pool-size>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
DS をルックアップする Java プログラムは次のとおりです。
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(javax.naming.Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
env.put(javax.naming.Context.PROVIDER_URL, "jnp://localhost:1099");
InitialContext ctx = new InitialContext(env);
Object o = ctx.lookup("java:/MyDS");
検索行は NameNotFoundException をスローします。
javax.naming.NameNotFoundException: MyDS not bound
「java:/MyDS」ではなく「MyDS」だけでルックアップを試みましたが、それでも失敗します。問題はルックアップに使用している名前ではなく、外部アプリケーションからのルックアップを妨げているものだと思います。その場合は、そのようなルックアップを有効にする必要があります。