2013-05-07 76 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