【SQL开源代码栏目提醒】:网学会员为广大网友收集整理了,java comp env获取数据源的语法 - 互联网,希望对大家有所帮助!
java comp env获取数据源的语法 关于获取数据源的语法大体有javax.
sql.DataSourcectx.lookupjavacomp/env/XXX和javax.
sql.DataSourcectx.lookupXXX两种写法好多人以为这两种写法是相同的以为都是通过JNDI来获取数据源。
其实javacomp/env和JNDI是不同的javacomp/env是环境命名上下文environment naming contextENC是在EJB规范1.1以后引入的引入这个是为了解决原来JNDI查找所引起的冲突问题也是为了提高EJB或者J2EE应用的移植性。
ENC是一个引用引用是用于定位企业应用程序的外部资源的逻辑名。
引用是在应用程序部署描述符文件中定义的。
在部署时引用被绑定到目标可操作环境中资源的物理位置JNDI名。
使用ENC是把对其它资源的JNDI查找的硬编码解脱出来通过配置这个引用可以在不修改
代码的情况下将引用指向不同的EJBJNDI。
在J2EE中的引用常用的有---JDBC数据源引用在javacomp/env/jdbc子上下文中声明---JMS连接工厂在javacomp/env/jms子上下文中声明---JavaMail连接工厂在javacomp/env/mail子上下文中声明---URL连接工厂在javacomp/env/url子上下文中声明假如你写了一个EJB获取datasource如dataSourceDataSourcectx.lookupjavacomp/env/jdbc/DBPool那么在配置文件中进行资源映射时在ejb-jar.xml中resource-ref res-ref-name jdbc/DBPool/res-ref-name res-type javax.
sql.DataSource/res-type res-auth Container/res-auth/resource-ref在weblogic-ejb-jar.xml中reference-descriptor resource-description res-ref-name jdbc/DBPool/res-ref-name jndi-name OraDataSource/jndi-name/resource-description/reference-descriptor//转者注如果是在jboss则在jboss.xml中做如下修改resource-managers resource-manager res-name jdbc/DBPool/res-name res-jndi-name OraDataSource/res-jndi-name/resource-manager/resource-managers实际服务器中的JNDI名字是OraDataSource逻辑名jdbc/DBPool只是用来和它作映射的这样做的好处是为了提高可移植性移植的时候只需要把配置文件改一下就可以而应用程序可不用改动。
假如你写了一个一般的应用程序想直接通过JNDI来获取数据源那么直接lookupmytest就可以了假如服务器上的JNDI为mytest用第一种写法反而会报错的。
可以在/WEB-INF/web.xml中定义资源的特性。
使用JNDI查找resource-ref和resource-env-ref元素时这些特性被返回。
对同一资源名称还必须定义资源参数这些参数用来配置对象工厂object factory以及对象工厂的属性。
例如web.xmlresource-ref description Employees Database for HR Applications/description res-ref-name jdbc/EmployeeDB/res-ref-name res-ref-type javax.
sql.DataSource/res-ref-type res-auth Container/res-auth/resource-ref resource-env-ref resource-env-ref-name jms/StockQueue/resource-env-ref-name resource-env-type javax.jms.Queue/resource-env-ref-type/resource-env-ref resource-ref/resource-env-ref元素的有效属性如下属性描述res-auth指定是web应用
代码本身sign on到对应的resource mananger还是由container代表web应用sign on到resource manager。
该属性的值必须是Application或者Container。
如果在web application deployment descriptor中使用resource-ref这个属性是必需的如果使用resource-env-ref这个属性是可选的。
description资源的文字描述可选res-ref-name/资源的名称相对于javacomp/env context res-env-ref-name res-sharing-scope指定通过这个resource manager得到的连接是否共享。
该属性的值必须是Shareable或者Unshareable。
缺省情况下假定连接是共享的。
res-ref-type/res-env-ref-type当web应用查找该资源的时候返回的Java类名的全称。
两者对比resource-ref--资源引用一般声明管理资源如数据库驱动程序、JavaMail Session、自定义类工厂等。
resource-env-ref--资源环境引用在Servlet 2.4里用来简化设置不需认证信息的资源环境一般声明与资源相关的被管理对象如环境参数、resource-ref变量。
看了JNDI的实现我感有点惊讶和一点迷惑惊讶的是系统编程比应用编程就难度来说还真不好说比如就象实现JNDISUN已经定好了Interface你要做的就是弄清楚整个功能的原理然后去实现他然而应用编程则没有人为你定好Interface你只能根据需求分析自己定好Interface自己定好框架但是这个框架能不能满足需求那就不好说了但是SUN定的规范可是肯定可以实现功能的并且一般情况下你必须全部实现接口中的每一个函数要不然人家说你又不符合他的规范不能通过他的认证。
好了下面我讲讲我读JNDI的经过。
JNDI的规范我大概的看了一下大概知道了JNDI是干什么用的实际上我的理解就是JNDI是一种服务什么样的服务呢就是你给我一个字符串我就给出对应字符串所对应的对象。
那这东西有什么用呢那我们不是经常在客户端写
代码的时候不是经常写Context ctxnew InitialContextObject objctx.lookup/ejb/LotteryEJB这样类似的
代码如果说/ejb/LotteryEJB是你刚才所说的字符串的话那obj就应该是对应的对象夷这怎么好象有点象EJB的调用啊哈哥哥你真是冰雪聪明这就是EJB调用开始的时候调用JNDI服务的
代码。
原来就是这样啊那实现这玩意不是太容易了弄一个HashMap的实例hm把你要部署的字符和对象通过hm.put/cs对象放进去如果谁要查的时候就是把要查的字符传过来Object cshm.get/csCS就是要你要找的对象。
CS好啊AKM4暴头.我想暴头想了很久了但是这CS到底是我要暴头的人还是和我一起暴头的人还是已被我暴头的人呢哈告诉你吧都是。
根据JNDI的规范这CS可以代表对象设备都可以当然只要你愿意连MM都可以代表真的哪里有啊我机子上好多啊---100多M的美女图片哦我差点忘了文件也可以是JNDI服务所返回的东东。
对了要是你问我MM图片怎么传到你的机子上面去我只能告诉你你可以通过socket传啊你传一个/cs我回传一个cs给你就这么简单。
好了如果到目前为止你只对我的100M图片感兴趣的话呢那你就不要往下看了你给我发E-MAIL我告诉你哪里还有好多。
org.huihoo.jfox.jndi下面的ContextImpl是实现Context接口但是很这个类不是实现真正JNDI功能的类真正实现该功能就是NamingServiceImpl类NamingService不是SUN规范所规定的接口但是他的函数和Context接口差不多也就是说完成的是和Context接口的功能差不多。
也就是说NamingServiceImpl才是JNDI服务的提供者而Context是客户端去调用JNDI服务的接口那提起服务的实现那大家都自然都想起了多线程就想起了一个孤独的socket的实例fox在不停的listenlisten啊但是他怎么等不到我要嫁给你的字符串fox不止一次的怀疑自己的实现的Runnable接口是否为倒版并且还怀疑对方是不是找对了IP而发错了端口。
所以说为了能更好提供JNDI服务NamingServiceImpl决定把自己交给ServiceWrapper包装一下然后再对外发布要知道ServiceWrapper专门为守侯线程所设计面对各种各样的的请求都能抓住处理掉并且面对各种请求都能一一满足。
现在我只希望ServiceWrapper能够满足我一种请求那就是--有没有吃的我好饿有没有人请吃饭啊我饿死了
上一篇:
NoSQL产品性能评测
下一篇:
法律专业开题报告范文