Problema de fonte de dados JNDI no Tomcat 6, Hibernate

2

Estou usando o Tomcat 6 como servidor de aplicativos, Struts-Hibernate e MyEclipse 6.0.

Meu aplicativo usa o driver JDBC, mas eu deveria modificá-lo para usar o JNDI Datasource. Eu segui os passos descritos em tomcat 6.0 howto tutorial.

Eu defini meu recurso no 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"/>

Eu dei referência em meu aplicativo 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>

E eu defini o dialeto de origem de dados no meu hibernate-cfg.xml

 <property name="connection.datasource">java:comp/env/jdbc/ats</property>
 <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>

Mas quando eu crio a sessão de hibernação, não consigo abrir a conexão:

09:18:11,322 ERROR JDBCExceptionReporter:72 - Connections could not be acquired from the underlying database! org.hibernate.exception.GenericJDBCException: Cannot open connection

Eu também tentei definir as propriedades em tempo de execução:

        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();

Ele não abre a conexão novamente.

Mas, quando eu uso o driver JDBC, funciona:

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(); 

Eu tenho procurado por 3 dias e não tenho sucesso. O que pode ser um problema?

    
por Asuman AKYILDIZ 30.12.2010 / 08:54

1 resposta

1

Eu também estava enfrentando o mesmo problema, mas encontrei um link. Por favor, dê uma olhada nele. Em 2 dias vou tentar fazer o hands-on e vou deixar você saber o resultado. link

no link ele mencionou um ponto

Como o JNDI do tomcat é somente leitura, somente o próprio Tomcat tem o direito de vincular o objeto ao JNDI. Para o Hibernate, portanto, não é suficiente declarar a fonte de dados como Resource in Context.xml. Você também deve declarar a UserTransaction como Resource em Context.xml, conforme descrito no artigo vinculado, porque o Hibernate com o JTA espera que o UserTransaction já esteja ligado ao JNDI. e também o link

Por favor, experimente.

    
por 26.01.2011 / 08:20