If no debug statements exist in the WLS code or in the application, the only way is to weave the classes with some AOP product.
So here I go:
download AspectJ 1.7 http://www.eclipse.org/aspectj/
download WLS 12 http://www.oracle.com/technetwork/middleware/ias/downloads/wls-main-097127.html
about load-time weaving with a premain function using javaagent
http://www.eclipse.org/aspectj/doc/next/devguide/ltw-configuration.html
In setDomainEnv there is a property JAVA_PROFILE
I set it to
-javaagent:C:/apps/aspectj/lib/aspectjweaver.jar
after checking the WLS classpath, I see that the . directory (C:\Oracle\Middleware\user_projects\domains\base_domain) is in the classpath (because I have a System Variable CLASSPATH=.)
I create then a C:\Oracle\Middleware\user_projects\domains\base_domain\META-INF\aop.xml file where I define an INLINE ASPECT (no need to precompile separately with ajc):
Here is the aspect, to be compiled and put in the classpath (you will need to add the AspectJ jars to the Eclipse project)
package com.pierre.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public abstract class AbstractAspect { @Before("execution(* *(..))") public void before(JoinPoint jp) { System.out.println("CIAOOOOO"); } @Pointcut("execution(public * *(..))") public void anyPublicOperation() { System.out.println("anyPublicOperation"); } }
and this is the aop.xml:
<aspectj> <aspects> <!-- define a concrete aspect inline --> <concrete-aspect name="com.pierre.aop.MyTracing" extends="com.pierre.aop.AbstractAspect"> <!--pointcut name="tracingScope" expression="within(com.pierre.*)"/--> </concrete-aspect> <!-- Of the set of aspects declared to the weaver use aspects matching the type pattern "com.pierre..*" for weaving. --> <include within="com.pierre..*"/> </aspects> <weaver options="-verbose"> <!-- Weave types that are within the javax.* or org.aspectj.* packages. Also weave all types in the foo package that do not have the @NoWeave annotation. --> <include within="com.pierre.*"/> <!-- Dump all types within the "somepack" package, both before are after they are woven, to the "./_ajdump" folder on disk (for diagnostic purposes) --> <dump within="com.pierre.*" /> </weaver> </aspectj>
for some reasons, it doesn't work....
I can see in the stdout:
[JspClassLoader@72d4e5] info AspectJ Weaver Version 1.7.0.M1 built on Friday Dec 16, 2011 at 16:56:09 GMT
[JspClassLoader@72d4e5] info register classloader weblogic.servlet.jsp.JspClassLoader@72d4e5
[JspClassLoader@72d4e5] info using configuration /C:/Oracle/Middleware/user_projects/domains/base_domain/META-INF/aop.xml
[JspClassLoader@72d4e5] info define aspect com.pierre.aop.MyTracing
[ChangeAwareClassLoader@f45732] info AspectJ Weaver Version 1.7.0.M1 built on Friday Dec 16, 2011 at 16:56:09 GMT
[ChangeAwareClassLoader@f45732] info register classloader weblogic.utils.classloaders.ChangeAwareClassLoader@f45732
[ChangeAwareClassLoader@f45732] info using configuration /C:/Oracle/Middleware/user_projects/domains/base_domain/META-INF/aop.xml
[ChangeAwareClassLoader@f45732] info define aspect com.pierre.aop.MyTracing
My JSP does:
AOPCUT aopcut = new AOPCUT();
aopcut.hello("pierre");
where the AOPCUT class is
package com.pierre.aop;
public class AOPCUT {
public void hello(String message) {
System.out.println("Hello " + message);
}
}
and the interceptor gets called....
1 comment:
Hello,
Weblogic Server has a subsystem named WLDF, that allows you to define so called application-scoped instrumentation: you define AspectJ pointcuts and use predifined actions like dump Stack, dump Method invocation params, etc.
Doc link: http://docs.oracle.com/cd/E17904_01/web.1111/e13714/deploying_app_modules.htm
Regards,
Dmitry
Post a Comment