当我在我的代码中尝试以下查找时:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
return (DataSource) envCtx.lookup("jdbc/mydb");
我得到以下异常:
java.sql.SQLException: QueryResults: Unable to initialize naming context:
Name java:comp is not bound in this Context at
com.onsitemanager.database.ThreadLocalConnection.getConnection
(ThreadLocalConnection.java:130) at
...
我按照JBoss wiki instructions安装了嵌入式JBoss。我使用configuration wiki page中指定的“默认扫描每个WAR”部署配置Tomcat。
引用配置页面:
JNDI
嵌入式JBoss组件,如连接池,EJB,JPA和事务 广泛使用JNDI来发布服务。嵌入式JBoss覆盖了Tomcat的JNDI 通过在Tomcat的JNDI实例化之上分层自己来实现。有几个>原因:
- 避免必须在server.xml中声明这些服务中的每一项
- 允许在web应用程序和Web应用程序之间无缝集成java:comp命名空间 的EJB。
- Tomcat的JNDI实现中存在一些阻碍某些JBoss的关键错误 组件的工作能力
- 我们希望为您提供远程处理EJB和其他服务的选项。远程查找
醇>
任何人都有任何关于如何配置JBoss命名服务的想法,根据上面的报价覆盖Tomcat的JNDI实现,以便我可以在java:comp / env上进行查找?
仅供参考 - 我的环境Tomcat 5.5.9,Seam 2.0.2sp,嵌入式JBoss(Beta 3),
注意:我的数据库连接正确设置了-ds.xml文件,并且可以按照说明在类路径上访问。
另请注意:我已在嵌入式Jboss论坛和缝用户论坛中发布此问题。
答案 0 :(得分:2)
感谢响应工具包....是的,我可以通过直接访问java:jdbc / mydb来访问我的数据源,但我正在使用通过ENC连接的现有代码库。这是我发现的一些有趣的信息......
上面的代码适用于 JBoss 4.2.2.GA ,这里是使用的JNDI ctx参数:
java.naming.factory.initial的= org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs = org.jboss.naming:org.jnp.interfaces:
org.jboss.naming:org.jnp.interfaces
上面的代码适用于 Tomcat 5.5.x ,这里是使用的JNDI ctx参数:
java.naming.factory.initial的= org.apache.naming.java.javaURLContextFactory
java.naming.factory.url.pkgs = org.apache.naming
上述代码因Tomcat 5.5.x中的嵌入式JBoss(Beta 3)而失败,并显示以上错误消息。
java.naming.factory.initial的= org.apache.naming.java.javaURLContextFactory
java.naming.factory.url.pkgs = org.apache.naming上面的代码在tomcat 5.5.x中使用JBoss Embedded时出现上述错误
任何人都有任何想法我需要做什么来配置嵌入式JBoss JNDI配置?
答案 1 :(得分:1)
java:comp / env称为企业命名上下文(ENC),并不是全局可见的。有关详细信息,请参阅here。您需要找到数据源注册的全局JNDI名称。
最简单的方法是导航到JBoss基于Web的JMX控制台,并寻找一个'JNDIView'(不完全确定名称 - 目前在家里)mbean。这个mbean应该有一个可以调用的list方法,它将显示所有JNDI绑定对象的上下文路径。
答案 2 :(得分:1)
我和Jboss Embedded有类似的问题,我终于修复了文件中的播放: 测试数据源-ds.xml中
添加
<mbean code="org.jboss.naming.NamingAlias" name="jboss.jmx:alias=testDatasource">
<attribute name="FromName">jdbc/Example DataSource</attribute>
<attribute name="ToName">java:/testDatasource</attribute>
</mbean>
问题是jboss为声明的所有数据源添加前缀java:/。所以最后我得到了一个名为testDatasource的数据源,用该指令覆盖了jdbc / Example DataSource
希望它有效