JNDI
它属于j2ee的一部份。。它的中文意思应该就是java 命名目录接口,通称(上下文接口)
主要是用来识别服务器的组件和相关资源。

解决方案 »

  1.   

    <res-ref-name>jdbc/demoPool</res-ref-name>
    问题就在这里啊。
      

  2.   

    comp/env/jdbc/demoPool
    是JNDI在Weblogic上影射的树目录路径,当然如果你影射成examples-dataSource-demoXAPool
    就直接这样写了。
    具体的名字建议发布成功以后,在Weblogic的Servers中的myserver(或是其他名字)察看JNDI树,就一目了然了
      

  3.   

    所有环境特性都以java:comp/env为上下文,后面紧跟别名
      

  4.   

    jdbc/demoPool是JNDI查找资源时用的引用,而examples-dataSource-demoXAPool是资源的JNDI名称,只是用来显示该资源的简单文本信息
      

  5.   

    可是我也是在weblogic中配置了数据库连接池  直接lookup(“jdbc/demopool”)就找回
    DataSource了,没有在前面加  java:comp/env/,我也不明白这个是干什么的。什么时候用,什么时候不用,我没有加也成了为什么
      

  6.   

    我觉得在J2EE中可以有两中查找资源的方式(我测试了两种都可以运行):
    1、直接按JNDI查找。如DataSource ds = (javax.sql.DataSource)initCtx.lookup("examples-dataSource-demoXAPool");
    2、间接查找。如DataSource ds = (javax.sql.DataSource)  initCtx.lookup("java:comp/env/jdbc/demoPool");这种情况是先根据ejb_jar.xml知道这是一个DataSource
    类型资源,然后再根据weblogic-ejb-jar.xml中指定的映射关系,知道实际的JNDI名为examples-dataSource-demoXAPool,然后在按examples-dataSource-demoXAPool直接查找?
     这是我的理解,请大家指正!
      

  7.   

    楼上说的对,两种方法都可以找到。
    这个问题在<<mastering ejb2>>中有说明,就是建议你不要在程序中直接写死ejb的jndi,而是用一个中间层的reference,就是上面的<res-ref-name>。这样做的目的就是当j2ee几个角色中的deployor重新布署或更改布署时(不是你自己布署),他可能会更改ejb的jndi,但因为你的程序用的是中间层,调用就不用作修改了。