Hibernate et pool de connexion Tomcat
Je n'arrive pas à configurer Hibernate pour qu'il prenne en compte les connexion d'un pool DBCP géré par Tomcat :
Voici lmon fichier context.xml dans le dossier META-INF de mon projet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/transfertFichier"
reloadable="true"
docBase="\TransfertFichier" >
<Resource
name="jdbc/transfertFichier"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TutoPool">
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
<parameter>
<name>password</name>
<value>p1i2e3*</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://localhost:5432/transfert</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>validationQuery</name>
<value>select 1</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>20</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
</ResourceParams>
</Context> |
LA declaration de la ressource dans le web.xml :
Code:
1 2 3 4 5 6 7 8 9 10
|
<resource-ref>
<description>
reference a la ressource BDD pour le pool
</description>
<res-ref-name>jdbc/transfertFichier</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref> |
et la configuration dans Hibernate :
Code:
1 2 3 4
|
<property name="connection.datasource">java:comp/env/jdbc/transfertFichier</property>
<!-- dialect for PostgreSQL -->
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> |
Au lancement d'hibernate je me prend la (longue liste) exceptions suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
26 juil. 2006 13:51:10 org.hibernate.connection.DatasourceConnectionProvider configure
INFO: Using datasource: java:comp/env/jdbc/transfertFichier
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
ATTENTION: 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:780)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:72)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1881)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1174)
at persistance.HibernateUtil.<clinit>(HibernateUtil.java:13)
at persistance.HibernateManager.startSession(HibernateManager.java:155)
at metier.GestionUser.logUser(GestionUser.java:371)
at controleur.ServletPrinc.login(ServletPrinc.java:365)
at controleur.ServletPrinc.doPost(ServletPrinc.java:154)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
... 26 more
26 juil. 2006 13:51:10 org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.PostgreSQLDialect
26 juil. 2006 13:51:10 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
26 juil. 2006 13:51:10 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
26 juil. 2006 13:51:10 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.EhCacheProvider
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Echoing all SQL to stdout
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
26 juil. 2006 13:51:10 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
26 juil. 2006 13:51:10 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
26 juil. 2006 13:51:13 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
26 juil. 2006 13:51:14 org.hibernate.util.JDBCExceptionReporter logExceptions
ATTENTION: SQL Error: 0, SQLState: null
26 juil. 2006 13:51:14 org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: Cannot create JDBC driver of class '' for connect URL 'null'
org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:420)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:129)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1290)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.beginTransaction(Unknown Source)
at persistance.HibernateManager.startTransaction(HibernateManager.java:162)
at metier.GestionUser.logUser(GestionUser.java:372)
at controleur.ServletPrinc.login(ServletPrinc.java:365)
at controleur.ServletPrinc.doPost(ServletPrinc.java:154)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: 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:780)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
... 30 more
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
... 33 more |
Il semble qu'il ne trouve pas mon driver, ni l'Url de connexion ...
Tomcat plutôt que hibernate.
Je crois que c'est un problème récurrent chez tomcat. L'utilisation du pool de connexion est problématique. Qu'on utilise hibernate ou pas !
Donc c'est un pb Tomcat et non un pb Hibernate. Rends toi sur les forums tomcat plutôt que les forums hibernate. Tu trouveras forcément la solution.
Quelle est la version de tomcat utilisée ? 4.1.x ? ou 5.0 ? ou 5.5 ?
Vérifie que le driver jdbc est situé dans ton tomcat/common/lib.
Ecris une petite servlet de test permettant de faire le test de récupération de ta resource JNDI.
Cordialement,
PS : l'utilisation du pool hibernate peut être judicieuse... quel pourrait être l'intéret d'utiliser le pool apache ?
solution probable du problème
Bonjour
Je viens d'avoir le même problème en faisant un pool de connection sur tomcat 5.5 (le 5.5 est le détail important).
Le fichier context.xml doit avoir la forme suivante :
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/SampleDB" auth="Container"
type="javax.sql.DataSource"
username="app" password="app"
driverClassName="org.apache.derby.jdbc.ClientDriver"
url="jdbc:derby://localhost:1527/sample"
maxActive="8" />
</Context>
et c'est tout.... en fait Tomcat a changé la forme de ce fichiers à partir de la version 5.5 par souci de simplification.
(il suffit d'enlever la balise ressourceparam et de mettre les paramètre comme des attributs.)
Essayez, ca marchera peut-être...
bon courage
un lien peut vous aider http://www.eclipse.org/articles/Arti...s/article.html
(c'est avec derby mais ca marche avec plein d'autres choses)