Hi,

I want to use Spring and Hibernate and AOP in a servicemix-bean.

So I use AOP for transaction management with an name pattern approach and
define it for a certain pointcut expression (e.g. execution(*
com.xyz.dao..*Dao.*(..))

<aop:config>
                <!-- the execution of any method defined in the service package 
or a
sub-package -->
                <aop:pointcut expression="${db.transaction.pointcut.expression}"
                        id="dbMethods" />
                <aop:advisor advice-ref="txAdvice"      
pointcut-ref="dbMethods" />
        </aop:config>

        <tx:advice id="txAdvice" transaction-manager="transactionManager">
                <tx:attributes>
                        <tx:method name="create*" propagation="REQUIRED"
                                rollback-for="java.lang.Exception" />
                        <tx:method name="delete*" propagation="REQUIRED"
                                rollback-for="java.lang.Exception" />
                        ....
                        <tx:method name="*" propagation="SUPPORTS" 
read-only="true" />
                </tx:attributes>
        </tx:advice>

        <bean id="xyzDao" class="com.xyz.dao.XyzDao"/>


        <!-- JPA annotations bean post processor -->
        <bean
        
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"
/>

This approach works well in a non SMX approach.

In SMX I get the following exception:

org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'xyzDao' defined in class path resource [appContext.xml]:
Initialization of bean failed; nested exception is
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named
'txAdvice' must be of type [org.aopalliance.aop.Advice], but was actually of
type [org.springframework.transaction.interceptor.TransactionInterceptor]
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
        at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
        at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
        at com.xyz.context.ContextHelper.<clinit>(ContextHelper.java:28)
        at com.xyz.dao.base.DaoFactory.<init>(DaoFactory.java:15)
        at com.xyz.dao.base.DaoFactory.<clinit>(DaoFactory.java:17)
        at
com.xyz.esb.auditlog.AuditlogProcessorBean.onMessageExchange(AuditlogProcessorBean.java:66)
        at
org.apache.servicemix.bean.BeanEndpoint.onProviderExchange(BeanEndpoint.java:226)
        at 
org.apache.servicemix.bean.BeanEndpoint.process(BeanEndpoint.java:212)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchangeInTx(AsyncBaseLifeCycle.java:456)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle$2.run(AsyncBaseLifeCycle.java:341)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException:
Bean named 'txAdvice' must be of type [org.aopalliance.aop.Advice], but was
actually of type
[org.springframework.transaction.interceptor.TransactionInterceptor]
        at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
        at
org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor.getAdvice(AbstractBeanFactoryPointcutAdvisor.java:77)
        at
org.springframework.aop.aspectj.AspectJProxyUtils.isAspectJAdvice(AspectJProxyUtils.java:68)
        at
org.springframework.aop.aspectj.AspectJProxyUtils.makeAdvisorChainAspectJCapableIfNecessary(AspectJProxyUtils.java:51)
        at
org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.extendAdvisors(AspectJAwareAdvisorAutoProxyCreator.java:100)
        at
org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:89)
        at
org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:66)
        at
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:345)
        at
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:309)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1343)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
        ... 26 more

Could anybody give me a hint how I could solve the problem.

TIA
Martin

-- 
View this message in context: 
http://www.nabble.com/BeanNotOfRequiredTypeException-with-SMX4-and-Spring-and-Hibernate-and-AOP-tp20936608p20936608.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to