- Oracle JDBC ドライバのバージョン: 10.2.0.3.0
- Oracle のバージョン:10.2.0 Express
- WAS のバージョン:IBM WebSphere Application Server - Express, 6.0.0.1
- WAS で使われる Java のバージョン:Classic VM (build 1.4.2, J2RE 1.4.2 IBM build cxia32142sr1w-20041028 (JIT enabled: jitc))
Oracle JDBC ドライバのバージョンは、
java.sql.Driver
のメソッドを呼び出さなくても、ojdbc14.jar を展開して MANIFEST.MF を見れば分かる。WAS のバージョンは管理画面から分かるし、WAS の java バージョンは、WAS 配下の java コマンドを -version
オプションで実行すれば分かる。この環境で以下のようなエラーが発生したというわけだ。
java.lang.ArrayIndexOutOfBoundsException: 451808508
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java(Compiled Code))
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:965)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java(Compiled Code))
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java(Compiled Code))
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3445)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4394)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecute(WSJdbcPreparedStatement.java:632)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.execute(WSJdbcPreparedStatement.java:427)
.....
ググるとこういうページが。
http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14018143
どうも、IBM Java の JIT と JDBC ドライバの相性が悪いらしい。JIT を無効にする(環境変数 JAVA_COMPILER に NONE をセットする)ことで回避できるようだが、パフォーマンスに問題が出てくるかもしれないし、本番環境で同じ問題が出やしないかと心配なので、JDBC ドライバを本番環境で使っているもので置き換えて実行してみた。
ちなみに本番での環境は以下のとおり。本番では上の問題は出ていない。
- Oracle JDBC ドライバのバージョン: 10.2.0.2.0
- Oracle のバージョン:10.2.0 Enterprise Edition
- WAS のバージョン:IBM WebSphere Application Server - Express, 6.0.2.17
- WAS で使われる Java のバージョン:Classic VM (build 1.4.2, J2RE 1.4.2 IBM build cxia32142-20061124 (SR7) (JIT enabled: jitc)
上にあるとおり、本番環境では、Oracle JDBC ドライバのバージョンは、10.2.0.2.0 なのだが、これに置き換えてみると、表題のエラーは発生しなくなった。