Bonjour,
Je suis en train d'essayer d'implémenter Hibernate dans sur un projet tournant sous JBoss 4.0.5.
Après avoir pas mal tâtonner, j'ai réussi à utiliser Hibernate via des fichiers hbm, puis avec des annotations, mais je bloque sur le EntityManager.
Voici les infos que je peux fournir (je ne sais pas si tout est utile) :
persistence.xml :
HibernateUtil :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL"> <jta-data-source>java:/test_db</jta-data-source> <class>com.steria.socle.om.profil.ProfilOM</class> <properties> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> </properties> </persistence-unit> </persistence>
La tentative d'insertion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class HibernateUtil { private static final EntityManagerFactory emf; static { try { emf = Persistence.createEntityManagerFactory("manager1"); } catch (Throwable ex) { // Log exception! throw new ExceptionInInitializerError(ex); } } public static EntityManager getEntityManager() throws HibernateException { return emf.createEntityManager(); } }
Logs sur le getEntytiManager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 EntityManager em = HibernateUtil.getEntityManager(); em.getTransaction().begin(); em.persist(profil); em.getTransaction().commit(); em.close();
Logs sur le commit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 16:07:02,740 INFO [Version] Hibernate Annotations 3.4.0.GA 16:07:03,553 INFO [Environment] Hibernate 3.3.2.GA 16:07:03,740 INFO [Environment] hibernate.properties not found 16:07:03,865 INFO [Environment] Bytecode provider name : javassist 16:07:04,209 INFO [Environment] using JDK 1.4 java.sql.Timestamp handling 16:07:10,225 INFO [Version] Hibernate Commons Annotations 3.1.0.GA 16:07:10,459 INFO [Version] Hibernate EntityManager 3.4.0.GA 16:07:20,412 INFO [AnnotationBinder] Binding entity from annotated class: com.steria.socle.om.profil.ProfilOM 16:07:23,084 INFO [EntityBinder] Bind entity com.steria.socle.om.profil.ProfilOM on table t_profil 16:07:26,740 INFO [AnnotationConfiguration] Hibernate Validator not found: ignoring 16:07:28,225 INFO [HibernateSearchEventListenerRegister] Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled. 16:07:32,146 INFO [NamingHelper] JNDI InitialContext properties:{} 16:07:32,193 INFO [DatasourceConnectionProvider] Using datasource: java:/test_db 16:07:36,662 INFO [SettingsFactory] RDBMS: MySQL, version: 5.1.36-community-log 16:07:36,678 INFO [SettingsFactory] JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.0.5 ( $Date: 2007-03-01 00:01:06 +0100 (Thu, 01 Mar 2007) $, $Revision: 6329 $ ) 16:07:38,490 INFO [Dialect] Using dialect: org.hibernate.dialect.MySQLDialect 16:07:38,740 INFO [TransactionFactoryFactory] Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory 16:07:38,865 INFO [TransactionManagerLookupFactory] No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended) 16:07:38,865 INFO [SettingsFactory] Automatic flush during beforeCompletion(): disabled 16:07:38,865 INFO [SettingsFactory] Automatic session close at end of transaction: disabled 16:07:38,881 INFO [SettingsFactory] JDBC batch size: 15 16:07:38,881 INFO [SettingsFactory] JDBC batch updates for versioned data: disabled 16:07:38,943 INFO [SettingsFactory] Scrollable result sets: enabled 16:07:38,959 INFO [SettingsFactory] JDBC3 getGeneratedKeys(): enabled 16:07:38,959 INFO [SettingsFactory] Connection release mode: auto 16:07:39,053 INFO [SettingsFactory] Maximum outer join fetch depth: 2 16:07:39,053 INFO [SettingsFactory] Default batch fetch size: 1 16:07:39,068 INFO [SettingsFactory] Generate SQL with comments: disabled 16:07:39,068 INFO [SettingsFactory] Order SQL updates by primary key: disabled 16:07:39,068 INFO [SettingsFactory] Order SQL inserts for batching: disabled 16:07:39,068 INFO [SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory 16:07:39,334 INFO [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory 16:07:39,334 INFO [SettingsFactory] Query language substitutions: {} 16:07:39,334 INFO [SettingsFactory] JPA-QL strict compliance: enabled 16:07:39,350 INFO [SettingsFactory] Second-level cache: enabled 16:07:39,350 INFO [SettingsFactory] Query cache: disabled 16:07:39,350 INFO [SettingsFactory] Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory 16:07:39,365 INFO [SettingsFactory] Optimize cache for minimal puts: disabled 16:07:39,365 INFO [SettingsFactory] Structured second-level cache entries: disabled 16:07:39,943 INFO [SettingsFactory] Statistics: disabled 16:07:39,943 INFO [SettingsFactory] Deleted entity synthetic identifier rollback: disabled 16:07:39,959 INFO [SettingsFactory] Default entity-mode: pojo 16:07:39,959 INFO [SettingsFactory] Named query checking : enabled 16:07:42,225 INFO [SessionFactoryImpl] building session factory 16:07:51,521 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
A noter qu'il n'y a que lorsque j'appelle le commit que l'insertion en base se fait, malgré l'exception générée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 16:15:22,347 ERROR [JDBCTransaction] JDBC commit failed java.sql.SQLException: You cannot commit during a managed transaction! at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.jdbcCommit(BaseWrapperManagedConnection.java:543) at org.jboss.resource.adapter.jdbc.WrappedConnection.commit(WrappedConnection.java:334) at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:170) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:146) at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) at com.steria.socle.dao.profil.impl.bouchon.ProfilDaoImpl.ajouterProfil(ProfilDaoImpl.java:122) at com.steria.socle.ejb.profil.GestionProfilBean.ajouterProfil(GestionProfilBean.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.invocation.Invocation.performCall(Invocation.java:359) at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:237) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158) at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:169) at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:63) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350) at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181) at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168) at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205) at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:136) at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:648) at org.jboss.ejb.Container.invoke(Container.java:954) at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invoke(BaseLocalProxyFactory.java:430) at org.jboss.ejb.plugins.local.StatelessSessionProxy.invoke(StatelessSessionProxy.java:103) at $Proxy66.ajouterProfil(Unknown Source) at com.steria.socle.war.profil.service.ServiceDelegateGestionProfil.ajouterProfil(ServiceDelegateGestionProfil.java:133) at com.steria.socle.war.profil.action.GestionProfilAction.executeActionVALIDER(GestionProfilAction.java:264) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.steria.socle.war.commun.util.SAction.executeAction(SAction.java:373) at com.steria.socle.war.commun.util.SAction.execute(SAction.java:138) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 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.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156) 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.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:595)
Je crois comprendre que c'est JBoss qui devrait gérer la transaction (et donc le commit) ? Sauf que je ne voie pas comment lui dire...
Cordialement.
Partager