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 :
et voici ma classe d'implémentation cible :
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>
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 <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>
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 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(); .............................. .............................. }
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.
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)
Partager