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

Java EE Discussion :

ava.sql.SQLException: DSRA9350E: Operation Connection.commit is not allowed during a global transact [EJB3 Entity]


Sujet :

Java EE

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut ava.sql.SQLException: DSRA9350E: Operation Connection.commit is not allowed during a global transact
    Bonjour,


    J'ai développé via Rational Developper 7.5 un SessionBean 3 très simple avec une méthode qui utilise un entity bean et son entity manager JPA, pour créer un nouveau record dans la table associée.

    La méthode marche et le record est créé en base, mais l'exception suivante m'est systématiquement remontée après sa création :

    java.sql.SQLException: DSRA9350E: Operation Connection.commit is not allowed during a global transaction.

    Mon EJB est créé par défaut, la seule annotation présente dans mon code est le @Stateless.

    J'ai essayé de jouer avec les paramètres de transaction :
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    mais j'obtiens le même résultat que par défaut.

    Je ne comprends pas trop d'ou vient le problème. C'est la première fois que j'utilise des EJB3, j'ai deja fait le meme style de code avec des EJB2 sans problèmes..

    A votre avis, quelle peut être la source du problèmes? Quels sont les paramètres/annotations que je devrais peut être faire figurer dans mon code?


    Merci pour votre aide!

    Motorenshi.

  2. #2
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    Fais voir le code de ton stateless session bean et de persistence.xml

    Est-ce qu'à un moment tu fais un commit() en dur dans le code ?

    C'est un entity bean container-managed ou bean-managed ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut
    C'est un session bean container-managed, j'imagine, puisque tout est par défaut (j'imagine qu'il faudrait ajouter une annotation pr préciser que l'on implémente un BMP?). En tout cas, l'option de choix entre BMP et CMP ne m'est pas offerte par le wizard EJB de RAD comme pour les EJB 2.x

    Pour info, j'utilise un WAS 7 en serveur d'applis, et DB2 9 comme source de données. Une ressource jdbc est correctement déclarée dans WAS pointant vers mon instance de database DB2 (provider type=DB2 Universal JDBC Driver Provider, et Implementation type = Connection Pool Data source (non XA donc))


    Voici le code de mon stateless session bean :

    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
    63
    64
    65
    66
    package sessions;
     
    import java.util.Date;
    import java.util.List;
    import java.sql.Timestamp;
     
    import javax.ejb.Stateless;
     
    import entities.*;
    import entities.controller.*;
     
     
    /**
     * Session Bean implementation class Circuit
     */
    @Stateless
    public class Circuit implements CircuitLocal {
     
           // JPA entity bean managers créés par RAD
    	private OperationManager opLogMgr;  
    	private OperationtypeManager opTypeMgr;
    	private composantManager composantMgr;
     
        /**
         * Default constructor. 
         */
        public Circuit() {
            // TODO Auto-generated constructor stub
        }
     
     
        public int daterOperation(String value, String operationName){
        	Date currentDate;
     
        	if(operationName.equals("operation1")){
     
        		currentDate= new Date();
        		Operation operation = new Operation(); 
        		operation.setdate(new Timestamp(currentDate.getTime()));
     
        		opTypeMgr = new OperationtypeManager(); 
     
                    //recuperation en database du record correspondant à l'opération dont le nom est transmis en paramètre
        		List <Operationtype> l = opTypeMgr.getOperationtypeByName(operationName);
     
        		Operationtype opType = l.get(0);
        		operation.setOperationtypeid(opType);
        		composantMgr = new composantManager();
        		Composant comp = composantMgr.findComposantByValue(value);
        		operation.setValue(comp);
     
        		try {
        			opLogMgr = new OperationManager();
        			opLogMgr.createOperation(operation);
        		} catch (Exception e) {
        			// TODO Auto-generated catch block
        			e.printStackTrace();
        		}
        		return 0;
        	}
     
        	System.out.println("An error occured during dating");
        	return 1;
        }
     
    }

    et voici le persistence.xml associé :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" 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">
    	<persistence-unit name="CircuitEJB">
    		<jta-data-source>jdbc/circuit</jta-data-source>
    		<class>
    		entities.Composanttype</class>
    		<class>
    		entities.Operation</class>
    		<class>
    		entities.Operationtype</class>
    		<class>
    		entities.Composant</class>
    	</persistence-unit>
    </persistence>

  4. #4
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    je t'ai dis une bêtise, j'ai tapé trop vite.
    Les notions de persistence CMP ou BMP ne concernent que les entity beans.
    En revanche les notions de transaction CMT / BMT concernent bien les sessions beans.

    De toute façon ton problème vient du mode transactionnel en cours, dans tes entity beans et dans ton serveur d'appli.

    Faut creuser cette piste là.

    Essaies d'ajouter cette annotation sur ton SFSB et dis nous ce que ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @TransactionManagement(value=TransactionManagementType.BEAN)
    Si ce n'est pas spécifié, par défaut le bean a une gestion des transactions CMT, cad que c'est le container qui gère les transactions.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut
    Avant tout merci pour ton aide.

    J'ai donc testé en déclarant mon EJB en tant que bean managed via l'annotation que tu m'as donnée.

    Cette fois-ci le record n'est plus du tout inseré, et le méthode s'arrete et remonte une exception sur la ligne :

    List <Operationtype> l = opTypeMgr.getOperationtypeByName(operationName);

    La dite exception :

    com.ibm.db2.jcc.a.SqlException: [jcc][t4][10120][10898][3.52.90] Opération non valide : La méthode result set est fermée. ERRORCODE=-4470, SQLSTATE=null


    Cela te parle-t-il?

    Merci d'avance.

    Motorenshi.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut
    J'ai trouvé :

    Les entity manager JPA générés par RAD gèrent eux-mêmes les transactions par défaut. Ils réalisent donc des 'commit' à chaque fois qu'une donnée doit être persistée en database.

    Ce qui evidemment entre en conflit avec si on les utilise dans un session container-managed puisque c'est celui-ci qui doit faire le commit...

    Il m'a donc juste fallu modifier le code des entity managers en conséquence.

    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/06/2008, 23h51
  2. Réponses: 2
    Dernier message: 20/04/2008, 22h40
  3. Réponses: 7
    Dernier message: 11/08/2006, 09h24
  4. [SQL serveur][DELPHI7]comment connecter ?
    Par arnaud_marechal dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2004, 17h50

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