在demo1中我們簡單實現了一個通過JNDI來獲得person這個對象,但是因爲運行在同一個項目中,表現的形式不是那麼強烈。
下面我們使用遠程的web服務器上的數據源來測試一下。遠程weblogic服務器上定義一個數據源。在本地通過JNDI獲得這個數據源,並且查詢遠程數據源中的數據。
在操作之前先來創建先決條件:
1.查看本地IP,確保weblogic服務器和本地不在一起
2.登陸weblogic,定義數據源(具體定義步驟在此就不細講,不會的可以在網上查一下)
以上是JNDI服務器的設置,簡單說就是在weblogic上面創建數據源。
下面使用JNDI獲得這個數據源。
6.在第一節JNDI概念中說過,Java只提供了JNDI的接口,具體的實現都是不同廠商提供。所以我們勢必要導入weblogic的JNDI的實現。
如何生成weblogic JNDI的實現?
生成與JDK版本對應的weblogicjar,利用cmd 進入到weblogic_home 路徑下進入到server/lib目錄,然後運行 JDK 1.6 命令 " java -jar wljarbuilder.jar" , 會生成wlfullclient.jar :
我們還有操作數據,所以也要使用JDBC的實現,後臺的數據庫使用的是Oracle,所以在項目中還要導入數據庫的驅動。
7.我們還是建立普通的Java項目,導入上面創建好的weblogic的jar包和數據庫操作的jar包。
8.開發代碼:
import java.rmi.registry.LocateRegistry;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class Test {
public static void findPerson() throws Exception{
//配置JNDI工廠和JNDI的url
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
System.setProperty(Context.PROVIDER_URL, "t3://10.1.71.**:7001");
//初始化
InitialContext ctx = new InitialContext();
//獲取datasoures
DataSource ds = (DataSource) ctx.lookup("dataSourceDBaihis");
//授權
Connection conn = ds.getConnection("weblogic", "*****"); //登陸weblogic的用戶名、密碼
//正常操作數據
Statement stmt=conn.createStatement();
String sql="select riskcode,riskname from pd_lmrisk";
ResultSet rs=stmt.executeQuery(sql);
while (rs.next()){
System.out.println("險種編碼:"+rs.getString(1)+" 險種名稱:"+rs.getString(2));
}
}
public static void main(String[] args) throws Exception {
findPerson();
}
}
PS:url和weblogic的用戶名和密碼請自行填寫
9.運行結果:
10.請求示意圖: