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 :
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>
HibernateUtil :
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();
    }
}
La tentative d'insertion :
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 getEntytiManager :
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
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
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)
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.
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.