这两天研究了一下 context.lookup("java:comp/env/XXX")和直接context.lookup("XXX")的区别
网上关于这两个的文章也很多,但是都说得很难理解,比如什么ENC环境啊什么的,各种概念。
其实说得简单点:context.lookup("java:comp/env/XXX")只能用在J2EE环境,即是如果你自己写一个main函数,想通过context.lookup("java:comp/env/XXX")这样的方式来访问JNDI服务,这是不可能的。
因为:java:comp/env/是一个J2EE环境的定义,说白了就是代表当前J2EE应用的环境,比如你自己项目的Web环境或者是EJB环境,那是不是只要是个Web项目,就能用context.lookup("java:comp/env/XXX")这种方式访问JNDI服务了呢?也不是!!!
使用这样的方式必须做一次 当前应用环境 到 资源名 的映射。
在web.xml文件中有这样的标签:
<resource-env-ref></resource-env-ref>
<resource-ref></resource-ref>
<ejb-local-ref></ejb-local-ref>
<ejb-ref></ejb-ref>
这些标签就是用来建立当前应用环境到服务器资源的映射的。
有了这样的映射之后,就能采用context.lookup("java:comp/env/XXX")的方式来访问JNDI资源了。
注意:context.lookup("XXX")在任何时候都是有效的,只要XXX确实是一个存在的JNDI名。
举个例子:
用weblogic10的控制台定了了一个oracle数据源,这个数据源的JNDI名称是:adsl,那么只要正确连接上了weblogic(当然需传递URL,用户名和密码还有weblogic的JNDI工厂对象,这不属于该文的讨论范围)在任何地方都能用context.lookup("xxx")得到这个数据源了,但是想通过context.lookup("java:comp/env/jdbc/adsl")访问到这个数据源,就不行了。如果想这样写的话需要做两件事情:
1、确保你的调用程序是一个web项目或者EJB项目,并部署到weblogic上。(例子使用web项目)
2、在web项目的web.xml里面加上如下配置:
<resource-ref>
<res-ref-name>jdbc/adsl</res-ref-name>
<res-auth>Container</res-auth>
<mapped-name>adsl</mapped-name> <!-- 这个必须和你的全局JNDI数据源名称一样 -->
</resource-ref>
那么你就能在你的web程序里通过context.lookup("java:comp/env/jdbc/adsl")访问到这个数据源了。
关于EJB的访问也类似这样,可以直接访问全局EJB的JNDI名,和可以映射之后从java:comp/env/下进行访问。
以上的讲解有错。。。。。
上面的情况只适用于weblogic和J2EE 2.5的规范下。
一:如果不是J2EE 2.5的规范:那么在你的web项目的web.xml内将根本不会存在<mapped-name>这个标签,那么怎样才能映射全局JNDI资源到你的项目呢?
以weblogic为例,你需要在和web.xml同级的目录下建立:weblogic.xml文件,在该文件里面写上:
<weblogic-web-app>
<resource-description>
<res-ref-name>jdbc/adsl</res-ref-name>
<jndi-name>adsl</jndi-name><!-- 这个就是全局JNDI资源名 -->
</resource-description>
</weblogic-web-app>
然后你仍然需要在web.xml里面配置上:
<resource-ref>
<res-ref-name>jdbc/adsl</res-ref-name>
<res-auth>Container</res-auth>
</resource-ref>
这样你才可以在你的程序里面通过context.lookup("java:comp/env/jdbc/adsl")访问到这个数据源。
这个是weblogic.xml的官方帮助文档:http://edocs.weblogicfans.net/wls/docs92/webapp/weblogic_xml.html
二:如果不是使用weblogic,可参见这篇文章:http://blog.csdn.net/lovingprince/article/details/6577920
其实各种不同的J2EE容器,都用不同的配置方式,以我目前的测试来看,weblogic似乎不能配置“私有的JNDI资源”,就是不能配置自己项目单独的JNDI资源(这只是我的观点,我目前没发现怎么在weblogic里面配置私有JNDI资源)
但是研究tomcat6之后发现,tomcat可以配置 全局JNDI 和私有JNDI(注意这里说的Tomcat6):
!!!首先想要说明的是Tomcat的配置不需要修改web.xml里面的任何内容!!!!!
!!!Tomcat的全局JNDI资源不能直接访问,必须有java:comp/env/前缀!!!!!!
全局的JNDI配置在server.xml里面的<GlobalNamingResources>标签里面添加如下配置:
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
然后某一个项目想要引用这个全局的JNDI,就需要在项目的META-INF下面建立context.xml文件,在里面写上:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<ResourceLink name="jdbc/test" global="jdbc/test" type="javax.sql.DataSource"/>
</Context>
这样就可以在程序里面通过context.lookup("java:comp/env/jdbc/test")进行访问了。
私有的JNDI有三种方式可以配置:
1、可以直接在server.xml里面的<Host>节点下添加如下配置:
<Context path="/test_tomcat6_jndi">
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
</Context>
这样就可以直接在程序中通过context.lookup("java:comp/env/jdbc/test")访问了,需要注意的是path="/test_tomcat6_jndi",这个名字必须和你的项目名称相同,而且不能少了那个斜杠,而且你的项目是通过拷贝文件夹到webapps下面的方式进行的部署。
2、 也可以在conf/context.xml里面增加如下配置:
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
这样就可以直接在程序中通过context.lookup("java:comp/env/jdbc/test")访问了
3、还可以在项目的WebRoot下面的META-INF文件夹下面创建context.xml文件,再在context.xml文件里面写上
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
</Context>
这样就可以直接在程序中通过context.lookup("java:comp/env/jdbc/test")访问了
你可以发现的是:以上的Tomcat6中的配置不管是全局还是局部,都没有修改项目的web.xml文件,但是仍然建议在web.xml中进行引用,主要是为了项目的迁移,因为有的服务器需要在web.xml中进行声明!
总之:各种服务器有时候确实有比较大的出入,特别是感觉J2EE中类似<resource-ref>这样的一些标签仍然不是很理解。
分享到:
相关推荐
本次修订内容:1、修订了ProcessVO类中java....3、去掉DbConnection早期数据源名称需要加"java:comp/env/"前缀的做法,修订后,是否需要加此前缀,请用户根据需要决定。已在Tomcat、GlassFish中测试通过数据源连接。
- **源码说明**:(nacos的ip配置自行修改,全局变量DEV_CONFIG设置:1=zsz,2=comp,3=home) - goods_srv/model/sql/mxshop_goods.sql:包含了建表语句 - other_import/api.json:YApi的导入文件 - other_import/...
Marvelous A practicing app to try out all the new cool Android tools all around the corner, while using Marvel Comics API. Requirements Put your Marvel API keys...you may not use this file except in comp
yum报错处理,引入文件到缺失目录下即可
IDCardCamera Android自定义身份证相机 效果图 APK 功能特点 自定义相机界面 支持开启闪光灯 支持手动触摸屏幕对焦 支持自动聚焦 支持图片自动裁剪 支持图片手动不规则裁剪 ...步骤1....步骤2....IDCardCamera.create(this...
1、该文档将会帮助你快速安装和使用mysql 2、安装的环境是centos7 3、直接执行mysql-install.sh脚本即可完成安装,当然你可以按照“安装”步骤修改你的参数 4、默认会在/data/mysql路径下安装 ...6、默认会在安装目录下...
Foortran特殊函数计算的子程序Foortran特殊函数计算的子程序Foortran特殊函数计算的子程序
关于这篇“常见问题解答” ************************ 这篇“常见问题解答” 由Patrick Horgan自一九九六年五月开始起草;因其历经 数月未复更新,我从而...服务器也会在目录“comp.unix.programmer”下存放这篇文档。
[graph](./img/model.png) ## Results ![compare](./img/compare.png) - BSD68 Average Result The average PSNR(dB) results of different methods on the BSD68 dataset. | Noise Level | BM3D | WNNM | ...
DataSource source = (DataSource) ic.lookup("java:comp/env/jdbc/jndidemo"); dbcon = source.getConnection(); 需要导的包 import javax.naming.Context; import javax.naming.InitialContext; import ...
import urllib.request import re class NeihanSpider: def __init__(self): ... self.headers = {"User-Agent":"Mozilla/5.0"} self.page = 1 # 下载页面 def loadPage(self,url): ... p = re.comp
-- <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/store" />--> <!--Hibernate配置--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!...
COMP445 网络类设置进入根目录mkdir bin 光盘进入src javac -d ../bin Httpc.java测试中在src文件夹中java -cp ../bin Httpc help java -cp ../bin Httpc get -ha:b -hc:d 'http://httpbin.org/get' java -cp ../bin...
作业 1 Comp 20:简历、简历和主页 据我所知,分配的所有方面都已正确实施。 我与 Dorian Pistili 就这项任务进行了非常简短的交谈。 我花了大约 5 个小时完成这项任务。 这项工作让我创建了自己的主页,其中...
MP3音频录制,支持类似IOS本机的单边或二进制波形显示,低版本音频权限兼容,本地或在线音频播放。可以单纯使用录制功能,也可以单纯使用图形,播放也支持波形显示,录制波形和播放波形会根据声音频率变色的功能,边...
CYK解析器小组成员卡洛斯·马蒂亚斯,链接: ://sigarra.up.pt/feup/pt/fest_geral.cursos_list?pv_num_unico=201105623 Luís Abreu,链接: ://sigarra.up.pt/feup/en/fest_geral.cursos_list?...
COMP90055-基于社交媒体的项目估算人群 Subject Name: COMP90055 COMPUTING PROJECT Author : Weijia Chen Student Number : 616213 Supervisor : Prof. Richard Sinnott Project Name : Estimating Crowds Based on...
ART是XVCL的改进版本(http://xvcl.comp.nus.edu.sg或https://sourceforge.net/projects/fxvcl/)。 ART用一个简单,功能强大且完全自动化的,经过深思熟虑的机制取代了对多种可变性管理技术的需求。 ART允许您组织...
WHS和SMS计算机科学俱乐部WHS Comp科学俱乐部链接链接树: ://bit.ly/compscilinktree GitHub: : 网站: : HackerRank: ://bit.ly/compscihackerrank 注册表格: : 不和谐: : 提醒:@walnutcs或SMS Comp科学...
YaMvp Yet another MVP library. Super simple, but with enough functionality. Demo Modules allprojects { repositories { ...The core MVP part, only 3 classes, less than 100 lines ...YaRxDelegate: Comp