Oracle JDBCドライバー導入時のモジュール反映失敗

質問

⚠️ この事例は公開されてから1年以上経過しています。 情報が古い可能性がありますので、ご注意ください。

🕓 事例公開日 : 2025-02-18

【背景】

Oracle JDBCドライバーを導入するため、juggling(開発支援ツール)で設定を実施し、通常通りwar・zipファイルを作成したが、モジュール反映が失敗してしまった。ローカルのデバッグ環境では同じ変更で正常に動作することを確認済み。



1. 事象

エラーメッセージ・スタックトレース:

[25-01-24 02:39:38.948] {main} file:/opt/accel-mart/resin/conf/app-default.xml:1078: com.caucho.config.core.ResinImport.init(): java.lang.UnsupportedClassVersionError: oracle/jdbc/pool/OracleConnectionPoolDataSource has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 1076:  1077:  1078:  1079:  1080: 

症状の説明:

開発環境、検証環境、本番環境の全3環境でモジュール反映が失敗する。これまでモジュール反映で失敗したことはなく、今回が初回。

2. 発生条件

・libフォルダにOracle JDBCドライバーをインポート
・resin-web.xmlにシェアードデータベースの設定を記述
・上記変更を含むwar・zipファイルでモジュール反映を実行した場合

回答

1. 原因

技術的な原因:

JDK 17用のOracle JDBCドライバーを使用したことが原因です。お客様のAccel-Mart Plus環境はJDK 11で動作しているため、JDK 17でコンパイルされたドライバーは実行できません。

技術的要因の分析:

・JDK 17用ドライバーの使用:クラスファイルバージョン61.0(JDK 17)でコンパイルされたドライバーを配置 → JDK 11環境(バージョン55.0まで対応)では読み込み不可
・環境間のJDKバージョン差異:ローカル環境がJDK 17、Accel-Mart Plus環境がJDK 11 → ローカルでは動作するが本番環境では動作しない
・クラスローダーでの検証:Resinがクラスファイルを読み込む際にバージョンチェックを実施 → UnsupportedClassVersionErrorが発生

根本的な要因:

環境間のJDKバージョンの違いを考慮せずに、JDK 17用のOracle JDBCドライバーを選択したこと

2. 対応方法

根本解決方法:

1. 現在使用しているJDK 17用Oracle JDBCドライバーを削除
2. JDK 11対応のOracle JDBCドライバーをlibフォルダに配置
3. war・zipファイルを再作成してモジュール反映を実行

暫定対処方法:

Oracle JDBCドライバーを使用しない設定に戻し、モジュール反映を実行してシステムを正常状態に復旧

3. 原因究明に至るまでの調査方法

1. モジュール反映失敗の事象確認(複数環境での再現性確認)
2. アプリケーションログ(jvm-app-0.log)の詳細分析
3. エラーメッセージからUnsupportedClassVersionErrorを特定
4. クラスファイルバージョン61.0(JDK 17)と環境のJDK 11の不整合を確認
5. Oracle JDBCドライバーのバージョン確認と適切なドライバーへの変更提案

参考情報

ログ取得方法:

ログファイルの取得方法を教えてください。

シェアードデータベース設定:

シェアードデータベースの登録方法について教えてください。
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
Powered by Zendesk