Hi,
I want to define a DefaultAdvisorAutoProxyCreator, to be able to generate a database entry containing the details of an Exception. I want to define it so that, whenever an Exception is thrown, I want a row to be inserted into a table containing the details...
Here are my definitions:
Here is my ExceptionAdvice:Code:<bean id="exceptionAdvice" class="util.ExceptionAdvice" > <property name="userDAO"><ref local="userDAO"/></property> <property name="systemDAO"><ref local="systemDAO"/></property> </bean> <bean id="exceptionAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"><ref local="exceptionAdvice"/></property> <property name="patterns"> <list> <value>.*</value> </list> </property> </bean> <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> <property name="advisorBeanNamePrefix"> <value>exceptionAdv</value> </property> <property name="usePrefix"> <value>true</value> </property> </bean>
I get the following Exception when I try to run this:Code:public class ExceptionAdvice implements ThrowsAdvice{ private SystemDAO systemDAO = null; private UserDAO userDAO = null; public void setUserDAO(UserDAO userDao) { this.userDAO = userDao; } public void setSystemDAO(SystemDAO systemDao) { this.systemDAO = systemDao; } public void afterThrowing(Method m,Object[] args,Object target,Exception ex){ ApplicationErrorLog ael=new ApplicationErrorLog(); Timestamp now = new Timestamp(System.currentTimeMillis()); ael.setCreatedTime(now); ael.setCreatedUser(userDAO.retrieveUserByUserName("admin")); ael.setDescription("Method:"+m+" Exception:"+ex); ael.setErrorNumber("111"); systemDAO.saveApplicationErrorLog(ael); } }
It complains about the bean 'userManagerFacade' , so here is the bean definition:Code:Exception in constructor: testCreateAndDeleteUser (org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManagerFacade' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Unexpected AOP exception; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy3 org.springframework.aop.framework.AopConfigException: Unexpected AOP exception; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy3 java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy3 at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:448) at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:63) at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:192) at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:406) at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:318) at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:240) at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:213) at org.springframework.aop.framework.ProxyFactoryBean.getSingletonInstance(ProxyFactoryBean.java:210) at org.springframework.aop.framework.ProxyFactoryBean.setBeanFactory(ProxyFactoryBean.java:177) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:245) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:177) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:159) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:177) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:268) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:68) at service.BaseServiceTestCase.<init>(BaseServiceTestCase.java:14) at service.UserManagerFacadeTest.<init>(UserManagerFacadeTest.java:12) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:274) at service.UserManagerFacadeTest.main(UserManagerFacadeTest.java:69) ) at service.UserManagerFacadeTest.main(UserManagerFacadeTest.java:69)
What can be the problem?Code:<bean id="FacadeTemplate" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref local="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="update_*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop> </props> </property> </bean> <bean id="userManagerFacade" parent="FacadeTemplate" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target"><ref local="userManagerFacadeTarget"/></property> <property name="interceptorNames"> <list> <value>securityAdvisor</value> </list> </property> </bean> <bean id="userManagerFacadeTarget" class="service.impl.UserManagerFacadeImpl"> <property name="userDAO"><ref local="userDAO"/></property> <property name="systemDAO"><ref local="systemDAO"/></property> </bean>
Thanks a lot, regards,
Turgay Zengin


Reply With Quote