私は、Webサービスアプリケーションとスタンドアロンのコマンドラインアプリケーションを含む従来のWebLogicアプリケーションを使用しています。どちらも共通のデータベースにアクセスする必要があり、コマンドラインアプリケーションでWebサーバーのJDBC接続へのプール接続を使用するようにしたいと考えています。私は次のようにJDBCドライバにJNDIルックアップを使用しようとしてきた(サーバーがアクティブで、両方が同じ物理マシン上で実行されるとき、スタンドアロンアプリケーションのみを実行することができます。)プールされたJDBC接続を使用するアプリケーション
:
try {
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
ctx = new InitialContext(ht);
DataSource ds = (DataSource) ctx.lookup ("dbOracle");
Connection conn = null;
conn = ds.getConnection(); // <-- Exception raised here
// conn = ds.getConnection(username, password); // (Also fails)
// ...
} catch (Exception e) {
// Handle exception...
}
JNDI名が正しいことを確認しました。他のWebアプリケーションとデータベースに接続できますが、スタンドアロンアプリケーションには引き続き問題があります。 - 私はWebLogic app noteからこれについてのアイデアを得ました。
私が見落としたものについてのアイデアはありますか?
EDIT 1.1: "java.lang.ClassCastException:java.lang.Object"例外が表示されます。
EDIT 2: Iは、次の実行するスタンドアロンアプリケーションで
Object dsObj = ctx.lookup("dbOracle");
System.out.println("Obj was: " + dsObj.getClass().getName());
、それは報告:私はコードの同じチャンクをテストしようと
"Obj was: weblogic.jdbc.common.internal._RemoteDataSource_Stub"
(に記載元の質問)をWebアプリケーションに追加し、データソースに接続することができました(つまり、「うまくいく」と思われます)。この作業テストレポート:
"Obj was: weblogic.jdbc.common.internal.RmiDataSource"
また、ここでは、スタック・トレースは、それが失敗だときのためです:
####<Apr 22, 2009 10:38:21 AM EDT> <Warning> <RMI> <mlbdev16> <cgServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1240411101452> <BEA-080003> <RuntimeException thrown by rmi server: weblogic.jdbc.common.internal.RmiDataSource.getConnection()
java.lang.ClassCastException: java.lang.Object.
java.lang.ClassCastException: java.lang.Object
at weblogic.iiop.IIOPOutputStream.writeAny(IIOPOutputStream.java:1584)
at weblogic.iiop.IIOPOutputStream.writeObject(IIOPOutputStream.java:2222)
at weblogic.utils.io.ObjectStreamClass.writeFields(ObjectStreamClass.java:413)
at weblogic.corba.utils.ValueHandlerImpl.writeValueData(ValueHandlerImpl.java:235)
at weblogic.corba.utils.ValueHandlerImpl.writeValueData(ValueHandlerImpl.java:225)
at weblogic.corba.utils.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:182)
at weblogic.iiop.IIOPOutputStream.write_value(IIOPOutputStream.java:1957)
at weblogic.iiop.IIOPOutputStream.write_value(IIOPOutputStream.java:1992)
at weblogic.iiop.IIOPOutputStream.writeObject(IIOPOutputStream.java:2253)
at weblogic.jdbc.common.internal.RmiDataSource_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:589)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:479)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:475)
at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:59)
at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:1016)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
例外が何であるか教えてください。 –
java.lang.Objectは例外ではありません。 – jsight
おそらく試してください: オブジェクトdsObj = ctx.lookup( "dbOracle");System.out.println( "Objは:" + dsObj.getClass()。getName());あなたが本当にあなたの考えを得ているかどうかを確認する – jsight