Совет AspectJ не применяется в модуле multi maven и получает исключение NullPointerException в jBoss6

Я использую аспект J и сталкиваюсь с проблемой «nullPointerException» в jBoss6, поскольку советы аспекта не применяются.

У меня есть проект с несколькими модулями maven, и каждый модуль отделен, как указано ниже.

"maven - submodule1":

Ниже FieldAspect определен в подмодуле maven — «submodule1».

@Aspect
public abstract class FieldAspect {
@Pointcut
public abstract void getField();

@Pointcut
public abstract void setField();

@Around("getField()")
public String getFieldValue() {
return "Andy";
}
@Around("setField()")
public void setFieldValue() {
throw new RuntimeException();
}
}

Связанный aop.xml определен в том же подмодуле maven - "submodule1".

<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
<aspects>
<concrete-aspect name="main.java.aop.field.MyFieldAspect" extends="main.java.aop.field.FieldAspect">
<pointcut name="getField" expression="get(@main.java.aop.field.Field * *)" />
<pointcut name="setField" expression="set(@main.java.aop.field.Field * *)" />
</concrete-aspect>
</aspects>
</aspectj>

pom.xml из "submodule1" содержит следующие записи.

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.2</version>
</dependency>

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

"maven - submodule2":

Аннотация описана, как показано ниже, в подмодуле maven, скажем, «submodule2».

@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Field {
}

"maven - submodule3":

Строковое поле с приведенной выше аннотацией вызывается в описании другого подмодуля maven, скажем, «submodule3».

@Field
private String value;

Я развертываю этот модуль multi maven в jBosss 6 и пытаюсь запустить приложение. Когда в коде используется «значение», аннотированное «Поле», «andy» должно быть выводом, поскольку аспект должен быть применен с использованием переплетения времени загрузки (LTW), поскольку aspectjweaver-1.8.5 используется в качестве агента Java для реализации LTW. Но этого не происходит в проекте с несколькими модулями maven, и вместо этого я получаю nullPointerException.

Может ли кто-нибудь помочь мне понять, нужно ли исправить определение pointcut ИЛИ какие-либо специальные вещи, необходимые для того, чтобы этот пример работал.

Большое спасибо.

Полная трассировка исключений:

java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method) [:1.7.0_67]
at java.lang.Class.forName(Class.java:270) [:1.7.0_67]
at org.jboss.ejb3.jndi.deployers.metadata.SessionBeanTypeWrapper.<init>(SessionBeanTypeWrapper.java:62) [:0.1.7]
at sun.reflect.GeneratedConstructorAccessor171.newInstance(Unknown Source) [:1.7.0_67]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [:1.7.0_67]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [:1.7.0_67]
at org.jboss.reflect.plugins.introspection.ReflectionUtils.newInstance(ReflectionUtils.java:154) [jboss-reflect.jar:2.2.1.SP1]
at org.jboss.reflect.plugins.introspection.ReflectConstructorInfoImpl.newInstance(ReflectConstructorInfoImpl.java:102) [jboss-reflect.jar:2.2.1.SP1]
at org.jboss.joinpoint.plugins.BasicConstructorJoinPoint.dispatch(BasicConstructorJoinPoint.java:81) [jboss-reflect.jar:2.2.1.SP1]
at org.jboss.aop.microcontainer.integration.AOPConstructorJoinpoint.dispatch(AOPConstructorJoinpoint.java:109) [jboss-aop-mc-int.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:257) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:125) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.InstantiateAction.installActionInternal(InstantiateAction.java:67) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:894) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:641) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:182) [:2.2.2.GA]
at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:58) [:2.2.2.GA]
at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:63) [:2.2.2.GA]
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:55) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:179) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1832) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1550) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1571) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1603) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1491) [:2.2.2.GA]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.2.GA]
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.2.GA]
at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6.1.0.Final]
at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContext.java:143) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.deploy(ProfileDeployAction.java:151) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.installActionInternal(ProfileDeployAction.java:94) [:0.2.2]
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-kernel.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.profileservice.dependency.ProfileActivationWrapper$BasicProfileActivation.start(ProfileActivationWrapper.java:190) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileActivationWrapper.start(ProfileActivationWrapper.java:87) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileActivationService.activateProfile(ProfileActivationService.java:215) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileActivationService.activate(ProfileActivationService.java:159) [:0.2.2]
at org.jboss.profileservice.bootstrap.AbstractProfileServiceBootstrap.activate(AbstractProfileServiceBootstrap.java:112) [:0.2.2]
at org.jboss.profileservice.resolver.BasicResolverFactory$ProfileResolverFacade.deploy(BasicResolverFactory.java:87) [:0.2.2]
at org.jboss.profileservice.bootstrap.AbstractProfileServiceBootstrap.start(AbstractProfileServiceBootstrap.java:91) [:0.2.2]
at org.jboss.system.server.profileservice.bootstrap.BasicProfileServiceBootstrap.start(BasicProfileServiceBootstrap.java:132) [:6.1.0.Final]
at org.jboss.system.server.profileservice.bootstrap.BasicProfileServiceBootstrap.start(BasicProfileServiceBootstrap.java:56) [:6.1.0.Final]
at org.jboss.bootstrap.impl.base.server.AbstractServer.startBootstraps(AbstractServer.java:827) [jboss-bootstrap-impl-base.jar:2.1.0-alpha-6]
at org.jboss.bootstrap.impl.base.server.AbstractServer$StartServerTask.run(AbstractServer.java:417) [jboss-bootstrap-impl-base.jar:2.1.0-alpha-6]
at java.lang.Thread.run(Thread.java:745) [:1.7.0_67]
Caused by: java.lang.NullPointerException

