繁体   English   中英

帮助在Tomcat 5.5.x中使用嵌入式JBoss配置JNDI

[英]Help configuring JNDI with embedded JBoss in Tomcat 5.5.x

当我在我的代码中尝试以下查找时:

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。 我使用配置维基页面中指定的“默认扫描每个WAR”部署来配置Tomcat。

引用配置页面:

JNDI

嵌入式JBoss组件(如连接池,EJB,JPA和事务)广泛使用JNDI来发布服务。 嵌入式JBoss通过在Tomcat的JNDI实例化之上分层来覆盖Tomcat的JNDI实现。 有几个原因:

  1. 避免必须在server.xml中声明这些服务中的每一个
  2. 允许在web应用程序和EJB之间无缝集成java:comp命名空间。
  3. Tomcat的JNDI实现中存在一些严重错误,阻碍了一些JBoss组件的工作能力
  4. 我们希望为您提供远程查找远程查找EJB和其他服务的选项

任何人都有任何关于我如何配置JBoss命名服务的想法,根据上面的报价覆盖Tomcat的JNDI实现,以便我可以在java:comp / env上查找?

仅供参考 - 我的环境Tomcat 5.5.9,Seam 2.0.2sp,嵌入式JBoss(Beta 3),

注意:我的数据库连接正确设置了-ds.xml文件,并且可以按照说明在类路径上访问。

另请注意:我已在嵌入式Jboss论坛和缝用户论坛中发布此问题。

感谢响应工具包....是的,我可以通过直接访问java:jdbc / mydb来访问我的数据源,但我正在使用通过ENC连接的现有代码库。 这是我发现的一些有趣的信息....

  1. 上面的代码适用于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

  2. 上面的代码适用于Tomcat 5.5.x ,这里是使用的JNDI ctx参数:
    java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming

  3. 上面的代码在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配置?

java:comp / env称为企业命名上下文(ENC),并不是全局可见的。 有关更多信息,请参见此处 您需要找到数据源注册的全局JNDI名称。

最简单的方法是导航到JBoss的基于Web的JMX控制台,并寻找一个'JNDIView'(不完全确定名称 - 目前在家里)mbean。 这个mbean应该有一个可以调用的列表方法,它将显示所有JNDI绑定对象的上下文路径。

我在Jboss Embedded上遇到了类似的问题,我终于修复了文件:test-Datasource-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

希望它有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM