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

Spring Java Discussion :

@Transactional et le problème 'no transaction in progress'


Sujet :

Spring Java

Vue hybride

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut @Transactional et le problème 'no transaction in progress'
    Bonjour,

    je suis au début d'un projet utilisant Spring 2.5 hibernate JPA, pour gérer les transactions je le fais avec le @Transactional de Spring.

    le fichier applicationContext.xml
    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
     
    <bean
    		class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
     
     
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    		<property name="driverClass" value="com.mysql.jdbc.Driver" />
    		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/base" />
    		 <property name="properties"> 
                    <props> 
                            <prop key="c3p0.acquire_increment">5</prop> 
                            <prop key="c3p0.idle_test_period">100</prop> 
                            <prop key="c3p0.max_size">100</prop> 
                            <prop key="c3p0.max_statements">0</prop> 
                            <prop key="c3p0.min_size">10</prop> 
                            <prop key="user">root</prop> 
                            <prop key="password">pass</prop> 
                    </props> 
            </property> 
     
    	</bean>
     
    	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="persistenceUnitName" value="tiles"/>
            <property name="dataSource" ref="dataSource"/>
    		<property name="jpaVendorAdapter">
    			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    				<property name="databasePlatform"
    						value="org.hibernate.dialect.SQLServerDialect"/>
    				<property name="generateDdl" value="false"/>
    				<property name="showSql" value="true" />
    			</bean>
    		</property>
    	</bean>
     
        <tx:annotation-driven />
     
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="entityManagerFactory"/>
    	</bean>
     
    	<context:annotation-config />
     
    	<context:component-scan base-package="package" />
     
    	<aop:aspectj-autoproxy />
    </beans>
    controlleur:
    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
     
    @Controller
    @SessionAttributes(value = "produit")
    public class ProduitController {
     
    	private IProduitService produitService;
     
     
    	public IProduitService getProduitService() {
    		return produitService;
    	}
     
    	@Autowired
    	public void setProduitService(IProduitService produitService) {
    		this.produitService = produitService;
    	}
     
    	@RequestMapping(value = "/produit/add.htm", method = RequestMethod.POST)
    	public String addProduit(@ModelAttribute("produit") Produit produit,
    			SessionStatus status) {
    		produitService.createProduct(produit);
    		status.setComplete();
    		return Constants.MENU_PRODUCTS;
    	}
    ...
    service:
    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
     
    @Service
    @Transactional
    public class ProduitServiceImpl implements IProduitService {
     
    	@Autowired
    	private ProduitDao produitDao;
     
    	public ProduitDao getProduitDao() {
    		return produitDao;
    	}
     
    	public void setProduitDao(ProduitDao produitDao) {
    		this.produitDao = produitDao;
    	}
     
     
    	public void createProduct(Produit produit) {
    		produitDao.persist(produit);
     
    	}
    ...
    le problème c'est avec un simple main ça marche nickel j'arrive à persister:

    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
     
    public static void main(String[] args) {
    		ApplicationContext context = new ClassPathXmlApplicationContext(
    		"META-INF/applicationContext.xml");
     
     
    		IProduitService produitService = (IProduitService)context.getBean("produitServiceImpl");
     
    		Produit produit = new Produit();
     
    		produit.setDescription("description");
    		produit.setPrice(21.21);
     
    		produitService.createProduct(produit);
    	}
    mais en web Spring n'arrive pas à gerer les transaction ie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DEBUG - delaying identity-insert due to no transaction in progress
    DEBUG - processing cascade ACTION_MERGE for:...
    DEBUG - done processing cascade ACTION_MERGE for: ...
    DEBUG - Closing JPA EntityManager
    DEBUG - closing session
    pour moi la seul difference entre le web et le main c'est qu'en web spring utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG - Publishing event in context [org.springframework.web.context.support.XmlWebApplicationContext@b80f1c].....
    alors qu'en main moi j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.springframework.context.support.ClassPathXmlApplicationContext
    Si quelqu'un peut m'eclaircir le problème ça sera vraiment très sympa car je bute sur cela depuis des jours.

    Merci par avance de vos suggéstions et désolé si j'étais long

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut
    c'est corrigé après des jours de galère .

    en fait vu que j'utilise spring mvc j'ai deux fichiers de conf spring un servant à configurer la partie web et l'autre la partie service c'est dans ce dernier que j'ai mis la configuration des transactions => cette façon de faire ne marche pas.

    ce que j'ai fait pour que ça marche c'est que j'ai un fichier applicationContext.xml ou il y a la config de l'entityManager dans le repertoire WEB-INF est un autre fichier dans le même repertoire nomServlet-servlet.xml ou j'ai tout mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tx:annotation-driven />
    .

    Si quequ'un puisse me dire le pourquoi du comment je suis preneur

  3. #3
    Membre éclairé

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Par défaut
    Je pense qu'il fallait juste ajouter dans ton fichier nomServlet-servlet.xml des import sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <import resource="classpath:path/to/your/file/applicationContext.xml" />

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut
    ayant fait face au même problème je suis preneur d'une explication si quelqu'un en a une.
    al3alwa as-tu compris pourquoi on obtenait ce comportement ?

    Citation Envoyé par al3alwa Voir le message
    c'est corrigé après des jours de galère .

    en fait vu que j'utilise spring mvc j'ai deux fichiers de conf spring un servant à configurer la partie web et l'autre la partie service c'est dans ce dernier que j'ai mis la configuration des transactions => cette façon de faire ne marche pas.

    ce que j'ai fait pour que ça marche c'est que j'ai un fichier applicationContext.xml ou il y a la config de l'entityManager dans le repertoire WEB-INF est un autre fichier dans le même repertoire nomServlet-servlet.xml ou j'ai tout mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tx:annotation-driven />
    .

    Si quequ'un puisse me dire le pourquoi du comment je suis preneur

  5. #5
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Y a moyen d'avoir une explication un peu plus claire?
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

Discussions similaires

  1. [delphi][interbase]problème de transaction
    Par daheda dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/10/2006, 09h12
  2. Problème de Transactions
    Par blaspalles dans le forum Access
    Réponses: 4
    Dernier message: 18/09/2006, 17h05
  3. problème de transaction et load data
    Par jccanut dans le forum Installation
    Réponses: 6
    Dernier message: 14/09/2006, 11h38
  4. [SQL 2k] Problème de transaction choisie comme victime
    Par Actarion dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 04/07/2006, 17h17
  5. Encore un petit problème de transaction
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/03/2005, 16h13

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