Совет AspectJ не выполняется - PullRequest
0 голосов
/ 25 мая 2019

Я искал Baeldung и MKyong среди других сайтов.Все выглядит хорошо, но мой совет не выполняется.Я где-то читал о наличии нескольких точечных копий в одном аспекте, поэтому я создал отдельные аспекты для каждой точечной резки, но пока безрезультатно.Я пытаюсь выполнить ткачество во время загрузки.

Один из моих классов аспектов

@Aspect
public class AuditUpdateAspect {
    @Before("execution(* com.kable.newsstand.kdsejb.session.KdsSessionUpdate.update*(..))")
    public void beforeUpdate(JoinPoint jp) {
        System.out.println("Update");
        Object o = jp.getArgs()[0];
        if (o instanceof Auditable) {
            Auditable auditable = (Auditable)o;
            auditable.setOsUserName(AuditHelper.getAuditName());
            System.out.println("Done");
        }
    }
}

Код клиента

// SessionHelper is a helper class with static methods to get stateless EJBs from JNDI
// getUpdate() returns an instance of KdsSessionUpdateBean which implements the KdsSessionUpdate interface
// updateIssue(Issue issue) is a method in KdsSessionUpdateBean
SessionHelper.getUpdate().updateIssue(issue);

Ткачество происходит, как вы можете видеть вследующее: вот запуск программы

[AppClassLoader@4d885088] info AspectJ Weaver Version 1.8.2 built on Thursday Aug 14, 2014 at 21:45:02 GMT
[AppClassLoader@4d885088] info register classloader sun.misc.Launcher$AppClassLoader@4d885088
[AppClassLoader@4d885088] info using configuration /C:/Users/bray/eclipse-workspaces/combined-workspace/audit/target/classes/META-INF/aop.xml
[AppClassLoader@4d885088] info register aspect com.kable.newsstand.knet.audit.AuditCreateAspect
[AppClassLoader@4d885088] info register aspect com.kable.newsstand.knet.audit.AuditRemoveAspect
[AppClassLoader@4d885088] info register aspect com.kable.newsstand.knet.audit.AuditUpdateAspect
[MethodUtil@6b429a7d] info AspectJ Weaver Version 1.8.2 built on Thursday Aug 14, 2014 at 21:45:02 GMT
[MethodUtil@6b429a7d] info register classloader sun.reflect.misc.MethodUtil@6b429a7d
[MethodUtil@6b429a7d] info using configuration /C:/Users/bray/eclipse-workspaces/combined-workspace/audit/target/classes/META-INF/aop.xml
[MethodUtil@6b429a7d] info register aspect com.kable.newsstand.knet.audit.AuditCreateAspect
[MethodUtil@6b429a7d] info register aspect com.kable.newsstand.knet.audit.AuditRemoveAspect
[MethodUtil@6b429a7d] info register aspect com.kable.newsstand.knet.audit.AuditUpdateAspect
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
[AppClassLoader@4d885088] warning javax.* types are not being woven because the weaver option '-Xset:weaveJavaxPackages=true' has not been specified

Вот вызов SessionHelper.getUpdate().updateIssue(issue);.Это сокращенно, так как оно было слишком длинным для поста.

[AppClassLoader@305f387c] weaveinfo Join point 'method-execution(void com.kable.newsstand.kdsejb.session.KdsSessionUpdateBean.updatePublisherRemitTransRemitIdById(java.lang.Integer, java.lang.Integer))' in Type 'com.kable.newsstand.kdsejb.session.KdsSessionUpdateBean' (KdsSessionUpdateBean.java:64) advised by before advice from 'com.kable.newsstand.knet.audit.AuditUpdateAspect' (AuditUpdateAspect.java)
[AppClassLoader@305f387c] weaveinfo Join point 'method-execution(void com.kable.newsstand.kdsejb.session.KdsSessionUpdateBean.updateIssue(com.kable.newsstand.kdsejb.entity.Issue))' in Type 'com.kable.newsstand.kdsejb.session.KdsSessionUpdateBean' (KdsSessionUpdateBean.java:641) advised by before advice from 'com.kable.newsstand.knet.audit.AuditUpdateAspect' (AuditUpdateAspect.java)

Таким образом, создается впечатление, что ткачество во время загрузки происходит, но два System.out.println("Update"); и System.out.println("Done"); не выполняются.

