代码之家  ›  专栏  ›  技术社区  ›  Joe Dean

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

  •  5
  • Joe Dean  · 技术社区  · 18 年前

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

    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安装了嵌入式JBoss wiki instructions . 我配置了Tomcat,使用中指定的“默认扫描每一次战争”部署 configuration wiki page .

    引用配置页:

    JNDI

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

    1. 为了避免在server.xml中声明这些服务中的每一个。
    2. 允许在Web应用程序之间无意义地集成Java:COMP名称空间 EJBs。
    3. Tomcat的JNDI实现中有一些关键的bug妨碍了一些JBoss 组件工作能力
    4. 我们希望为您提供远程处理EJB和其他可以远程查找的服务的选项。

    关于如何配置JBASS命名服务,任何人都有任何想法,根据上面的引用,我将重写Tomcat的JNDI实现,这样我就可以在Java:COMP/Env上查找了吗?

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

    注意:我确实有一个-ds.xml文件用于数据库连接的正确设置,并且可以根据说明在类路径上进行访问。

    另请注意:我已经在嵌入式JBoss论坛和Seam用户论坛中发布了这个问题。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Joe Dean    18 年前

    感谢您的响应工具包….是的,我可以直接访问Java:JDBC/MyDB来访问数据源,但我使用的是通过EnC连接的现有代码库。这里有一些有趣的信息,我已经发现了…

    1. 上述代码适用于 JBase4.2.2.Ga 下面是使用的JNDI CTX参数:
      java.命名 Java.No.Cuff.URL .PKGS= org .jBase.命名:Or.JNP.接口: org.jboss.naming:org.jnp.interfaces

    2. 上述代码适用于 Tomcat 5.5 x 下面是使用的JNDI CTX参数:
      Java.No.No.Cudio.Org.ApChan.NAMIG.JavaJavaLeCutEx工厂的命名 Java.No.No..URL.PKGS= Or.ApAC..NAMIN

    3. 上述代码失败 嵌入式JBoss(测试版3) 在带有上述错误消息的Tomcat 5.5.x中。
      Java.No.No.Cudio.Org.ApChan.NAMIG.JavaJavaLeCutEx工厂的命名 Java.No.Comp.URL.PKGS= Or.ApAC.EngEngIn上述代码失败,使用嵌入在Tomcat 5.5 .x中的JBOSS实现上述错误。

    有人对我配置嵌入式JBossJNDI配置有什么想法吗?

        2
  •  1
  •   toolkit    18 年前

    Java:COMP/Env被称为企业命名上下文(Enc),而不是全局可见的。见 here 更多信息。您需要定位数据源重新定位的全局JNDI名称。

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

        3
  •  1
  •   Kirijav    15 年前

    我在jboss嵌入方面也遇到了类似的问题,我最终修复了在文件中播放的问题: 测试-数据源-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>
    

    问题是JBASS添加前缀Java://声明所有数据源。所以最后我得到了一个名为testDatasource的数据源,它被JDBC/示例数据源的那个指令覆盖。

    希望它能起作用