Я использую Tomcat 6 в качестве сервера приложений, Struts-Hibernate и MyEclipse 6.0.
В моем приложении используется драйвер JDBC, но я должен изменить его, чтобы использовать источник данных JNDI. Я выполнил шаги, описанные в руководстве по Tomcat 6.0.
Я определил свой ресурс в tomcat> conf:
<Resource name="jdbc/ats" global="jdbc/ats" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@//localhost:1521/MISDEV"
username="TEST" password="TEST" maxActive="20" maxIdle="10"
maxWait="-1" validationQuery="SELECT 1 from dual"
removeAbandoned="true"
removeAbandonedTimeout="30"
logAbandoned="false"/>
Я дал ссылку в своем приложении web.xml:
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/ats</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
И я определил datasource-dialect в моем hibernate-cfg.xml
<property name="connection.datasource">java:comp/env/jdbc/ats</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
Но когда я создаю сеанс гибернации, он не может открыть соединение:
09: 18: 11,322 ОШИБКА JDBCExceptionReporter: 72 - Не удалось получить подключения из базовой базы данных! org.hibernate.exception.GenericJDBCException: не удается открыть соединение
Я также попытался установить свойства во время выполнения:
Configuration configuration = new Configuration();
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle9Dialect");
//configuration.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/ats");
configuration.setProperty("hibernate.current_session_context_class", "thread");
configuration.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
configuration.setProperty("hibernate.show_sql", "true");
sessionFactory = configuration.configure().buildSessionFactory();
Он снова не открывает соединение.
Но когда я использую драйвер JDBC, он работает:
Configuration configuration = new Configuration();
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle9Dialect");
//configuration.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/ats");
configuration.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@//localhost:1521/MISDEV");
configuration.setProperty("hibernate.connection.username", "test");
configuration.setProperty("hibernate.connection.password", "test");
configuration.setProperty("hibernate.connection.driver_class", "oracle.jdbc.OracleDriver");
configuration.setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory");
configuration.setProperty("hibernate.current_session_context_class", "thread");
configuration.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
configuration.setProperty("hibernate.show_sql", "true");
sessionFactory = configuration.configure().buildSessionFactory();
Я искал 3 дня и безуспешно. В чем может быть проблема?
Я тоже столкнулся с той же проблемой, но нашел ссылку. Пожалуйста, взгляните на нее. Через 2 дня я попробую на практике и сообщу результат. https://forum.hibernate.org/viewtopic.php?f=1&t=1003866&start=15
в ссылке он упомянул один момент
Поскольку JNDI Tomcat доступен только для чтения, только Tomcat имеет право привязать объект к JNDI. Поэтому для Hibernate недостаточно объявить источник данных как Resource в Context.xml. Вы также должны объявить UserTransaction как Resource в Context.xml, как описано в связанной статье, поскольку Hibernate с JTA ожидает, что UserTransaction уже будет привязан к JNDI. а также ссылку
Пожалуйста, попробуйте.