2009-04-21 27 views
0

私は、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) 
+0

例外が何であるか教えてください。 –

+0

java.lang.Objectは例外ではありません。 – jsight

+2

おそらく試してください: オブジェクトdsObj = ctx.lookup( "dbOracle");System.out.println( "Objは:" + dsObj.getClass()。getName());あなたが本当にあなたの考えを得ているかどうかを確認する – jsight

答えて

1

この例外は、サーバー側で生成されたようです。まず、WebLogic Serverのバージョンを確認し、クライアントアプリケーションのクラスパスを確認します。クライアントアプリケーションがWebLogic Serverと同じバージョンのWebLogicクライアントjarファイルを持っていることを確認する必要があります。 Weblogicクライアントのjarファイルをクライアントのクラスパスに含めていますか? WebLogicのRMIドライバを使用しているので、クライアントのクラスパスにOracle jarファイルが必要ないとは思いません。あなたのクライアントは本質的にRMIをWebLogic Serverに話しています。設定したWebLogic Server接続プールは、Oracleとの会話方法を認識しています。接続プールで使用するJDBCドライバは関係ありません。

+0

私はアプリケーションのクラスパスにWebLogicクライアントのjarファイルを含めていませんでした。ありがとう! – Nate

+0

あなたが必要とするコードのインポートステートメントだけを見るだけでは明らかではありません。コンパイラは文句を言いませんが、オブジェクトをキャストするとbarfが見えます。 – Gary

1

、このような限られた情報で何が起こっているかを伝えるのは難しいです。

アプリケーションをシンクライアントとして設定しましたか? Java EEコンテナの1つで操作していないときは、参照とコンテキストと手段が同じように機能しません(ベンダーによって異なります)。そのようなクライアントからWeblogicを使用してリソースのルックアップを行う方法と、正しく設定する方法を調べることができます。

+0

私は同意します...明らかに、より多くのデータが必要です。 – jsight

+0

追加情報を追加しました。それが助けになることを願っています。 – Nate

1

おそらくクラスパスの問題か、あるいはjvmバージョンのものでしょうか?このため

DataSource ds = (DataSource) ctx.lookup ("dbOracle"); 

javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("dbOracle"); 

ジャストアイデア、希望

0

一つの可能​​性は:

は、このコード行を交換してみてください:-)あなたは間違って "データソース" クラスをインポートしますこれはあなたを助けるでしょう

1

あなたがOracleドライバのために持っているJARは、クライアントのJVMはサーバーのものとは異なります。同じOracle JDBCドライバjarがコマンドラインツールのクラスパスとweblogic webappの両方にあることを確認してください

幸いです!

1

私はにwlfullclient.jarを作成し、クラスパスにそれを維持した後、この問題は、私は同様の問題を有するが修正されました\ user_projects \ドメイン\ base_domain \ binに>あるsetDomainEnv.cmd

+0

CLASSPATHを必要なjarファイルに設定するだけです。 – sathish

0

BEAまたはWebLogicを実行することによって解決されると思います。

https://docs.oracle.com/cd/E12840_01/wls/docs103/client/jarbuilder.html#wp1078098

サーバーます。WebLogic 10.3.6

DS JNDIます。jdbc/hrで

DataSource dataSource = null; 
    Context ctx = null; 
    Properties p = new Properties(); 

    p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
    p.put(Context.PROVIDER_URL, "t3://localhost:7001"); 
    ctx = new InitialContext(p); 
    if (ctx != null) { 
     dataSource = (DataSource) ctx.lookup("jdbc/hr"); 
    } 

    if (dataSource != null) { 
     Connection connection = dataSource.getConnection(); 
     ResultSet rs = connection.createStatement().executeQuery(
       "Select sysdate from dual"); 
     while (rs.next()) { 
      System.out.println(rs.getString(1)); 
     } 
     connection.close(); 
    } 

でも、私はスタンドアロン春のアプリケーションから呼び出すことができるよ...

<bean id="applicationServerEnviromentProperties" 
    class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="properties"> 
     <props> 
      <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop> 
      <prop key="java.naming.provider.url">t3://localhost:7001</prop> 
     </props> 
    </property> 
</bean> 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>jdbc/hr</value> 
    </property> 
    <property name="jndiEnvironment"> 
     <ref local="applicationServerEnviromentProperties" /> 
    </property> 
</bean> 
関連する問題