<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">
<div>
<table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
<tbody>
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
<tbody>
<tr>
<td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
<h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
<!-- To have a header image/logo replace the name below with your img tag -->
<!-- Email clients will render the images when the message is read so any image -->
<!-- must be made available on a public server, so that all recipients can load the image. -->
<a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
Constructor Advice
</h3>
<span style="margin-bottom: 10px;">
created by <a href="http://community.jboss.org/people/codefox">David Tucker</a> in <i>JBoss AOP</i> - <a href="http://community.jboss.org/message/626443#626443">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p>I've been writing AOP against actions in my ESB pipeline (as we all now know <span> :) </span> ) and while writing pointcuts against the process methods works fine, I have a need to have advice around the constructors of the actions so that I can populate some metadata.  The problem is that none of the pointcuts I've written seem to do anything.  I've tried various things since it seemed that the ESB might be instantiating the actions via reflection but that didn't seem to work either.  When I wrote advice against the class ActionProcessingPipeline just to see if it would grab any constructor, I got no output from my constructor advice.  Here is my current code:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>jboss-aop.xml:</p><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag"><pointcut expr="execution(public com.amentra.*-></span>new(..))<span class="jive-xml-quote"> name=</span>NewInstancePC"/>
<span class="jive-xml-tag"><aspect name="ConstructorAdvice" class="com.amentra.aop.advice.ConstructorAdvice" scope="PER_VM"/></span>
<span class="jive-xml-tag"><bind pointcut="NewInstancePC"></span> 
        <span class="jive-xml-tag"><before aspect="ConstructorAdvice" name="interceptConstructor"/></span>
<span class="jive-xml-tag"></bind></span></code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>I've also tried doing this via reflection though and extended the appropriate class in my ConstructorAdvice and that also didn't result in anything.  The reflection I tried this way:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>jboss-aop.xml:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag"><pointcut expr="call(* java.lang.reflect.Constructor-></span>newInstance())<span class="jive-xml-quote"> name=</span>NewInstancePC<span class="jive-xml-quote">/>
<span class="jive-xml-tag"><pointcut expr="call(* java.lang.Class-></span>newInstance())</span> name=<span class="jive-xml-quote">ClassNewInstancePC</span>/>
<span class="jive-xml-tag"><aspect name="ConstructorAdvice" class="com.amentra.aop.advice.ConstructorAdvice" scope="PER_VM"/></span>
<span class="jive-xml-tag"><bind pointcut="NewInstancePC OR ClassNewInstancePC"></span>
        <span class="jive-xml-tag"><before aspect="ConstructorAdvice" name="interceptConstructor"/></span>
<span class="jive-xml-tag"></bind></span></code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>ConstructorAdvice.java:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">
package com.amentra.aop.advice;
import java.lang.reflect.Constructor;
import org.apache.log4j.Logger;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.reflection.ReflectionAspect;
public class ConstructorAdvice extends ReflectionAspect {
    Logger LOG = Logger.getLogger(this.getClass());
       
    @Override
    protected Object interceptConstructor(Invocation invocation, Constructor<?> constructor, Object[] args) throws Throwable
    {
        LOG.info("****************CONSTRUCTOR ADVICE****************");
       
        return super.interceptConstructor(invocation, constructor, args);
    }
}</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Thanks for any help on getting AOP to recognize my constructors.</p></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/626443#626443">going to Community</a></p>
<p style="margin: 0;">Start a new discussion in JBoss AOP at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2027">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>