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數據源的方法