2008-09-23 71 views
5

当我尝试在我的代码如下查找:帮助中的Tomcat的5.5.x嵌入式JBoss的配置JNDI

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。我使用configuration wiki page中指定的“默认扫描每个WAR”部署Tomcat。

引述配置页:

JNDI

嵌入式JBoss的组件如连接池,EJB,JPA和交易作出 广泛使用JNDI来发布服务。嵌入式JBoss通过将自身分层到Tomcat的JNDI实例之上来覆盖Tomcat的JNDI 实现。有几个>原因:

  1. 为了避免这些服务的每一项声明的server.xml
  2. 内要允许的Java seemeless集成:Web应用程序和 EJB之间比较命名空间。
  3. Tomcat的JNDI执行中有一些严重的安全漏洞妨碍工作
  4. 我们想为你远程处理EJB和其他服务的,可>远程抬头
提供选项一些JBoss的 成分的能力

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

仅供参考 - 我的环境Tomcat的5.5.9,煤层2.0.2sp,嵌入式JBoss的(测试版3),

注:我有我的数据库连接正确设置一个-ds.xml文件,访问对每个指令的类路径。

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

回答

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的=组织。 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配置?

+0

你找到一个解决方案overrided? 我也有这个问题。应用程序适用于本地tomcat,数据源按预期工作,但是当嵌入JBoss时,出现“Name java:comp未绑定到此上下文”错误。 – 2009-02-20 02:12:13

1

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

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

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 /例的DataSource

希望工程