JNDI的專業解釋,大家自行去網絡搜索吧,這里就不啰嗦了。
單純從使用角度看,可以簡稱把它看成一個key-value的“哈希資源”容器。給定一個string類型的key,可以把任何類型的value,放入這個容器(通過bind/rebind方法);其它地方需要使用該資源時,根據key就能取出該資源(通過lookup方法)
JNDI使用示例:
package jmyang.weblogic;
/**
* <p>Title:JNDI示例(WebLogic環境) </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2012</p>
* <p>Company:cnblogs </p>
* @菩提下的楊過
* @version 1.0
*/
import javax.naming.*;
import java.util.Hashtable;
public class JNDITest {
static Context ctx = null;
public static void test() {
String key = "jmyang";
//先綁定
bind(key, "楊俊明");
//再取出來
String value = (String) lookUp(key);
System.out.print(key + "=" + value);
}
/*
*綁定
*/
public static void bind(String name, String object) {
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
try {
ctx = new InitialContext(ht);
ctx.rebind(name, object);
} catch (NamingException e) {
e.printStackTrace();
} finally {
try {
ctx.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
*
*/
public static Object lookUp(String name) {
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
try {
ctx = new InitialContext(ht);
Object object = ctx.lookup(name);
return object;
} catch (Exception e) {} finally {
try {
ctx.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
上述代碼執行完以后,也可能通過weblogic控制台,查看jndi樹來驗證:


JDBC數據源,實際上,也是使用JNDI服務來訪問的,下面是JDBC示例代碼:(必須先在weblogic中創建數據源)
package jmyang.weblogic;
/**
* <p>Title:JDBC示例(WebLogic環境) </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2012</p>
* <p>Company:cnblogs </p>
* @菩提下的楊過
* @version 1.0
*/
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import java.util.Hashtable;
public class JDBCTest {
static final String webLogicServer = "t3://localhost:7001"; //weblogic服務器地址
static final String webLogicINDIStr =
"weblogic.jndi.WLInitialContextFactory";
public static void test() {
Connection myConn = null;
DataSource ds = null;
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, webLogicINDIStr);
ht.put(Context.PROVIDER_URL, webLogicServer);
try {
ctx = new InitialContext(ht);
ds = (javax.sql.DataSource) ctx.lookup("infoskysso"); //取得名為infoskysso的數據源(注:infoskysso要在weblogic中設置數據源)
} catch (NamingException e) {
e.printStackTrace();
}
Statement myStatement = null;
ResultSet myResultSet = null;
try {
myConn = ds.getConnection();//建立連接
myStatement = myConn.createStatement();
myResultSet = myStatement.executeQuery(
"Select DEPTNO From DEPT where rownum<=10");
while (myResultSet.next()) {
System.out.println("DEPTNO=" + myResultSet.getInt("DEPTNO"));
}
myResultSet.close();
} catch (SQLException e) {
System.out.println("Error code = " + e.getErrorCode());
System.out.println("Error message = " + e.getMessage());
} finally {
//關閉查詢
if (myStatement != null) {
try {
myStatement.close();
} catch (SQLException e) {
System.out.println("Error code = " + e.getErrorCode());
System.out.println("Error message = " + e.getMessage());
}
}
//關閉連接
if (myConn != null) {
try {
myConn.close();
} catch (SQLException e) {
System.out.println("Error code = " + e.getErrorCode());
System.out.println("Error message = " + e.getMessage());
}
}
}
}
}
附: weblogic中創建jdbc數據源的方法






