2013-05-07 78 views
3

我們構建了一個基於Java Spring的Web應用程序,該應用程序通過Hibernate訪問Oracle後端。已部署的Tomcat 6 webapp無法連接到Amazon RDS Oracle實例

這裏是我們的堆棧/工具:

  • 的Tomcat 6
  • 的Maven 3
  • 春季(MVC,網絡,ORM)3.2.0
  • 的Hibernate 4.1.9
  • 的Oracle 11g版本2
  • Intellij IDEA。

爲了從本地機訪問RDS,我們是端口轉發本地主機:2521至our-rds-instance-name.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521

我們使用tomcat6-maven-plugin運行嵌入式Tomcat。我們用於測試的Maven配置是clean package tomcat6:僅用於運行的。這會將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:神諭:薄:USER_NAME /密碼@本地:2521/SID *

我們的EC2(分期)實例連接字符串應該是這樣的: * jdbc:oracle:thin:USER_NAME/[email protected]naws.com:1521/sid *

我可以提供更多的細節,但我先想要解決主要問題,所以我不會用無用的信息來淹沒水域。

我感謝所有反饋。

Tony

+0

您是否使用任何類型的連接池,如Apache DBCP? – Viccari 2013-05-08 11:41:10

+0

不,我們目前沒有使用連接池。 – dipadev 2013-05-08 12:25:44

回答

1

我已經解決了這個問題。

事實證明,有一個Oracle時區錯誤(ORA-01882:未找到時區區域)是罪魁禍首。我們用於EC2 AMI的Ubuntu服務器有一個默認的時區設置,我猜測它不被Java或Oracle識別。我已經看到了這個錯誤,但無意中認爲它不能與數據庫連接錯誤相關。

我們使用dpkg-reconfigure tzdata命令將時區設置爲正確的一個,並重新啓動Tomcat。這使我們能夠成功連接到Oracle數據庫。

Tony