JDNI配置和使用

转载 2017年08月02日 17:42:33

JNDI  java的命名与上下文接口,通常用于获取配置文件中的datasource或者内部访问路径,及属性配置.

javax.naming.Context context = new javax.naming.InitialContext();

context.lookup("java:/comp/env"+XXX);


 

需要注意的是,第一种方式配置的全局JNDI,需要在context中使用<ResourceLink>元素转换成局部名才可以使用,功能跟jboss-web.xml中的转换类似。另外,tomcat 中配置的资源不需要在web.xml中进行声明,也可以通过java:comp/env形式进行访问,这一点跟Jboss/jetty有区别。


以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")进行访问了。 

 tomcat中配置JNDI有三个地方:

 1、在服务器的Server元素下配置全局的JNDI<GlobalNamingResources> conf/server.xml

 2、在host元素的<DefaultContext>中配置,配置后对该host下所有的context应用都有效

 3、在context元素下配置,这里配置的只对该应用有效。

 

需要注意的是,第一种方式配置的全局JNDI,需要在context中使用<ResourceLink>元素转换成局部名才可以使用

另外,tomcat 中配置的资源不需要在web.xml中进行声明,也可以通过java:comp/env形式进行访问




      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")访问了 

相关文章推荐

Tomcat JDNI数据源配置详解

  • 2008年07月03日 12:00
  • 46KB
  • 下载

JDNI的三种配置方式

第一种,单个应用独享数据源 就一步,找到Tomcat的server.xml找到工程的Context节点,添加一个私有数据源 Context docBase="WebApp" pat...

Tomcat数据源,Jsp/Java使用JDNI服务来实现数据库连接

Tomcat数据源,使用JDNI服务来实现数据库的连接,相比于以前程序使用多个Socket连接的操作性能,提高了许多。...

在tomcat中设置网络访问的虚拟路径和使用JDNI设置文件路径常量

第一步: 在server.xml文件里面添加文件夹虚拟目录

java jdni

  • 2012年03月05日 21:12
  • 103KB
  • 下载

JDNI是什么

JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有...

Intellij IDEA下一个Tomcat启动带多个虚拟目录和JDNI数据源的应用的方法

前言: 之前公司做的一个老项目代码比较早,加上之前开发以实现功能为主,也没有对编码加以规范,开发中也有应届毕业的小孩,所以代码很烂。最近在重构过程中引出一些问题。 言归正传,场...
  • Zhaky
  • Zhaky
  • 2016年10月10日 17:52
  • 1788

JDNI学习总结(一)

一、数据源的由来   在Java开发中,使用JDBC操作数据库的四个步骤如下:       ①加载数据库驱动程序(Class.forName("数据库驱动类");)       ②连...

JDNI了解

在网上看到了这样的一道题目: 下列关于使用JNDI的说法中错误的是? A、可以解决多个应用程序访问同一个资源的问题 B、可以解决跨容器访问资源的问题 C、可以解决集群环境中资源共享问题 D、可以解决跨...

editplus-tools的下载和配置使用

  • 2017年11月20日 16:54
  • 18KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDNI配置和使用
举报原因:
原因补充:

(最多只允许输入30个字)