2011-01-03 6 views
0

私はTapestry 5.2.1で構築されたWebプロジェクトを持っています。私は、このアプリケーションでトレースするために使用していた簡単なロギングの側面を持っています。アプリケーションの一部をリファクタリングして展開しようとするまで、すべてうまくいきました。私は、アプリケーションをデプロイする場合AspectjとタペストリーがあるNoAspectBoundException 5

は、関係なく、私は次の例外を取得に行くことにしようどのページ:コンパイル中

@Aspect 
public class TraceAspect { 

    Logger logger = Logger.getLogger("trace"); 

    public TraceAspect() { 
     logger.setLevel(Level.ALL); 
    } 

    /** 
    * Will log every execution of 
    * <ul> 
    * <li>doEverything</li> 
    * <li>doSomething</li> 
    * </ul> 
    * excluding any test classes. 
    */ 
    @Pointcut("(execution(public void *(..)) || execution(*.new(..))) && !within(*Test) !within(com.aspects.*)") 
    protected void logging() { 
    } 

    @Around("logging()") 
    public void doThing(final ProceedingJoinPoint thisJoinPoint) throws Throwable { 
     final String joinPointName = thisJoinPoint.getThis().getClass().getSimpleName() + "." + thisJoinPoint.getSignature().getName() + "()"; 
     logger.info("Entering [" + joinPointName + "]"); 
     thisJoinPoint.proceed(); 
     logger.info("Leaving [" + joinPointName + "]"); 
    } 
} 

Caused by: java.lang.RuntimeException: Exception assembling root component of page Index: Exception while initializing TraceAspect: org.aspectj.lang.NoAspectBoundException: TraceAspect 
    at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:124) 
    at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.access$000(ComponentAssemblerImpl.java:38) 
    at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:82) 
    at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:79) 
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65) 
    ... 73 more 
Caused by: org.aspectj.lang.NoAspectBoundException: Exception while initializing TraceAspect: org.aspectj.lang.NoAspectBoundException: TraceAspect 
    at TraceAspect.aspectOf(TraceAspect.aj:1) 
    at com.wex.rrt.wrightweb.reportrequest.webapp.pages.Index.initializer(Index.java:3) 
    at com.wex.rrt.wrightweb.reportrequest.webapp.pages.Index.<init>(Index.java) 
    at $Instantiator_12d4da06f67.newInstance($Instantiator_12d4da06f67.java) 
    at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:146) 
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:593) 
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:609) 
    at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:93) 
    ... 77 more 
Caused by: org.aspectj.lang.NoAspectBoundException: TraceAspect 
    at TraceAspect.aspectOf(TraceAspect.aj:1) 
    at AbstractLoggingAspect.<init>(AbstractLoggingAspect.aj:7) 
    at TraceAspect.<init>(TraceAspect.aj:12) 
    at TraceAspect.ajc$postClinit(TraceAspect.aj:1) 
    at TraceAspect.<clinit>(TraceAspect.aj:1) 
    ... 84 more 

私の局面は横ばいとしているが、このではありませんすべて正常に動作します。私は側面をコンパイルするMavenプラグインを使用しています:私はこのオフで働いてきたし、上の一日の大半をどこでも得ていない

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>aspectj-maven-plugin</artifactId> 
    <version>1.3</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <complianceLevel>1.6</complianceLevel> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>compile</goal> 
       <goal>test-compile</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

。私はNoAspectBoundExceptionを正確に理解していません。コンパイラがそのアスペクトを完全に織り込んでいないように見えるでしょうか?私はAspectJに新しいですが、これはTapestry5と関係があるのだろうかと思います。しかし私はTap5がAOPを使っていることを知っている。

私が言ったように、私は別のタペストリーカスタムライブラリにいくつか移ってから今は自分のWebアプリケーションの依存関係になるまでこれはうまくいきました。

答えて

0

私たちはAOPの競合を起こしていると思います。 AspectJがコードに何かをしてから、Tapestryが来て、コンポーネントクラスの既存のClassコンストラクタを無視して独自のクラスコンストラクタを追加するなど、何か他のことを行います。私は一緒に働く2つを得る方法がわかりません。

4

ポイントカットの制限のないexecution(*.new(..))部分のために、アスペクトのコンストラクタにアドバイスしています。アスペクトがインスタンス化されるとき、アドバイスにはアスペクトのインスタンスがないため、エラーになります。これを修正するには、!within([package of].TraceAspect)を追加する必要があります。

+0

上記の私のところを更新しました。私は '!within(com.aspects。*)を追加しましたが、私はページにアクセスしようとすると同じ例外が発生します。 – Casey

+0

私はコンポーネントライブラリのパッケージを除外しようとしましたが、上記と同じ例外が発生しました。 – Casey

+0

私はTapestryについてよく分かりませんが、Tapestryコンポーネントを読み込むクラスローダーにそのアスペクトが表示されないのでしょうか? – ramnivas

関連する問題