turgayz
Sep 1st, 2004, 07:31 AM
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:
<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.RegexpMethodPointc utAdvisor">
<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.Defaul tAdvisorAutoProxyCreator">
<property name="advisorBeanNamePrefix">
<value>exceptionAdv</value>
</property>
<property name="usePrefix">
<value>true</value>
</property>
</bean>
Here is my ExceptionAdvice:
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);
}
}
I get the following Exception when I try to run this:
Exception in constructor: testCreateAndDeleteUser (org.springframework.beans.factory.BeanCreationExc eption: Error creating bean with name 'userManagerFacade' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigExcepti on: Unexpected AOP exception; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy3
org.springframework.aop.framework.AopConfigExcepti on: 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.generat e(DefaultGeneratorStrategy.java:63)
at net.sf.cglib.core.AbstractClassGenerator.create(Ab stractClassGenerator.java:192)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer. java:406)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:3 18)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(Cglib2AopProxy.java:240)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(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.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:245)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:177)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:159)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:177)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:268)
at org.springframework.context.support.ClassPathXmlAp plicationContext.<init>(ClassPathXmlApplicationContext.java:68)
at service.BaseServiceTestCase.<init>(BaseServiceTestCase.java:14)
at service.UserManagerFacadeTest.<init>(UserManagerFacadeTest.java:12)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:274)
at service.UserManagerFacadeTest.main(UserManagerFaca deTest.java:69)
)
at service.UserManagerFacadeTest.main(UserManagerFaca deTest.java:69)
It complains about the bean 'userManagerFacade' , so here is the bean definition:
<bean id="FacadeTemplate" lazy-init="true"
class="org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean">
<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>
What can be the problem?
Thanks a lot, regards,
Turgay Zengin
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:
<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.RegexpMethodPointc utAdvisor">
<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.Defaul tAdvisorAutoProxyCreator">
<property name="advisorBeanNamePrefix">
<value>exceptionAdv</value>
</property>
<property name="usePrefix">
<value>true</value>
</property>
</bean>
Here is my ExceptionAdvice:
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);
}
}
I get the following Exception when I try to run this:
Exception in constructor: testCreateAndDeleteUser (org.springframework.beans.factory.BeanCreationExc eption: Error creating bean with name 'userManagerFacade' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigExcepti on: Unexpected AOP exception; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy3
org.springframework.aop.framework.AopConfigExcepti on: 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.generat e(DefaultGeneratorStrategy.java:63)
at net.sf.cglib.core.AbstractClassGenerator.create(Ab stractClassGenerator.java:192)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer. java:406)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:3 18)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(Cglib2AopProxy.java:240)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(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.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:245)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:177)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:159)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:177)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:268)
at org.springframework.context.support.ClassPathXmlAp plicationContext.<init>(ClassPathXmlApplicationContext.java:68)
at service.BaseServiceTestCase.<init>(BaseServiceTestCase.java:14)
at service.UserManagerFacadeTest.<init>(UserManagerFacadeTest.java:12)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:274)
at service.UserManagerFacadeTest.main(UserManagerFaca deTest.java:69)
)
at service.UserManagerFacadeTest.main(UserManagerFaca deTest.java:69)
It complains about the bean 'userManagerFacade' , so here is the bean definition:
<bean id="FacadeTemplate" lazy-init="true"
class="org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean">
<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>
What can be the problem?
Thanks a lot, regards,
Turgay Zengin