站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题JNDI的问题

JNDI的问题

摘要: JNDI的问题


在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中还要修改才能用.


其实这两种写法在j2ee规范中都是可以的.

好一点的j2ee服务器是能自动识别.

其实这个识别程序做起来也不会很麻烦的,2~3行代码就可以搞定了.


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


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


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



auth="Container"
type="javax.sql.DataSource"/>



factory
org.apache.commons.dbcp.BasicDataSourceFactory


maxActive
100


maxIdle
30


maxWait
10000


username
accounting


password
61882636


driverClassName
org.postgresql.Driver


url
jdbc:postgresql://localhost:5000



---------------------------------------------
我在accounting 这个应用中使用jdbc/postgres不用使用
DataSource ds = (DataSource) cxt.lookup( "jdbc/postgres" );
这个吗,一个Context是不是一个容器


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


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


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


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


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


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



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




↑返回目录
前一篇: 请教高手一个关于字符串的问题!!!!!!!!!!!!!!!!
后一篇: JDBC接连ACCESS,总是出错No suitable driver,不知道为什么,麻烦各位大侠了