CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

JNDI的问题

楼主xywl(xywl)2006-07-04 10:50:40 在 Java / J2EE / EJB / JMS 提问

在tomcat中,我在程序中用  
  DataSource   ds   =   (DataSource)   cxt.lookup(   "java:/comp/env/jdbc/postgres"   );  
  在OC4J中,程序用  
  DataSource   ds   =   (DataSource)   cxt.lookup(   "jdbc/postgres"   );  
  为什么tomcat要用java:/comp/env这个东东,而OC4J用了这个东东还不行.搞得程序在不用的APPSVR中还要修改才能用. 问题点数:20、回复次数:12Top

1 楼Javafan0(狂刀)回复于 2006-07-04 10:57:12 得分 0

其实这两种写法在j2ee规范中都是可以的.  
   
  好一点的j2ee服务器是能自动识别.  
   
  其实这个识别程序做起来也不会很麻烦的,2~3行代码就可以搞定了.Top

2 楼xywl(xywl)回复于 2006-07-04 11:09:20 得分 0

那还有那些appserv用  
  DataSource   ds   =   (DataSource)   cxt.lookup(   "java:/comp/env/jdbc/postgres"   );  
  这种模式的呢?Top

3 楼shangqiao(伤桥(千万不要理解为我可怜桥,是“伤心桥下”的缩写))回复于 2006-07-04 11:23:38 得分 0

java:/comp/env一般是在本地使用,访问本地资源(在同一个服务器中的),而不加这个是外部Top

4 楼chnic(挠痒痒)回复于 2006-07-04 11:43:47 得分 20

java:/comp/env这个叫单点入口地址。  
  每一个容器提供厂家都有一个特定的单点入口地址。  
  当你在容器外用JNDI拿容器里的东西时   比如tomcat。你当然要提供单点入口地址  
  否则JVM怎么知道你调用的到底只哪个容器里的东西?  
  而在容器内就不必提供单点入口地址了。因为默认的会调用自己容器中的东西。Top

5 楼xywl(xywl)回复于 2006-07-04 12:57:12 得分 0

<Context   docBase="accounting"   path="/accounting"   reloadable="true"   source="org.eclipse.jst.j2ee.server:accounting">  
              <Resource   name="jdbc/postgres"  
                                auth="Container"  
                                type="javax.sql.DataSource"/>  
   
      <ResourceParams   name="jdbc/postgres">  
          <parameter>  
              <name>factory</name>  
              <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>  
          </parameter>  
          <parameter>  
              <name>maxActive</name>  
              <value>100</value>  
          </parameter>  
          <parameter>  
              <name>maxIdle</name>  
              <value>30</value>  
          </parameter>  
          <parameter>  
              <name>maxWait</name>  
              <value>10000</value>  
          </parameter>  
          <parameter>  
            <name>username</name>  
            <value>accounting</value>  
          </parameter>  
          <parameter>  
            <name>password</name>  
            <value>61882636</value>  
          </parameter>  
          <parameter>  
                <name>driverClassName</name>  
                <value>org.postgresql.Driver</value>  
          </parameter>  
          <parameter>  
              <name>url</name>  
              <value>jdbc:postgresql://localhost:5000</value>  
          </parameter>  
      </ResourceParams>  
              </Context>  
  ---------------------------------------------  
  我在accounting   这个应用中使用jdbc/postgres不用使用  
  DataSource   ds   =   (DataSource)   cxt.lookup(   "jdbc/postgres"   );  
  这个吗,一个Context是不是一个容器Top

6 楼cxq82ok(我の心太乱)回复于 2006-07-04 13:49:32 得分 0

我在tomcat中server.xml配置了,在jbuilder中编辑工程时报Name   jdbc   is   not   bound   in   this   Context。jbuilder编译后调的是工程下的server8083.xml,里面没有jndi配置,jbuilder里那里设置jndi?。Top

7 楼shangqiao(伤桥(千万不要理解为我可怜桥,是“伤心桥下”的缩写))回复于 2006-07-04 16:20:31 得分 0

to   chnic(挠痒痒)   :  
  我觉得好象不是这样的吧!我记得好象是如果java:/comp/env开头,就是从自己里面取,如果不是就是从远程的。至于你说的“否则JVM怎么知道你调用的到底只哪个容器里的东西”,这个是根据JNDI的配置,其中INITIAL_CONTEXT_FACTORY可以设定jndi用哪一个什么规范实现,相当于访问谁的服务器,如tomcat还是jboss,而服务器的地址通过PROVIDER_URL设定Top

8 楼chnic(挠痒痒)回复于 2006-07-04 16:51:54 得分 0

to   shangqiao(伤桥(千万不要理解为我可怜桥,是“伤心桥下”的缩写)  
  假如你在tomcat中绑定了一个bean,如果你要在容器外用就是像你说的一样,必须要用hashtable,里面放java:/comp/env这样的JNDI地址,还要提供一个工厂。如果是在容器里面比如说是在JSP里面调用这个bean就直接用lookup()方法就好了。其实JNDI就是一个层次型的数据库。没有上层是得不到下层的。就像遍历XML一样。你要遍历子节点必须要先遍历父节点的道理一样。Top

9 楼xywl(xywl)回复于 2006-07-05 02:29:26 得分 0

我就是想有一种通用的解决方法,除了改程序以外.Top

10 楼xywl(xywl)回复于 2006-07-05 12:43:04 得分 0

问一个,在websphere中是那种方法?Top

11 楼Javafan0(狂刀)回复于 2006-07-05 12:55:35 得分 0

websphere   用  
  DataSource   ds   =   (DataSource)   cxt.lookup(   "jdbc/postgres"   );  
  Top

12 楼kaolaxiong(考拉熊)回复于 2006-07-05 14:02:50 得分 0

websphere     V6:  
  既可jdbc/postgres   也可   java:comp/....  
  在V6中推荐后一种  
   
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:xywl
  • chnic

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo