- PR -

Tomcat5.0.28とORACLE8.1.7のJDBC接続について

1
投稿者投稿内容
むら
会議室デビュー日: 2003/06/18
投稿数: 3
お住まい・勤務地: 東京都中野区
投稿日時: 2005-04-08 14:52
下記ログのエラーがでます。
/ur/local/tomcat5/bin/startup.shを実行すると、下記のようなログが残ります。
ORACLE JDBC接続のところを削除すると通常どおり起動しますので
おそらく、WindowsとLinuxの文字コードの違いかと思い調べていたのですが
わかりません。
クライアント(ECLIPSE)
より実行した際には起動しているのでserver.xmlの構文は大丈夫と思います。

見当違いなことをしていた場合は申し訳ございませんが、
ご意見、ご指摘等いただければと思います。

環境
WEBサーバ LINUX FedoraCore1 Apache2.0.52 Tomcat5.0.28(DMZ内)
DBサーバー WINDOWS2000 ORACLE8.1.7(LAN内)
ファイヤーウォールの設定は、すべてのポートを許可としています。

行ったこと、ORACLEサイトよりjdbc817jdk12-ntを取得し解凍
DBサーバー ORACLE_HOME\jdbc\lib classes12.zipにコピー
ORACLE_HOME\jdbc\bin ocijdbc8.dllをコピー
WEBサーバー /usr/local/tomcat5/common/lib/ にclasses12.jarとしてコピー


-------------------
server.xml



<!-- Because this Realm is here, an instance will be shared globally -->

<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->

<!--
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
-->

<!-- Comment out the old realm but leave here for now in case we
need to go back quickly -->
<!--
<Realm className="org.apache.catalina.realm.MemoryRealm" />
-->

<!-- Replace the above Realm with one of the following to get a Realm
stored in a database and accessed via JDBC -->
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@IPアドレス:ポートXX"
connectionName="ユーザ名" connectionPassword="パスワード"
userTable="*****" userNameCol="*****" userCredCol="*****"
userRoleTable="*****" roleNameCol="*****" />

以下略

-------------------
ログ

2005-04-08 13:39:39 JDBCRealm[Catalina]: データベース接続オープン中に例外が発生しました
java.sql.SQLException: Protocol violation
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:418)
at oracle.jdbc.ttc7.O3log.receive2nd(O3log.java:676)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:196)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:127)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:170)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:148)
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:599)
at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:663)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1075)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2005-04-12 07:12
つばさです。

推測ですが、
java.sql.SQLException: Protocol violation
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:418)
の例外が出ていますので、Thinドライバ、OCIドライバのあたりがだと思います。
server.xmlで、
connectionURL="jdbc:oracle:thin:.....
のように、Thinドライバを指定していますが、ociのdllをコピーされていま
すので、OCI(Type2)でOracleにアクセスしたいのかなと思いました。

なので、
OCIドライバの記述にするかThinドライバのclasses12.jarをTomcatのcommon/lib
に配置するかでなんとかなるのでは?と思います。

参考まででした。

1

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