- PR -

weblogic8.1JでMicrosoftのJDBCドライバのコネクション取得できない

投稿者投稿内容
modekun
会議室デビュー日: 2005/05/20
投稿数: 13
投稿日時: 2005-05-20 16:14
お世話になります。

JDBCコネクションをデータソースから取得しようとする箇所でNoClassDefFoundErrorとなってしまいます。
ドライバへのクラスパスは正しく指定されているのでドライバのクラスがロードできないわけではないと思います。
何か対策方法はないでしょうか?

以下、環境です。

JDK:Sun SDK 1.4.2_05
ドライバ:SQL Server 2000 Driver for JDBC Service Pack 2
コネクションプール定義情報:
<JDBCConnectionPool
DriverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
Name="pool" Properties="user=XXXX;databaseName=XXXXX" Targets="myserver" URL="jdbc:microsoft:sqlserver://XXXXX:1433"/>


以下、エラーログです。
java.lang.NoClassDefFoundError: weblogic/jdbc/wrapper/PoolConnection
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(Generic
ClassLoader.java:480)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClass
Loader.java:182)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClass
Loader.java:224)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:219)
at weblogic.utils.classloaders.GenericClassLoader.defineCodeGenClass(Gen
ericClassLoader.java:776)
at weblogic.utils.classfile.utils.CodeGenerator.generateClass(CodeGenera
tor.java:97)
at weblogic.utils.wrapper.WrapperFactory.generateWrapperClass(WrapperFac
tory.java:402)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.
java:237)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.
java:200)
at weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactor
y.java:163)
at weblogic.jdbc.common.internal.RmiDataSource.getPoolConnectionObj(RmiD
ataSource.java:323)
at weblogic.jdbc.common.internal.RmiDataSource.getPoolConnection(RmiData
Source.java:295)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSour
ce.java:310)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-20 16:23
JDBCドライバはクラスパスに通していますか?たぶん、バンドルされていない JDBC ドライバを使おうとしているみたいなのでクラスパスに通す必要があります。
クラスパスは startWebLogic.cmd で設定できます。

または製品にバンドルされているWebLogic Type 4 JDBC ドライバを使うこともできます。これならば起動スクリプトをいじることなく使えると思います。
・WebLogic Type 4 JDBC ドライバ ガイド
http://edocs.beasys.co.jp/e-docs/wls/docs81/jdbc_drivers/mssqlserver.html

[ メッセージ編集済み 編集者: インギ 編集日時 2005-05-20 16:25 ]
modekun
会議室デビュー日: 2005/05/20
投稿数: 13
投稿日時: 2005-05-20 16:54
OSはRedHat Enterprize Linux 3.0です。

クラスパスは通っております。
startWebLogic.shのクラスパスの記述の先頭に指定してます。

weblogicのドライバでの動作は問題なくできることを確認しております。
ですがこのドライバで別な問題が発生しており、MicrosoftのJDBCドライバを使うことで解消できないかどうかをテストしたいのです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-20 17:20
普通に管理コンソールから作ると"ドライバがクラスパスにありません"って怒られますね。
config.xml をいじって試してみたら別のメッセージになりました。
-----------
####<2005/05/20 17時05分46秒 JST> <Info> <JDBC> <foobar> <myserver> <Main Thread> <<WLS Kernel>> <> <BEA-001156> <メッセージ 001150 に関連付けられたスタック トレースは次のとおりです。:
weblogic.common.resourcepool.ResourceSystemException: Cannot load driver class: com.microsoft.jdbc.sqlserver.SQLServerDriver
at weblogic.jdbc.common.internal.JDBCUtil.parseException(Ljava.lang.Exception;Ljava.lang.String;Ljava.lang.String;)V(JDBCUtil.java:245)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.loadDriver(Ljava.lang.String;Ljava.lang.String;)Ljava.sql.Driver;(ConnectionEnvFactory.java:50)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.<init>(Lweblogic.jdbc.common.internal.ConnectionPool;Ljava.lang.String;Ljava.util.Properties;)V(ConnectionEnvFactory.java:87)
at weblogic.jdbc.common.internal.ConnectionPool.initPooledResourceFactory(Ljava.util.Properties;)Lweblogic.common.resourcepool.PooledResourceFactory;(ConnectionPool.java:634)
at weblogic.common.resourcepool.ResourcePoolImpl.start(Ljava.lang.Object;)V(ResourcePoolImpl.java:166)
-----------

"weblogic/jdbc/wrapper/PoolConnection" がないと怒られるのも変な話ですね。weblogic.jar に含まれているはずですが・・・。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-20 17:27
RmiDataSource の延長上ででているので、もしかしてリモートクライアントからデータソースをルックアップしているのでしょうか?
もしかするとクライアント側でなんらかのプロキシオブジェクトを作成する段階でドライバクラスが必要になるのかもしれませんね?クライアント側のクラスパスにもドライバを通してみてはいかがでしょうか。
#せっかくのリモートデータソースなのに、実クラスが必要になるのだとしたらなんだか解せませんが・・・
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-20 17:44
ローカル JVM 内から使っても "RmiDataSource" になりますね。関係なかったようです。失礼いたしました。

では、またあてずっぽうになりますが、クラスローダの階層構造に起因する問題かもしれません。
WEB-INF/lib 以下に WLS7.0 の weblogic.jar が入っていたりしませんか?
WLS7.0 の weblogic.jar にはPoolConnection クラスは存在しないようです。
別のスレッドでは 7.0 からのマイグレートとありますので、ビルドの都合で置いているのかも、とか思いました。
modekun
会議室デビュー日: 2005/05/20
投稿数: 13
投稿日時: 2005-05-20 21:12
weblogic7.0のweblogic.jarは使用しておりません。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-05-20 21:59
lib/extとかほかのクラスパスにjarを入れたりしてません?

スキルアップ/キャリアアップ(JOB@IT)