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

JDNI是什么

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

JDNI了解

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

数据库配置,基于JDNI

数据库配置无非分为两种,一种基于JNDI方式,一种非JDNC(jdbc)JDNI方式 server.xml: ...
  • cuisongliu
  • cuisongliu
  • 2015年10月14日 16:40
  • 445

jboss7.1.1配置jndi

环境:  joss7.1.1安装成功,路径为:D:\profession\jboss-as-7.1.1.Final mysql-connector-java-5.1.18-bin.jar(mysq...
  • johnjobs
  • johnjobs
  • 2014年03月05日 10:13
  • 1563

Tomcat JNDI配置

1.在Tomcat中添加JNDI数据源 建议用Tomcat的Adiminstration添加。在默认情况下,Tomcat没有安装administration组件,详细安装步骤请参考《Install t...
  • buoll
  • buoll
  • 2007年10月28日 13:18
  • 16893

【MyBatis】MyBatis Tomcat JNDI原理及源码分析

一、 Tomcat JNDI JNDI(java nameing and drectory interface),是一组在Java应用中访问命名和服务的API,所谓命名服务,即将对象和名称联系起来...
  • reliveIT
  • reliveIT
  • 2015年08月07日 09:30
  • 3440

Activemq学习笔记---Topic及JNDI使用

上一节已介绍了jms的数据传输模型基本概念,这节示例Pub/Sub模型。Activemq可以与jndi提供者配合使用,但其本身也提供了jndi服务,使得客户端可以在缺少JNDI提供者的情况下享受JND...
  • yuanxiaojiao0012
  • yuanxiaojiao0012
  • 2016年01月21日 10:29
  • 1415

在spring中的applicationContext.xml中,jndi与dataSource的写法区别

jndi bean写法的区别:           class="org.springframework.jndi.JndiObjectFactoryBean">       ------------...
  • lglchq327
  • lglchq327
  • 2009年10月17日 20:17
  • 3608

oracle JDNI 配置

JDNI——oracle 配置
  • qq_33291307
  • qq_33291307
  • 2017年02月12日 10:21
  • 94

JDNI 配置小实验

最近项目中用到了JNDI,花了半天时间做了JNDI小实验,主要也是参照网上的方法,总结如下: 一、关于tomcat的配置: context.xml 中加入以下配置:     driverClas...
  • kangaroo_07
  • kangaroo_07
  • 2014年08月01日 16:40
  • 253
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDNI配置和使用
举报原因:
原因补充:

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