rossouw
May 12th, 2005, 07:18 AM
Hi there,
I’m trying to put AOP tracing and logging in my project. I’m trying to set up a config file so I can trace and log anything in my application. By that I mean I want to proxy classes and interfaces.
So far I can proxy the intefaces thanx to some tutorial pages but now the classes is a problem. I get some error and I don’t know what the problem is. Here’s a simple example.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Bean configuration -->
<bean id="businesslogicbean"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>IBusinessLogic</value>
</property>
<property name="target">
<ref local="beanTarget"/>
</property>
<property name="interceptorNames">
<list>
<value>theTracingBeforeAdvisor</value>
<value>theTracingAfterAdvisor</value>
<value>theLoggingThrowsAdvisor</value>
</list>
</property>
</bean>
<bean id="businesslogicbean2"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref local="beanTarget2"/>
</property>
<property name="proxyTargetClass"><value>true</value></property>
<property name="interceptorNames">
<list>
<value>theTracingBeforeAdvisor</value>
<value>theTracingAfterAdvisor</value>
<value>theLoggingThrowsAdvisor</value>
</list>
</property>
</bean>
<!-- Bean Classes -->
<bean id="beanTarget"
class="BusinessLogic"/>
<bean id="beanTarget2"
class="JustAClass"/>
<!-- Advisor pointcut definition for before advice -->
<bean id="theTracingBeforeAdvisor"
class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">
<property name="advice">
<ref local="theTracingBeforeAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
<!-- Advisor pointcut definition for after advice -->
<bean id="theTracingAfterAdvisor"
class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">
<property name="advice">
<ref local="theTracingAfterAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
<bean id="theLoggingThrowsAdvisor"
class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">
<property name="advice">
<ref local="theLoggingThrowsAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
<!-- Advice classes -->
<bean id="theTracingBeforeAdvice"
class="co.za.ep.util.trace.TracingBeforeAdvice"/>
<bean id="theTracingAfterAdvice"
class="co.za.ep.util.trace.TracingAfterAdvice"/>
<bean id="theLoggingThrowsAdvice"
class="co.za.ep.util.log.LoggingThrowsAdvice"/>
</beans>
// the class that implements the interface
public class BusinessLogic
implements IBusinessLogic
{
public void foo()
{
}
public String stephan(String message, int count)
{
return "WOOT";
}
}
//the plain class
public class JustAClass {
public void printStuff(){
System.out.println("Working?");
}
}
Why am I getting this error:
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'businesslogicbean2' defined in file [C:\Eclipse\workspace\TracingAndLogging\springconf ig.xml]: Initialization of bean failed; nested exception is java.lang.IllegalAccessError: null
java.lang.IllegalAccessError
at net.sf.cglib.core.ClassEmitter.setTarget(ClassEmit ter.java:45)
at net.sf.cglib.core.ClassEmitter.<init>(ClassEmitter.java:37)
at net.sf.cglib.core.KeyFactory$Generator.generateCla ss(KeyFactory.java:165)
at net.sf.cglib.core.DefaultGeneratorStrategy.generat e(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(Ab stractClassGenerator.java:215)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyF actory.java:145)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.jav a:117)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.jav a:108)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(Cglib2AopProxy.java:134)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(Cglib2AopProxy.java:124)
at org.springframework.aop.framework.ProxyFactoryBean .getSingletonInstance(ProxyFactoryBean.java:241)
at org.springframework.aop.framework.ProxyFactoryBean .setBeanFactory(ProxyFactoryBean.java:201)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:301)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:223)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:236)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:159)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:255)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:317)
at org.springframework.context.support.FileSystemXmlA pplicationContext.<init>(FileSystemXmlApplicationContext.java:82)
at org.springframework.context.support.FileSystemXmlA pplicationContext.<init>(FileSystemXmlApplicationContext.java:67)
at org.springframework.context.support.FileSystemXmlA pplicationContext.<init>(FileSystemXmlApplicationContext.java:58)
at MainApplication.main(MainApplication.java:24)
Exception in thread "main"
I will appreciate any help I can get.
I’m trying to put AOP tracing and logging in my project. I’m trying to set up a config file so I can trace and log anything in my application. By that I mean I want to proxy classes and interfaces.
So far I can proxy the intefaces thanx to some tutorial pages but now the classes is a problem. I get some error and I don’t know what the problem is. Here’s a simple example.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Bean configuration -->
<bean id="businesslogicbean"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>IBusinessLogic</value>
</property>
<property name="target">
<ref local="beanTarget"/>
</property>
<property name="interceptorNames">
<list>
<value>theTracingBeforeAdvisor</value>
<value>theTracingAfterAdvisor</value>
<value>theLoggingThrowsAdvisor</value>
</list>
</property>
</bean>
<bean id="businesslogicbean2"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref local="beanTarget2"/>
</property>
<property name="proxyTargetClass"><value>true</value></property>
<property name="interceptorNames">
<list>
<value>theTracingBeforeAdvisor</value>
<value>theTracingAfterAdvisor</value>
<value>theLoggingThrowsAdvisor</value>
</list>
</property>
</bean>
<!-- Bean Classes -->
<bean id="beanTarget"
class="BusinessLogic"/>
<bean id="beanTarget2"
class="JustAClass"/>
<!-- Advisor pointcut definition for before advice -->
<bean id="theTracingBeforeAdvisor"
class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">
<property name="advice">
<ref local="theTracingBeforeAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
<!-- Advisor pointcut definition for after advice -->
<bean id="theTracingAfterAdvisor"
class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">
<property name="advice">
<ref local="theTracingAfterAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
<bean id="theLoggingThrowsAdvisor"
class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">
<property name="advice">
<ref local="theLoggingThrowsAdvice"/>
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
<!-- Advice classes -->
<bean id="theTracingBeforeAdvice"
class="co.za.ep.util.trace.TracingBeforeAdvice"/>
<bean id="theTracingAfterAdvice"
class="co.za.ep.util.trace.TracingAfterAdvice"/>
<bean id="theLoggingThrowsAdvice"
class="co.za.ep.util.log.LoggingThrowsAdvice"/>
</beans>
// the class that implements the interface
public class BusinessLogic
implements IBusinessLogic
{
public void foo()
{
}
public String stephan(String message, int count)
{
return "WOOT";
}
}
//the plain class
public class JustAClass {
public void printStuff(){
System.out.println("Working?");
}
}
Why am I getting this error:
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'businesslogicbean2' defined in file [C:\Eclipse\workspace\TracingAndLogging\springconf ig.xml]: Initialization of bean failed; nested exception is java.lang.IllegalAccessError: null
java.lang.IllegalAccessError
at net.sf.cglib.core.ClassEmitter.setTarget(ClassEmit ter.java:45)
at net.sf.cglib.core.ClassEmitter.<init>(ClassEmitter.java:37)
at net.sf.cglib.core.KeyFactory$Generator.generateCla ss(KeyFactory.java:165)
at net.sf.cglib.core.DefaultGeneratorStrategy.generat e(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(Ab stractClassGenerator.java:215)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyF actory.java:145)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.jav a:117)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.jav a:108)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(Cglib2AopProxy.java:134)
at org.springframework.aop.framework.Cglib2AopProxy.g etProxy(Cglib2AopProxy.java:124)
at org.springframework.aop.framework.ProxyFactoryBean .getSingletonInstance(ProxyFactoryBean.java:241)
at org.springframework.aop.framework.ProxyFactoryBean .setBeanFactory(ProxyFactoryBean.java:201)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:301)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:223)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:236)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:159)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:255)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:317)
at org.springframework.context.support.FileSystemXmlA pplicationContext.<init>(FileSystemXmlApplicationContext.java:82)
at org.springframework.context.support.FileSystemXmlA pplicationContext.<init>(FileSystemXmlApplicationContext.java:67)
at org.springframework.context.support.FileSystemXmlA pplicationContext.<init>(FileSystemXmlApplicationContext.java:58)
at MainApplication.main(MainApplication.java:24)
Exception in thread "main"
I will appreciate any help I can get.