Редактировать: включая aop.xml по запросу.

<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
    <aspects>
        <aspect name="com.kable.newsstand.knet.audit.AuditCreateAspect"/>
        <aspect name="com.kable.newsstand.knet.audit.AuditRemoveAspect"/>
        <aspect name="com.kable.newsstand.knet.audit.AuditUpdateAspect"/>
        <weaver options="-verbose -showWeaveInfo">
            <include within="com.kable.newsstand.kdsejb.session.*"/>
        </weaver>
    </aspects>
</aspectj>

Редактировать: тестовый код для MCVE

public AuditTestApp() {
    WholesalerGroup wholesalerGroup = new WholesalerGroup();
    wholesalerGroup.setCorporationGroupId(new Integer(1000));
    wholesalerGroup.setDescription("Test Wholesaler Group For Auditing");
    wholesalerGroup.setOldCode("OLD_CODE");
    System.out.println(String.format("Audit before create (%s)", wholesalerGroup.getOsUserName()));
    WholesalerGroup addedWholesalerGroup = SessionHelper.getCreate().createWholesalerGroup(wholesalerGroup);
    System.out.println(String.format("Audit after create (%s)", addedWholesalerGroup.getOsUserName()));
    addedWholesalerGroup.setCorporationGroupId(new Integer(2000));
    SessionHelper.getUpdate().updateWholesalerGroup(addedWholesalerGroup);
    System.out.println(String.format("Audit after update (%s)", addedWholesalerGroup.getOsUserName()));
    SessionHelper.getRemove().removeWholesalerGroup(addedWholesalerGroup);
    System.out.println("Finishing");
    System.exit(0);
}

Редактировать: вывод после замены EJB на простой код

[AppClassLoader@3b756db3] info AspectJ Weaver Version 1.8.2 built on Thursday Aug 14, 2014 at 21:45:02 GMT
[AppClassLoader@3b756db3] info register classloader sun.misc.Launcher$AppClassLoader@3b756db3
[AppClassLoader@3b756db3] info using configuration /C:/Users/bray/eclipse-workspaces/combined-workspace/audit/target/classes/META-INF/aop.xml
[AppClassLoader@3b756db3] info register aspect com.kable.newsstand.knet.audit.AuditCreateAspect
[AppClassLoader@3b756db3] info register aspect com.kable.newsstand.knet.audit.AuditRemoveAspect
[AppClassLoader@3b756db3] info register aspect com.kable.newsstand.knet.audit.AuditUpdateAspect
Audit before create (null)
[AppClassLoader@3b756db3] weaveinfo Join point 'method-execution(com.kable.newsstand.kdsejb.entity.WholesalerGroup com.kable.newsstand.kdsejb.session.KdsSessionCreateBean.createWholesalerGroup(com.kable.newsstand.kdsejb.entity.WholesalerGroup))' in Type 'com.kable.newsstand.kdsejb.session.KdsSessionCreateBean' (KdsSessionCreateBean.java:8) advised by before advice from 'com.kable.newsstand.knet.audit.AuditCreateAspect' (AuditCreateAspect.java)
[AppClassLoader@3b756db3] weaveinfo Join point 'method-execution(void com.kable.newsstand.kdsejb.session.KdsSessionRemoveBean.removeWholesalerGroup(com.kable.newsstand.kdsejb.entity.WholesalerGroup))' in Type 'com.kable.newsstand.kdsejb.session.KdsSessionRemoveBean' (KdsSessionRemoveBean.java:8) advised by before advice from 'com.kable.newsstand.knet.audit.AuditRemoveAspect' (AuditRemoveAspect.java)
[AppClassLoader@3b756db3] weaveinfo Join point 'method-execution(void com.kable.newsstand.kdsejb.session.KdsSessionUpdateBean.updateWholesalerGroup(com.kable.newsstand.kdsejb.entity.WholesalerGroup))' in Type 'com.kable.newsstand.kdsejb.session.KdsSessionUpdateBean' (KdsSessionUpdateBean.java:8) advised by before advice from 'com.kable.newsstand.knet.audit.AuditUpdateAspect' (AuditUpdateAspect.java)
Create
Done
Audit after create (:BRay:knc3940:192.168.1.7)
Update
Done
Audit after update (:BRay:knc3940:192.168.1.7)
Remove
Done
Finishing
...