person sridhar    schedule 06.02.2015    source источник
comment
Что вы видите в консоли, когда включаете <weaver options="-verbose -showWeaveInfo"><include within="*"/></weaver> в свой aop.xml? О, и, кстати, ваш проект ссылается на три разные версии AspectJ: агент ткачества — 1.8.5, среда выполнения в соответствии с POM — 1.8.2, а компилятор, содержащийся в подключаемом модуле AspectJ Maven 1.6, — 1.7.4. Может быть, вы хотите выровнять их.   -  person kriegaex    schedule 07.02.2015
comment
привет kriegaex .. большое спасибо. Я попробовал решение, но не получил результата. Я также попробовал приведенное ниже решение, приведенное в wiki.eclipse.org/LTWJboss7, для использования переплетения времени загрузки в jBoss6. но это не так. Нужно ли мне определять определенные загрузчики классов для загрузки агента аспекта J (aspectweaver), чтобы он работал в jBoss 6.   -  person sridhar    schedule 09.02.2015
comment
Я получаю сообщение об ошибке - java.lang.ExceptionInInitializerError в jBoss6, и это должно быть связано с проблемой конфигурации. Исключение nullpointerexception возникает, поскольку советы по аспектам не применяются.   -  person sridhar    schedule 09.02.2015


Ответы (1)


Я попробовал решение, но не получил результата.

Какое решение? Я не предлагал никакого решения, просто некоторые настройки aop.xml для weaver, чтобы производить больше выходных данных журнала, чтобы вы могли видеть, вплетаются ли какие-либо советы в нужные точки соединения.

Я получаю сообщение об ошибке java.lang.ExceptionInInitializerError в JBoss6, и это должно быть связано с проблемой конфигурации.

Нет, это связано с вашим советом, создающим исключение. Цитирование собственного кода:

@Around("setField()")
public void setFieldValue() {
    throw new RuntimeException();
}

ExceptionInInitializerError возникает внутри статического инициализатора, как описано в документации JDK. . Итак, очевидно, вы используете аннотацию @Field для статического члена, например. Я могу воспроизвести исключение следующим образом:

@Field
private static String someStaticMember = "dummy value";

Там у вас есть статический член с инициализатором. Так какого черта вы выбрасываете исключение всякий раз, когда устанавливается значение поля?

И еще одна проблема с вашим другим pointcut/советом:

@Around("getField()")
public String getFieldValue() {
    return "Andy";
}

Этот совет всегда возвращает String, поэтому, если вы объявите какие-либо поля, которые не относятся к типу String, такие как

@Field
private int id;

вы получите эту ошибку компиляции AspectJ: incompatible return type applying to field-get(...)

Пожалуйста, исправьте свой код аспекта, ваши проблемы явно связаны с применяемым аспектом. Ваше предположение, что оно не применяется, неверно, иначе ExceptionInInitializerError не произошло бы.

person kriegaex    schedule 09.02.2015
comment
Добавление дополнительной информации. Я применяю аспект к локальному одноэлементному EJB, а используемый сервер приложений - jBoss 6. Глядя на трассировку, причина, по которой вы сказали, верна, и я не знаю, можно ли использовать аспект J для EJB. Совет не применяется к статическому блоку и, следовательно, ошибка, которую я считаю. Есть ли ограничение, что аспект J неприменим для EJB? - person sridhar; 11.02.2015
comment
Не могли бы вы опубликовать минимальный образец проекта как SSCCE на GitHub? Что-то, что каждый может использовать, чтобы воспроизвести вашу проблему? - person kriegaex; 14.02.2015