Bonjour,
j'ai un problème avec "org.springframework.transaction.interceptor.Trans actionProxyFactoryBean"
D'après ce que j'ai compris, cette classe permet de gérer les transactions pour un service. Voici comment je l'utilise :

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
 
	<bean id="quickSearchManagementService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="myTxManager"/></property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
        <property name="target">
   			<bean class="org.springframework.aop.framework.ProxyFactoryBean">	
				<property name="target"><ref bean="quickSearchManagementServiceTarget"/></property>
				<property name="proxyInterfaces">
					<value>com.flexcipio.clinical.service.QuickSearchManagementService</value>
				</property>
				<property name="interceptorNames">
					<list>
						<value>methodSecurityInterceptor</value>
					</list>
				</property>
			</bean>    
		</property>
    </bean>
et voici ma classe d'implémentation cible :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
		<bean id="quickSearchManagementServiceTarget" class="com.flexcipio.clinical.service.impl.QuickSearchManagementServiceImpl">
                <property name="sessionFactory"><ref bean="sessionFactory"/></property>
		<property name="formDao"><ref bean="formDao"/></property>
	</bean>
A l'intérieur de mon implémentation, j'ai besoin d'une transaction que je veux commiter pour prendre en compte des changements :

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 List<Form> searchForm(String search, User user) {
              ...............................
              ...............................
			Transaction tx = sessionFactory.getCurrentSession().beginTransaction();
			List<Form> forms = formDao.findByAll();
			for ( Form form : forms) {
				String formName = form.getName();
				form.setName(formName+"1");
				formDao.update(form);
			}
			tx.commit();
            ..............................
            ..............................
}
Et j'ai l'erreur suivante :
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
 
org.hibernate.TransactionException: Transaction not successfully started
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100)
	at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy89.searchForm(Unknown Source)
	at com.clinical.web.controller.impl.QuickSearchManagementControllerImpl.getQuickSearch(QuickSearchManagementControllerImpl.java:101)
	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.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
	at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
Je ne sais pas ce qui se passe. Apparamment, je ne peux pas ouvrir une transaction à l'intérieur d'une méthode de mon service de manière à mettre à jour des données puis commiter la transaction de manière à ce que mes changements soient pris en compte. TransactionProxyFactoryBean semble interdire ceci. Est-ce que quelqu'un peut me dire ce que je peux faire pour utiliser une transaction dans une méthode de mon service et la commiter sans erreur ? Je ne comprend rien à cette histoire de transaction. Merci à l'avance si vous pouvez me donner le maximum d'informations.