2012-02-13 111 views
0

我試圖訪問這些代碼通過Java客戶端數據源連接:Weblogic的數據源連接

Connection conn; 
Statement stmt; 
ResultSet rs; 

try { 
Properties prop = new Properties(); 
prop.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
prop.put(javax.naming.Context.PROVIDER_URL, "t3://localhost:7001"); 
Context ctx = new InitialContext(prop); 
Object obj = ctx.lookup("test/datasource"); 
System.out.println("Data Source Found…."); 

DataSource ds = (DataSource) obj; 
conn = ds.getConnection(); 
System.out.println("Data Source User Name::"+conn.getMetaData().getUserName()); 
stmt = conn.createStatement(); 

String query = "select 1 from dual"; 
System.out.println("Query " + query); 
rs = stmt.executeQuery(query); 
if (rs != null) { 
    System.out.println("Some Data Found in Query"); 
} else { 
    System.out.println("No Data Found in Query"); 
} 
ctx.close(); 
} catch (Exception e) { 
     e.printStackTrace(); 
} 

但我得到了下面的堆棧跟蹤。我無法弄清楚發生了什麼事。有人知道嗎?

數據源中......

2012年2月13日下午4時07分28秒格林尼治標準時間03:00信息JDBC BEA-001155已經出現以下異常:

顯示java.lang.NullPointerException 在weblogic的.utils.wrapper.WrapperFactory.getCachedWrapperClass(WrapperFactory.java:55) 在weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:202) 在weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:190 ) at weblogic.utils.wrapper.WrapperFactory.createWrapper(WrapperFactory.java:175) 在weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactory.java:197) 在weblogic.jdbc.rmi.SerialConnection.readResolve(SerialConnection.java:140) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1061) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1762) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java .io.ObjectInputStrea m.readObject(ObjectInputStream.java:351) 在weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:197) 在weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:564) 在weblogic.utils。 io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:193) at weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62) at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:240) at weblogic。 rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348) 在weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259) 在weblogic.jdbc.common.internal.RmiDataSource_1031_WLStub.getConnection(未知來源)

在此先感謝。

+1

你有沒有打開WebLogic控制檯並驗證是否一切正常您的數據源?它是否可以從Web控制檯進行測試? – Viccari 2012-02-13 20:50:44

+1

這是否出現在系統中? 'System.out.println(「Data Source Found ...。」);' – JoseK 2012-02-14 10:19:05

+0

謝謝你們。我已經解決了這個問題。我簡單地將weblogic控制檯上的連接字符串更改爲jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = OCDB )(INSTANCE_NAME = OCDB_1)))。這很奇怪,但工作! – elias 2012-02-24 18:04:17

回答

0

如果您正在使用的Weblogic 10.3及以上的最好證明傻瓜溶液(這不會讓你從頭開始你的頭)是:

只包括在 $ {wlserver_10.3_installation_home} \服務器\發現wlfullclient.jar lib文件夾

在你的類路徑(lib)中。這樣你就不需要weblogic.jar

如果你沒有找到wlfullclient.jar然後構建它。這裏是你如何構建它:

http://docs.oracle.com/cd/E12840_01/wls/docs103/client/jarbuilder.html

然後寫這樣的代碼:

//Some Code 

weblogic.jndi.Environment env = new weblogic.jndi.Environment(); 
env.setInitialContextFactory(Environment.DEFAULT_INITIAL_CONTEXT_FACTORY); 
env.setProviderUrl("t3://${weblogic_host_ip}:${weblogic_port_number}"); 
env.setSecurityPrincipal(${DB_USER}); 
env.setSecurityCredentials(${DB_PASSWORD}); 
java.lang.Object obj = null; 
try { 
      javax.naming.Context ctx = env.getInitialContext(); 
     obj = ctx.lookup(${JNDI_NAME_OF_DATA_SOURCE}); 
     javax.sql.DataSource ds = (javax.sql.DataSource) obj; 
     java.sql.Connection conn = ds.getConnection(); 
     java.sql.Statement stmt = conn.createStatement(); 
     java.sql.ResultSet rs = stmt.executeQuery("select '5' from dual"); 
     if(rs != null){ 
     rs.next(); 
     System.out.println(rs.getString(1)); 
    } 

    } catch (javax.naming.NamingException e) { 
     e.printStackTrace(); 
    } 

//Other Code ....