tomcat下的jndi簡單配置
整理版
1.相關包
1、Javax.naming:包含了訪問命名服務的類和介面。例如,它定義了Context介面,這是命名服務執行查詢的入口。 2、Javax.naming.directory:對命名包的擴充,提供了訪問目錄服務的類和介面。例如,它為屬性增加了新的類,提供了表示目錄上下文的DirContext介面,定義了檢查和更新目錄物件的屬性的方法。 3、Javax.naming.event:提供了對訪問命名和目錄服務時的事件通知的支援。例如,定義了NamingEvent類,這個類用來表示命名/目錄服務產生的事件,定義了偵聽NamingEvents的NamingListener介面。 4、 5、Javax.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);――清單:返回繫結在特定上下文中物件的清單列表 |
方式1:自建context.xml寫配置
a.拷貝資料庫驅動jar包到Tomcat\lib目錄下b.在應用的META-INF
注意:名字必須為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:
在tomcat的context.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下引用配置資訊
先在Tomcat的server.xml中GlobalNamingResources節點,在節點下加一個全域性資料來源
<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.全域性引用
找到Tomcat的context.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資料來源;