tomcat下的jndi简单配置

时间:2022-03-14 15:12:57

整理版

1.相关包

1Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。

2Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。

3Javax.naming.event:提供了对访问命名和目录服务时的事件通知的支持。例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件,定义了侦听NamingEventsNamingListener接口。

4Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。

5Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。

 

2.常用方法:

void bind(String sName,Object object);――绑定:把名称同对象关联的过程

void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定

void unbind(String sName);――释放:用来把对象从目录中释放出来

Object lookup(String sName);――查找:返回目录中的一个对象

void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称

NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表

 

3.配置tomcat的JNDI

方式1:自建context.xml写配置

a.拷贝数据库驱动 jar 包到 Tomcat\lib 目录下

b.在应用的META-INF目录下建立一个名称context.xml的配置文件;

注意:名字必须为context.xml,否则报错:

javax.naming.NameNotFoundException: Name [jdbc/test] is not bound in this Context. Unable to find [jdbc].

如下配置:

<?xml version="1.0" encoding="UTF-8"?>

<Context>

<Resource name="jdbc/test" 

auth="Container" 

type="javax.sql.DataSource"

username="root" 

password="root" 

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/test" 

maxActive="30" 

maxIdle="10"

maxWait="10000" />

</Context>

c.新建jsp,启动tomcat

<body>

<%--获取数据源 --%>

<%  

Context context = new InitialContext();

//Context context1 = (Context) context.lookup("java:comp/env");

//DataSource data = (DataSource) context1.lookup("jdbc/test");

  //等价如下:

DataSource data = (DataSource) context.lookup("java:comp/env/jdbc/test");

Connection con = data.getConnection();

//System.out.print(con);

//jdbc:mysql://localhost:3306/test, UserName=root@localhost, MySQL-AB JDBC Driver

System.out.print(con.getClass().getName());

//org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper

%>

</body>

其配置只对当前应用有效!


方式2:

tomcatcontext.xml下直接加入配置信息!

\tomcat7.0.57\conf下的context.xml下加入:

<?xml version="1.0" encoding="UTF-8"?>

<Context>

<Resource name="jdbc/test" 

auth="Container" 

type="javax.sql.DataSource"

username="root" 

password="root" 

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/test" 

maxActive="30" 

maxIdle="10"

maxWait="10000" />

</Context>

特点:对所有的应用有效;


方式3:

server.xml加入配置信息,然后在context.xml下引用配置信息

先在Tomcatserver.xmlGlobalNamingResources节点,在节点下加一个全局数据源

<Context>

<Resource name="jdbc/test" 

auth="Container" 

type="javax.sql.DataSource"

username="root" 

password="root" 

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/test" 

maxActive="30" 

maxIdle="10"

maxWait="10000" />

 

a.全局引用

找到Tomcatcontext.xml,Context节点下加一个ResourceLink节点对第一步配置的数据源进行引用这个XML配置文件的根节点就是<Context>

 

<Context>  

    <ResourceLink name="jdbc/test" global="jdbc/test" type="javax.sql.DataSource"/> 

    <WatchedResource>WEB-INF/web.xml</WatchedResource>  

<Context>  

这里也是对全局应用的;

 

b.局部引用

如果想让某一个项目想要引用这个全局的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")进行访问了。 


4.说明

java:comp/env/是一个J2EE环境的定义,代表当前J2EE应用的环境,只有在容器管理的web应用中才有效!

JBoss,Weblogic,websphere等服务器在管理界面可以直接添加JNDI数据源;