支持HW团队,就支付宝领取下面的红包吧! (打开支付宝就能领取!er1OEj73Uj), (打开支付宝收索“516503473”), 你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

Login or Sign up | Validate
| Search

博主:初学MPEG

初学MPEG 本博客-采用Python的web框架Django与Mysql数据库,致力于对Python、Django的了解 与研究
Django技术QQ群:XXXXXXX
Python技术QQ群:XXXXXXX

Category

Keywords

本站最新博文

友情链接  

小议 java:comp/env

类别:其他 状态:5,可回,会员可关联(良好) 阅读:3740 评论:0 时间:March 17, 2012, 3:42 p.m.
关键字:

 来源:http://www.blogjava.net/javababy/archive/2009/07/19/85881.html

 

关于获取数据源的语法,大体有(javax.sql.DataSource) ctx.lookup ("java:comp/env/XXX")和(javax.sql.DataSource) ctx.lookup("XXX")两种写法,好多人以为这两种写法是相同的,以为都是通过JNDI来获取数据源。其实java:comp/env和 JNDI是不同的,java:comp/env 是环境命名上下文(environment naming context(ENC)),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题,也是为了提高EJB或者J2EE应用的移植性。ENC是一个引用,引用是用于定位企业应用程序的外部资源的逻辑名。引用是在应用程序部署描述符文件中定义的。在部署时,引用被绑定到目标可操作环境中资源的物理位置(JNDI名)。使用ENC是把对其它资源的JNDI查找的硬编码解脱出来,通过配置这个引用可以在不修改代码的情况下,将引用指向不同的EJB(JNDI)。 在J2EE中的引用常用的有: 
---------JDBC 数据源引用在java:comp/env/jdbc 子上下文中声明 
---------JMS 连接工厂在java:comp/env/jms 子上下文中声明 
---------JavaMail 连接工厂在java:comp/env/mail 子上下文中声明 
---------URL 连接工厂在 java:comp/env/url子上下文中声明 

假如你写了一个EJB,获取datasource如:dataSource = (DataSource) ctx.lookup("java:comp/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来获取数据源,那么直接lookup(“mytest”)就可以了(假如服务器上的JNDI为mytest),用第一种写法反而会报错的。

操作:

Please Login (or Sign Up) to leave a comment