Проблема с источником данных JNDI в Tomcat 6, Hibernate

Я использую 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-диалект в моем 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 дня и безуспешно. В чем может быть проблема?

1 ответ

Я также столкнулся с той же проблемой, но нашел какую-то ссылку. Пожалуйста, посмотрите на нее. Через 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. а также ссылка

Пожалуйста, попробуйте.

Другие вопросы по тегам