当我在我的代码中尝试以下查找时:
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 说明安装了嵌入式 JBoss 。我使用配置 wiki 页面中指定的“默认扫描每个 WAR”部署来配置 Tomcat 。
引用配置页面:
JNDI
嵌入式 JBoss 组件(如连接池、EJB、JPA 和事务)广泛使用 JNDI 来发布服务。嵌入式 JBoss 通过将自身置于 Tomcat 的 JNDI 实例之上来覆盖 Tomcat 的 JNDI 实现。> 原因有以下几点:
- 为了避免必须在 server.xml 中声明这些服务中的每一项
- 允许在 Web 应用程序和 EJB 之间无缝集成 java:comp 命名空间。
- Tomcat 的 JNDI 实现中存在一些严重的错误,这些错误会妨碍某些 JBoss 组件的工作能力
- 我们希望为您提供远程 EJB 和其他可以远程查找的服务的选项
任何人对我如何配置 JBoss 命名服务有任何想法,根据上面的引用,它会覆盖 Tomcat 的 JNDI 实现,以便我可以在 java:comp/env 上进行查找?
仅供参考 - 我的环境 Tomcat 5.5.9,Seam 2.0.2sp,嵌入式 JBoss(Beta 3),
注意:我确实有一个 -ds.xml 文件,用于根据说明正确设置并在类路径上访问我的数据库连接。
另请注意:我已经在嵌入式 Jboss 论坛和 seam 用户论坛中发布了这个问题。