IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wildfly/JBoss Java Discussion :

Transaction JBoss / Hibernate


Sujet :

Wildfly/JBoss Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut Transaction JBoss / Hibernate
    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.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Après d'autres tests, j'ai remarqué que si je défini la connexion à la base dans le fichier persistence.xml au lieu d'y faire appel au fichier mysql-ds.xml de JBoss, je n'ai plus d'erreur.
    Mais je suppose que le comportement de la persistance n'est alors plus le même non plus.

    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
    <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.connection.url" value="jdbc:mysql://localhost/test_db" />
    			<property name="hibernate.connection.username" value="root" />
    			<property name="hibernate.connection.password" value="" />
    			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    		</properties>
    	</persistence-unit>
    </persistence>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    J'ai trouvé la solution en apportant des modifications au 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="JTA">
    		<jta-data-source>java:/jdbc/test_db</jta-data-source>
    		<class>com.steria.socle.om.profil.ProfilOM</class>
    		<properties>
    			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    			<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
    		</properties>
    	</persistence-unit>
    </persistence>
    Du coup, dans mon DAO, plus besoin de faire appel à em.getTransaction(). Un simple em.persist(objet) suffit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2009, 16h30
  2. Réponses: 1
    Dernier message: 12/05/2009, 22h20
  3. JBoss, Hibernate et ConstraintViolationException
    Par romainw dans le forum Hibernate
    Réponses: 3
    Dernier message: 30/01/2009, 11h50
  4. jboss / hibernate : no suitable driver
    Par mouaa dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 10/11/2008, 12h29
  5. [JBoss + hibernate] erreur autocommit
    Par pmartin8 dans le forum Hibernate
    Réponses: 5
    Dernier message: 02/05/2007, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo