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

时间:2008-09-23 18:11:10

标签: java jboss seam jndi embedded-jboss

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

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实例化之上分层自己来实现。有几个>原因:

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

感谢响应工具包....是的,我可以通过直接访问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时出现上述错误

  4. 任何人都有任何想法我需要做什么来配置嵌入式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

希望它有效