Я хочу определить источник данных для базы данных Oracle на моем Tomcat 6.0.
Итак, в conf/server.xml
(да, я знаю, что этот источник данных будет доступен для всех веб-приложений в Tomcat, но здесь это не проблема), я установил этот ресурс:
<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"/>
Затем в web.xml
своего приложения я установил 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>
Наконец, поскольку для управления подключением к базе данных используется Hibernate, у меня есть webapps/mywebapp/WEB-INF/classes/hibernate.cfg.xml
что создает session-factory
используя JNDI DataSource:
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/hibernate/HibernateDS</property>
...
Однако когда я запускаю свой сервер Tomcat, я получаю сообщение об ошибке, в котором говорится, что не удалось создать
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
Вы хоть представляете, почему Hibernate не может построить session-factory
? Что не так в моей конфигурации?
Вы разместили Oracle JDBC Jar в Tomcat common/lib
папка? Поскольку Tomcat не поддерживает соединения Oracle DB из коробки, ему может просто не хватать нужной библиотеки.
Мне нравится ваше определение ресурса и конфигурация приложения.
в вашем определении ресурса отсутствует атрибут driverClassName