Definição da fonte de dados JNDI no Tomcat 6.0

1

Eu quero definir um DataSource para um banco de dados Oracle no meu Tomcat 6.0.

Então, em conf/server.xml (sim, eu sei que este DataSource estará disponível para todas as aplicações web no Tomcat, mas não é um problema aqui), eu configurei este recurso:

<GlobalNamingResources>
    <Resource name="hibernate/HibernateDS" auth="Container" type="javax.sql.DataSource"
        url="jdbc:oracle:thin:@myserver:1542:foo"
        username="foo" password="bar"
        driverClassName="oracle.jdbc.OracleDriver"
        maxActive="50" maxIdle="10" validationQuery="select 1 from dual"/>

Em seguida, no web.xml do meu aplicativo, defino um elemento resource-ref :

<resource-ref>
    <description>Hibernate Datasource</description>
    <res-ref-name>hibernate/HibernateDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Finalmente, como o Hibernate é usado para gerenciar a conexão com o banco de dados, eu tenho um webapps/mywebapp/WEB-INF/classes/hibernate.cfg.xml que cria um session-factory usando o DataSource JNDI:

<hibernate-configuration>
    <session-factory>
        <property name="connection.datasource">java:comp/env/hibernate/HibernateDS</property>
        ...

No entanto, quando inicio o meu servidor Tomcat, recebo um erro que diz que não foi possível criar o

INFO  [net.sf.hibernate.util.NamingHelper] JNDI InitialContext properties:{}
INFO  [net.sf.hibernate.connection.DatasourceConnectionProvider] Using datasource: java:comp/env/hibernate/HibernateDS
INFO  [net.sf.hibernate.transaction.TransactionFactoryFactory] Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory
INFO  [net.sf.hibernate.transaction.TransactionManagerLookupFactory] No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
WARN  [net.sf.hibernate.cfg.SettingsFactory] Could not obtain connection metadata
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
        at net.sf.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:59)
        at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
        at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1172)
        ...
Caused by: java.lang.NullPointerException
        at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
        at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
        at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
        at java.sql.DriverManager.getDriver(DriverManager.java:253)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
        ... 11 more

Você tem alguma idéia de por que o Hibernate não é capaz de construir o session-factory ? O que está errado na minha configuração?

    
por Romain Linsolas 11.12.2009 / 11:14

2 respostas

2

Você colocou o Oracle JDBC Jar no% co_de do Tomcat % pasta? Como o Tomcat não oferece suporte às conexões do Oracle DB imediatamente, pode estar faltando a biblioteca adequada.

Sua definição de recursos e configuração de aplicativos parecem excelentes para mim.

    
por 31.12.2011 / 12:07
-1

a sua definição de recurso está sem o atributo driverClassName

    
por 07.12.2010 / 15:12