1. 程式人生 > >tomcat下的jndi簡單配置

tomcat下的jndi簡單配置

整理版

1.相關包

1Javax.naming:包含了訪問命名服務的類和介面。例如,它定義了Context介面,這是命名服務執行查詢的入口。

2Javax.naming.directory:對命名包的擴充,提供了訪問目錄服務的類和介面。例如,它為屬性增加了新的類,提供了表示目錄上下文的DirContext介面,定義了檢查和更新目錄物件的屬性的方法。

3Javax.naming.event:提供了對訪問命名和目錄服務時的事件通知的支援。例如,定義了NamingEvent類,這個類用來表示命名/目錄服務產生的事件,定義了偵聽NamingEventsNamingListener介面。

4

Javax.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, [email protected], 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資料來源;