3

Hibernate 経由で Oracle バックエンドにアクセスする Java Spring ベースの Web アプリケーションを構築しています。

スタック/ツールは次のとおりです。

  • トムキャット6
  • メイヴン3
  • 春 (mvc、web、orm) 3.2.0
  • 休止状態 4.1.9
  • オラクル 11g リリース 2
  • Intellij IDEA。

ローカル マシンから RDS にアクセスするには、localhost:2521 を our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521 にポート フォワーディングします。

tomcat6-maven-plugin を使用して組み込み Tomcat を実行しています。テスト用の Maven 構成はクリーン パッケージ tomcat6:run-war-onlyです。これにより、WAR ファイルがhttp://app.local:8080/our-app-name/にデプロイされ、このリンクからサイトをテストできるようになります。

Hibernate を使用すると、ローカルに埋め込まれた Tomcat インスタンスから Web アプリを実行しているときに、RDS インスタンスに正常に接続できます。

ただし、ここがばかげているところです。WAR ファイルを EC2 インスタンス (RDS インスタンスにアクセスできるセキュリティ グループの一部) にデプロイすると、アプリケーションはデータベースにアクセスできなくなります。次のエラーが表示されます。

org.hibernate.exception.GenericJDBCException: 接続を開けませんでした

これは私の心を揺さぶっています。Tomcat を実行している EC2 インスタンスに SQLPlus をインストールしており、RDS インスタンスに接続できるため、EC2 インスタンスは RDS インスタンスに接続するためのアクセス権を持っています。

ローカル接続文字列は次のようになります: *jdbc:oracle:thin:USER_NAME/password@localhost:2521/sid*

EC2 (ステージング) インスタンスの接続文字列は次のようになります: *jdbc:oracle:thin:USER_NAME/password@our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521/sid*

詳細を提供することはできますが、最初に主な問題を明らかにしたかったので、役に立たない情報で水域を汚さないようにしました。

すべてのフィードバックに感謝します。

トニー

4

1 に答える 1

1

私はこの問題を解決しました。

原因は Oracle タイムゾーン エラー (ORA-01882: タイムゾーン リージョンが見つかりません) であることがわかりました。EC2 AMI に使用している Ubuntu サーバーには、デフォルトのタイムゾーンが設定されていましたが、Java または Oracle によって認識されなかったと思います。私はそのエラーを見たことがありますが、データベース接続エラーに関連しているとは考えられませんでした。

dpkg-reconfigure tzdataコマンドを使用してタイムゾーンを正しいものに設定し、Tomcat を再起動しました。これにより、Oracle データベースに正常に接続できました。

トニー

于 2013-05-08T15:49:02.627 に答える