0

関連モジュールの次のセットアップを含むマルチモジュールmavenプロジェクトがあります。

    • コモンズアプリ
      • バックエンド
      • フロントエンド

モジュール フロントエンドは war に組み込まれ、Tomcat にデプロイされます。モジュール バックエンドは、jar としてパッケージ化された標準の Java アプリケーションです。私が達成しようとしているのは、(フロントエンドとバックエンドの両方で) 次の側面を機能させることだけです。

@Aspect
public class VirtuosoSequenceSanitizerAspect {

    @Around("execution(* cz.cuni.mff.xrg.odcs.commons.app.facade.*Facade.save(..))")
    public Object sanitizeSequenceOnSave(ProceedingJoinPoint pjp) throws Throwable {
        // ... some code
    }

    @Before("execution(* org.eclipse.persistence.internal.descriptors.ObjectBuilder.assignSequenceNumber(java.lang.Object, org.eclipse.persistence.internal.sessions.AbstractSession))")
    public void rememberAssignSequence(JoinPoint jp) {
        // .. some code
    }
}

このアスペクトは、次のように commons-app-context.xml で Spring Bean としてセットアップされます。

<!-- enable aspects -->
<aop:aspectj-autoproxy />

<!-- Aspect for fixing corrupted database sequences. -->
<bean id="sequenceAspect" class="cz.cuni.mff.xrg.odcs.commons.app.dao.VirtuosoSequenceSanitizerAspect" />

このセットアップでは、around アドバイスは適切に機能していますが、before アドバイスはトリガーされません。私が見つけたものから、サードパーティのライブラリに織り込むには、aspectj-maven-plugin を使用する必要があると結論付けました。そこで、次のように commons-app モジュールの pom.xml にプラグインを追加しました。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.5</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <complianceLevel>1.7</complianceLevel>
        <showWeaveInfo>true</showWeaveInfo>
        <verbose>true</verbose>
        <!-- Weave EclipseLink dependency -->
        <weaveDependencies>
            <weaveDependency>
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>eclipselink</artifactId>
            </weaveDependency>
        </weaveDependencies>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
    </dependencies>
</plugin>

このプラグインを使用すると、アドバイスが機能する前に、周りのアドバイスが機能しなくなります。これを正しく設定するのに苦労しているので、両方のアドバイスが期待どおりに機能しますが、役に立ちません。commons-appモジュールのログを構築するとき、両方のアドバイスが織り込まれていると言います:

--- aspectj-maven-plugin:1.5:compile (default) @ commons-app ---
Join point 'method-execution(void cz.cuni.mff.xrg.odcs.commons.app.facade.ScheduleFacade.save(cz.cuni.mff.xrg.odcs.commons.app.scheduling.Schedule))' in Type 'cz.cuni.mff.xrg.odcs.commons.app.facade.ScheduleFacade' (ScheduleFacade.java:127) advised by around advice from 'cz.cuni.mff.xrg.odcs.commons.app.dao.VirtuosoSequenceSanitizerAspect' (VirtuosoSequenceSanitizerAspect.java:90)
Join point 'method-execution(void cz.cuni.mff.xrg.odcs.commons.app.facade.DPUFacade.save(cz.cuni.mff.xrg.odcs.commons.app.dpu.DPUTemplateRecord))' in Type 'cz.cuni.mff.xrg.odcs.commons.app.facade.DPUFacade' (DPUFacade.java:123) advised by around advice from 'cz.cuni.mff.xrg.odcs.commons.app.dao.VirtuosoSequenceSanitizerAspect' (VirtuosoSequenceSanitizerAspect.java:90)
Join point 'method-execution(void cz.cuni.mff.xrg.odcs.commons.app.facade.DPUFacade.save(cz.cuni.mff.xrg.odcs.commons.app.dpu.DPUInstanceRecord))' in Type 'cz.cuni.mff.xrg.odcs.commons.app.facade.DPUFacade' (DPUFacade.java:185) advised by around advice from 'cz.cuni.mff.xrg.odcs.commons.app.dao.VirtuosoSequenceSanitizerAspect' (VirtuosoSequenceSanitizerAspect.java:90)
Join point 'method-execution(void cz.cuni.mff.xrg.odcs.commons.app.facade.PipelineFacade.save(cz.cuni.mff.xrg.odcs.commons.app.pipeline.Pipeline))' in Type 'cz.cuni.mff.xrg.odcs.commons.app.facade.PipelineFacade' (PipelineFacade.java:134) advised by around advice from 'cz.cuni.mff.xrg.odcs.commons.app.dao.VirtuosoSequenceSanitizerAspect' (VirtuosoSequenceSanitizerAspect.java:90)
...

ただし、フロントエンドを Tomcat にデプロイすると、before アドバイスのみがトリガーされます。常に両方のアドバイスを織り込むようにmavenを構成するにはどうすればよいですか?

4

1 に答える 1