Мы создаем веб-приложение на основе Java Spring, которое обращается к серверной части Oracle через Hibernate.
Вот наш стек/инструменты:
- Томкэт 6
- Мавен 3
- Весна (мвк, веб, орм) 3.2.0
- Спящий режим 4.1.9
- Oracle 11g, выпуск 2
- Интеллидж ИДЕЯ.
Чтобы получить доступ к RDS с наших локальных компьютеров, мы перенаправляем порты с локального хоста: 2521 на имя нашего-rds-instance.wercytsdzeszx.us-east-1.rds.amazonaws.com:1521.
Мы запускаем встроенный Tomcat с помощью плагина tomcat6-maven. Наша конфигурация Maven для тестирования: чистый пакет tomcat6:run-war-only. Это развернет файл WAR на http://app.local:8080/наше-имя-приложения/ и разрешите нам протестировать сайт по этой ссылке.
Используя Hibernate, мы можем успешно подключиться к экземпляру RDS, когда мы запускаем веб-приложение из наших локальных встроенных экземпляров Tomcat.
ОДНАКО — вот где это становится глупо — когда мы развертываем файл WAR в нашем экземпляре EC2 (который является частью группы безопасности, имеющей доступ к экземпляру RDS), приложение больше не может получить доступ к базе данных. Мы получаем эту ошибку:
org.hibernate.exception.GenericJDBCException: не удалось открыть соединение
Это сбивает с толку. Мы установили SQLPlus на наш экземпляр EC2, на котором запущен Tomcat, и мы можем подключиться к экземпляру RDS, поэтому у экземпляра EC2 есть доступ для подключения к экземпляру RDS.
Наша локальная строка подключения будет выглядеть примерно так: *jdbc:oracle:thin:USER_NAME/password@localhost:2521/sid*
Строка подключения нашего экземпляра EC2 (промежуточного) будет выглядеть следующим образом:
Я могу предоставить более подробную информацию, но сначала я хотел изложить основную проблему, чтобы не мутить воду бесполезной информацией.
Я ценю все отзывы.
Тони