我正在从 JBoss AS 4.0.4.GA 升级到 JBoss 6.0.0.Final。我一直无法从外部 Java 客户端查找 HornetQ 主题,所以我决定编写一个小的测试 Java 程序来简单地查找数据源。该查找失败。我可以在 Web 控制台中看到 DataSource,它具有:
Pool JNDI Name = MyDS
我曾经(使用 JBoss 4.0.4.GA)使用“java:/MyDS”查找数据源,但这不起作用。我看到一些关于无法从 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
我已经尝试使用“MyDS”而不是“java:/MyDS”进行查找,但它仍然失败。我认为问题不在于我用于查找的名称,而是阻止我从外部应用程序进行任何查找的东西——如果是这种情况,我需要启用此类查找。