J'ai donc mis en place la méthode de ce très sympathique Mr Baptiste Wicht mais je me retrouve une fois de plus dans l'impasse avec une belle exeception :
Error creating bean with name 'transactionProxy': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'target' is required
ma classe de config étant la suivante :
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
|
@Configuration(defaultLazy = Lazy.TRUE)
@ComponentScan("fax")
@ImportXml(locations = "applicationContext-fax2u-test.xml")
@AnnotationDrivenTx(transactionManager = "transactionManager")
public class ApplicationConfigTest {
@Bean
public ProxyFactoryBean faxService() {
ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean();
try {
proxyFactoryBean.setProxyInterfaces(new Class[]{IFaxService.class});
proxyFactoryBean.setInterceptorNames(new String[]{"faxServiceInterceptor", "faxServiceBean"});
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return proxyFactoryBean;
}
@Bean
public TransactionProxyFactoryBean faxServiceBean() {
TransactionProxyFactoryBean transactionProxyFactoryBean = transactionProxy();
transactionProxyFactoryBean.setTarget("faxServiceTarget");
transactionProxyFactoryBean.setTransactionAttributeSource(new AnnotationTransactionAttributeSource());
return transactionProxyFactoryBean;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager();
hibernateTransactionManager.setSessionFactory(sessionFactory());
return hibernateTransactionManager;
}
@Bean()
public TransactionProxyFactoryBean transactionProxy() {
TransactionProxyFactoryBean transactionProxyFactoryBean = new TransactionProxyFactoryBean();
transactionProxyFactoryBean.setTransactionManager(transactionManager());
Properties properties = new Properties();
properties.put("*", "PROPAGATION_REQUIRED");
transactionProxyFactoryBean.setTransactionAttributes(properties);
return transactionProxyFactoryBean;
}
@Bean(scope = "singleton")
public SessionFactory sessionFactory() {
AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
annotationSessionFactoryBean.setConfigLocation(new ClassPathResource("test.hibernate.cfg.xml"));
Properties props = new Properties();
props.put("hibernate.c3p0.autoCommitOnClose", true);
props.put("hibernate.autoCommitOnClose", true);
props.put("hibernate.autocommit", true);
props.put("hibernate.connection.release_mode", "auto");
props.put("hibernate.transaction.auto_close_session", true);
annotationSessionFactoryBean.setHibernateProperties(props);
try {
annotationSessionFactoryBean.afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}
return annotationSessionFactoryBean.getConfiguration().buildSessionFactory();
}
} |
et mon test tout bête est le suivant :
1 2
|
JavaConfigApplicationContext applicationContextTest = new JavaConfigApplicationContext(ApplicationConfigTest.class); |
Au départ j'avai le fichier Xml suivant ( qui fonctionnait !!) :
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
|
[...]
<!--=========================== FAX SERVICE ==================================-->
<bean id="faxService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="fax.services.pub.IFaxService"/>
<property name="interceptorNames">
<list>
<value>faxServiceInterceptor</value>
<value>faxServiceBean</value>
</list>
</property>
</bean>
<bean id="faxServiceBean" parent="transactionProxy">
<property name="target" ref="faxServiceTarget"/>
<property name="transactionAttributeSource">
<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
</property>
</bean>
<!--=========================== TRANSACTION ==================================-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="transactionProxy" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!--=========================== SESSSION FACTORY ==================================-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
scope="singleton">
<property name="configLocation" value="classpath:test.hibernate.cfg.xml"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.c3p0.autoCommitOnClose">true</prop>
<prop key="hibernate.autoCommitOnClose">true</prop>
<prop key="hibernate.autocommit">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.transaction.auto_close_session">true</prop>
</props>
</property>
</bean>
[...] |
Je me demande si le problème n'est pas lié à la traduction de
1 2 3 4 5 6 7
|
<bean id="faxServiceBean" parent="transactionProxy">
<property name="target" ref="faxServiceTarget"/>
<property name="transactionAttributeSource">
<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
</property>
</bean> |
en
1 2 3 4 5 6 7 8 9
|
@Bean
public TransactionProxyFactoryBean faxServiceBean() {
TransactionProxyFactoryBean transactionProxyFactoryBean = transactionProxy();
transactionProxyFactoryBean.setTarget("faxServiceTarget");
transactionProxyFactoryBean.setTransactionAttributeSource(new AnnotationTransactionAttributeSource());
return transactionProxyFactoryBean;
} |
Remarque : je ne sais pas comment "traduire" le
parent="transactionProxy" de <bean id="faxServiceBean" parent="transactionProxy">
dans mon bean faxServiceBean()
en èsperant que quelqu'un qui aura eu le courage de tout lire
aura une réponse ou une idée à me proposer
Partager