Java Weblogic数据源连接
我试图通过Java客户端访问数据源连接,代码如下:Java Weblogic数据源连接,java,database,oracle11g,weblogic,datasource,Java,Database,Oracle11g,Weblogic,Datasource,我试图通过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.PROVIDE
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();
}
//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 ....
但我得到了以下堆栈跟踪。我不知道发生了什么事。有人知道吗
找到数据源
2012年2月13日下午4: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)
在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.InvokereAddressResolve(ObjectStreamClass.java:1061)
位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1762)
位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
位于weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:197)
位于weblogic.rjvm.MsgAbbrevInputStream.readObject(msgabbrevenputstream.java:564)
位于weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:193)
位于weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62)
位于weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:240)
位于weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348)
在weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
位于weblogic.jdbc.common.internal.RmiDataSource_1031_WLStub.getConnection(未知源)
提前感谢。如果您使用的是Weblogic 10.3及以上版本,最好的傻瓜解决方案(不会让您抓狂)是: 只包括在中找到的wlfullclient.jar ${wlserver\U 10.3\U安装\U home}\server\lib文件夹 在您的类路径(lib)中。这样您就不需要weblogic.jar了 如果找不到wlfullclient.jar,则构建它。以下是您如何构建它: 然后编写以下代码:
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();
}
//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 ....
您是否已打开WebLogic控制台并验证您的数据源是否一切正常?它是否可以从web控制台进行测试?是否显示在sysout中<代码>System.out.println(“找到数据源…”)谢谢大家。我已经解决了这个问题。我只是将weblogic控制台上的连接字符串更改为类似jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT\u DATA=(SERVICE\u NAME=OCDB)(INSTANCE\u NAME=OCDB\u 1))的格式。这很奇怪,但是奏效了!