So i want to share this post with all this may concern
First of all, i used tomcat6 as MAVEN plugin,
Starting my tomcat6 throws the exception bellow :
org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
and the cause is : java.lang.IllegalStateException : ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
To correct this, just add to your web module pom.xml the flowing yellow color xml tags :
<plugin>
<groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat6-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<contextFile>${conf.tomcat}</contextFile>
<path>/myAppPath</path>
<uriEncoding>UTF-8</uriEncoding>
<useTestClasspath>true</useTestClasspath>
<useSeparateTomcatClassLoader>true</useSeparateTomcatClassLoader>
<classLoaderClass>org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader</classLoaderClass>
</configuration>
<dependencies>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument-tomcat</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</plugin>
Dont forget to add the spring-instrument-tomcat, dependency, otherwise it 'll not work.
This is what Spring authors proposed to you :
Tomcat's default class loader does not support class transformation which is why Spring provides an enhanced implementation that addresses this need. Named
TomcatInstrumentableClassLoader, the loader works
on Tomcat 5.0 and above and can be registered individually for each web application as follows:
-
Tomcat 6.0.x or higher
-
Copy
org.springframework.instrument.tomcat.jarinto $CATALINA_HOME/lib, where $CATALINA_HOME represents the root of the Tomcat installation)
-
Instruct Tomcat to use the custom class loader (instead of the default) by
editing the web application context file:
<Context path="/myWebApp" docBase="/my/webApp/location"> <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/> </Context>
Apache Tomcat 6.0.x (similar to 5.0.x/5.5.x) series supports several context locations:
-
server configuration file - $CATALINA_HOME/conf/server.xml
-
default context configuration - $CATALINA_HOME/conf/context.xml - that affects
all deployed web applications
- per-web application configuration which can be deployed either on the server-side at $CATALINA_HOME/conf/[enginename]/[hostname]/[webapp]-context.xml or embedded inside the web-app archive at META-INF/context.xml
-
server configuration file - $CATALINA_HOME/conf/server.xml
-
Copy
This SPRING solution didn't fill your need if you are using TOMCAT as MAVEN plugin.
Now Configure your spring xml context by adding some XML tags
<?xml version="1.0" encoding="UTF-8"?>
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:oxm="http://www.springframework.org/schema/oxm"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:oxm="http://www.springframework.org/schema/oxm"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd"
>
<!-- HERE ADD MORE CONF AND BEAN DECLARATION-->
@Required and @Autowired, as well as JSR 250's @Resource.
-->
<context:annotation-config />
</
beans>.
Now that your Spring is correctly configured, you can create your SPRING AOP Classes, may be by @Aspect, @PointCut Annotation ...etc.
Hope this 'll help.
<!-- HERE ADD MORE CONF AND BEAN DECLARATION-->
<!--
Activates various annotations to be detected in bean classes: Spring's@Required and @Autowired, as well as JSR 250's @Resource.
-->
<context:annotation-config />
<aop:aspectj-autoproxy />
<context:load-time-weaver/></
beans>.
Now that your Spring is correctly configured, you can create your SPRING AOP Classes, may be by @Aspect, @PointCut Annotation ...etc.
Hope this 'll help.