- - PR -
weblogic8.1JでMicrosoftのJDBCドライバのコネクション取得できない
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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) |
|
投稿日時: 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 ] |
|
投稿日時: 2005-05-20 16:54
OSはRedHat Enterprize Linux 3.0です。
クラスパスは通っております。 startWebLogic.shのクラスパスの記述の先頭に指定してます。 weblogicのドライバでの動作は問題なくできることを確認しております。 ですがこのドライバで別な問題が発生しており、MicrosoftのJDBCドライバを使うことで解消できないかどうかをテストしたいのです。 |
|
投稿日時: 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 に含まれているはずですが・・・。 |
|
投稿日時: 2005-05-20 17:27
RmiDataSource の延長上ででているので、もしかしてリモートクライアントからデータソースをルックアップしているのでしょうか?
もしかするとクライアント側でなんらかのプロキシオブジェクトを作成する段階でドライバクラスが必要になるのかもしれませんね?クライアント側のクラスパスにもドライバを通してみてはいかがでしょうか。 #せっかくのリモートデータソースなのに、実クラスが必要になるのだとしたらなんだか解せませんが・・・ |
|
投稿日時: 2005-05-20 17:44
ローカル JVM 内から使っても "RmiDataSource" になりますね。関係なかったようです。失礼いたしました。
では、またあてずっぽうになりますが、クラスローダの階層構造に起因する問題かもしれません。 WEB-INF/lib 以下に WLS7.0 の weblogic.jar が入っていたりしませんか? WLS7.0 の weblogic.jar にはPoolConnection クラスは存在しないようです。 別のスレッドでは 7.0 からのマイグレートとありますので、ビルドの都合で置いているのかも、とか思いました。 |
|
投稿日時: 2005-05-20 21:12
weblogic7.0のweblogic.jarは使用しておりません。
|
|
投稿日時: 2005-05-20 21:59
lib/extとかほかのクラスパスにjarを入れたりしてません?
|