- PR -

iBATISとOracle10gでSqlMapClient取得時にエラーとなる。

1
投稿者投稿内容
シン
会議室デビュー日: 2008/05/06
投稿数: 6
投稿日時: 2008-05-06 00:18
■問題
iBATISとOracle10gでSqlMapClient取得時にエラーとなる。
------------------------------------------------------------
■問題詳細
iBATISを使用してOracle10gからSqlMapClient取得時にエラーとなります。

iBATISを使用しない場合は、オラクルよりデータ取得まで可能なので、
設定誤りか環境の問題だと思っています。
ただのクラスパスの設定ミスであればいいのですが、原因がわからず困っています・・・。
どなたか原因がわかる方がいましたらご教授頂けると幸いです。
宜しくお願いします。

2008/05/05 23:14:46 com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl error
致命的: SimpleDataSource: Error while loading properties. Cause: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.ibatis.common.resources.Resources.classForName(Resources.java:265)
at com.ibatis.common.resources.Resources.instantiate(Resources.java:281)
at com.ibatis.common.jdbc.SimpleDataSource.initialize(SimpleDataSource.java:199)
at com.ibatis.common.jdbc.SimpleDataSource.<init>(SimpleDataSource.java:116)
at com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.initialize(SimpleDataSourceFactory.java:31)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$9.process(SqlMapConfigParser.java:347)
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:105)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86)
at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
at test.DBUtil.<clinit>(DBUtil.java:17)
at test.TestMain.main(TestMain.java:17)
------------------------------------------------------------
■環境
JDK:1.5.0_11
iBATIS:ibatis-2.3.0.677
DB:Oracle10g 10.2.0.3.0
JDBC:ojdbc14.jar
Windows:Vista
Eclipse:3.3.0
------------------------------------------------------------
■備考
 ・iBATISを使用せずに、Javaプログラムから直接DB接続は可能
 ・WindowsマシンからDBへSQLPlus接続は可能
 ・システム環境変数でJDBC等にクラスパス設定をしていない(Eclipseで設定)
 ・こちらのサイトのiBATISサンプルでは動作しました(いろいろとバージョンが異なります)
  http://www.canetrash.jp/article/1938737.html
------------------------------------------------------------
■iBATIS用のソースコード
private static final SqlMapClient sqlMap;

static {
try {
String resource = "SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(
"Error Initializing DBUtil class. Cause:" + e);
}
}
------------------------------------------------------------
■SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="SqlMapConfig.properties"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="hogehoge.xml"/>
</sqlMapConfig>
------------------------------------------------------------
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-05-06 22:11
コード:
new oracle.jdbc.driver.OracleDriver()


みたいなコードを書いて動きますか?

例外を見ると、oracle.jdbc.driver.OracleDriverというクラスが見つからないと言われています。
Eclipseで簡単なコードを書いてテストされていると思うのですが、
通常のJDBCでの接続に成功してiBatis経由で失敗するというのは、
説明が難しい感じがしますね。

簡単に言うと、自前でOracleに接続するときに、
Class.forName("oracle.jdbc.driver.OracleDriver")というコードを書いていると思いますが、
iBatis内部でも同じことをやって例外になっているのです。

解決になるか分かりませんが、直接Oracleへ接続するコードも載せてみてください。
シン
会議室デビュー日: 2008/05/06
投稿数: 6
投稿日時: 2008-05-08 00:33
かつのりさん

返答ありがとうございます。

>new oracle.jdbc.driver.OracleDriver()
本コードを記述してもエラーとなるため、
直接DBへ接続するソースとの差分を見てみました。

結果は、大変申し訳ないのですが、
JDBCの文字列誤り(末尾に空文字が含まれていた)のため、エラーとなっておりました。
※iBATISのソースをデバッグして気付きました。。
つまらないミスでお時間を頂いてしまい申し訳ありません。

直接DB接続するJavaソースも載せておきます。
---------------------------------------------------------------------------
■直接DB接続するJavaソース
Connection conn = null;
try{

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String strConnect = "jdbc:oracle:thin:@192.168.XXX.XXX:1521:sid";
conn = DriverManager.getConnection (strConnect, "user", "pass");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from test_table");

if (rs != null) {
while(rs.next()) {
String column1 = rs.getString(1);
System.out.println(column1);
}
}

if (conn != null) {
conn.close();
}

} catch(Exception e){
e.printStackTrace();
}
---------------------------------------------------------------------------
以上です。
ありがとうございました。

[ メッセージ編集済み 編集者: シン 編集日時 2008-05-08 00:34 ]
1

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