Соединение с Weblogic Datasource - PullRequest
       25

Соединение с Weblogic Datasource

0 голосов
/ 13 февраля 2012

Я пытаюсь получить доступ к соединению источника данных через клиент Java с помощью этого кода:

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();
}

Но я получил следующую трассировку стека. Я не могу понять, что происходит. Кто-то знает?

Источник данных найден…

13 февраля 2012 16:07:28 GMT-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) на weblogic.utils.wrapper.WrapperFactory.createWrapper (WrapperFactory.java:175) на weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper (JDBCWrapperFactory.java:197) на weblogic.jdbc.rmi.SerialConnection.readResolve (SerialConnection.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в java.io.ObjectStreamClass.invokeReadResolve (ObjectStreamClass.java:1061) в java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1762) в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1329) в java.io.ObjectInputStream.readObject (ObjectInputStream.java:351) at weblogic.utils.io.ChunkedObjectInputStream.readObject (ChunkedObjectInputStream.java:197) at weblogic.rjvm.MsgAbbrevInputStream.readObject (MsgAbbrevInputStream.java:564) at weblogic.utils.io.ChunkedObjectInputStream.readObject (ChunkedObjectInputStream.java:193) на weblogic.rmi.internal.ObjectIO.readObject (ObjectIO.java:62) на weblogic.rjvm.ResponseImpl.unmarshalReturn (ResponseImpl.java:240) at weblogic.rmi.cluster.ClusterableRemoteRef.invoke (ClusterableRemoteRef.java:348) at weblogic.rmi.cluster.ClusterableRemoteRef.invoke (ClusterableRemoteRef.java:259) at weblogic.jdbc.common.internal.RmiDataSource_1031_WLStub.getConnection (неизвестный источник)

Заранее спасибо.

1 Ответ

0 голосов
/ 28 июня 2013

Если вы используете Weblogic 10.3 и более поздние версии, лучшее решение для защиты от дурака (которое не заставляет вас ломать голову):

Включите только файл wlfullclient.jar, найденный в $ {wlserver_10.3_installation_home} \ server \Папка 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 ....
...