【问题标题】:AspectJ advice not getting applied in multi maven module and getting NullPointerException in jBoss6AspectJ 建议未在多 maven 模块中应用并在 jBoss6 中获取 NullPointerException
【发布时间】:2015-02-06 11:47:14
【问题描述】:

我正在使用 aspectJ 并在 jBoss6 中遇到问题“nullPointerException”,因为没有应用方面的建议。

我有一个多 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>

“submodule1”的 pom.xml 包含以下条目。

<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;

我正在 jBosss 6 中部署这个多 maven 模块并尝试运行该应用程序。当在代码中使用带有“Field”注释的“value”时,“andy”应该是输出,因为应该使用加载时间编织 (LTW) 应用切面,因为 aspectjweaver-1.8.5 用作实现 LTW 的切面 Java 代理.但这在多 Maven 模块项目中并没有发生,相反,我得到了nullPointerException

任何人都可以帮助我了解是否需要更正定义的切入点或需要做任何特殊的事情来使这个示例工作。

非常感谢。

完整的异常跟踪:

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

【问题讨论】:

  • 当您在 aop.xml 中包含 &lt;weaver options="-verbose -showWeaveInfo"&gt;&lt;include within="*"/&gt;&lt;/weaver&gt; 时,您在控制台上看到了什么?哦,顺便说一句,您的项目引用了三个不同的 AspectJ 版本:编织代理是 1.8.5,根据 POM 的运行时是 1.8.2,AspectJ Maven 插件 1.6 中包含的编译器是 1.7.4。也许你想对齐这些。
  • 嗨 kriegaex .. 非常感谢。我尝试了解决方案,但没有得到结果。我还尝试了wiki.eclipse.org/LTWJboss7 中给出的以下解决方案,以利用 jBoss6 中的加载时间编织,但事实并非如此。我是否需要定义特定的类加载器来加载 aspectJ 代理(aspectweaver)以使其在 jBoss 6 中工作。
  • 我收到错误 - jBoss6 中的 java.lang.ExceptionInInitializerError,这应该与配置问题有关。未应用方面建议时会发生 nullpointerexception。

标签: java aop aspectj jboss6.x aspectj-maven-plugin


【解决方案1】:

我尝试了解决方案,但没有得到结果。

哪种解决方案?我没有提出任何解决方案,只是为编织器提供了一些 aop.xml 设置以产生更多日志输出,以便您可以查看是否有任何建议被编织到您想要的连接点中。

我在 JBoss6 中收到错误 java.lang.ExceptionInInitializerError,这应该与配置问题有关。

不,这与您的建议引发异常有关。引用自己的代码:

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

ExceptionInInitializerError 出现在静态初始化程序中,如JDK documentation 中所述。所以很明显你在静态成员上使用@Field 注释,例如我可以像这样重现异常:

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

你有一个带有初始化器的静态成员。那么为什么在设置字段值时抛出异常呢?

您的其他切入点/建议还有一个问题:

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

这个建议总是返回一个String,所以如果你声明任何不是String类型的字段,比如

@Field
private int id;

你会得到这个 AspectJ 编译错误:incompatible return type applying to field-get(...)

请修复您的方面代码,您的问题显然来自正在应用的方面。您认为它没有被应用的假设是错误的,否则ExceptionInInitializerError 不会发生。

【讨论】:

  • 非常感谢.. kriegaex。我正在使用一个引发运行时异常的 set 方法,其背后的意图是仅在方面,应该设置值,并且不允许在其他地方。在我的示例中,我只读取变量。你说的原因是对的,但我觉得这不是因为方面代码。由于wiki.eclipse.org/LTWJboss7 中提到的 LTW 问题,在 jBoss 6 中无法观察到 AspectJ 日志,我遵循此解决方案。我已经复制了问题中的“完整跟踪”,我觉得 aspectJ weaving 并没有全部应用。在trace中,观察到jboss-aop相关的东西。
  • 添加附加信息..我正在将方面应用到本地单例 EJB 并且使用的应用服务器是 jBoss 6。查看跟踪,你告诉的原因是正确的,我不知道 aspectJ 是否可用对于 EJB。建议没有被应用到静态块中,因此我相信这个错误。是否有 aspectJ 不适用于 EJB 的限制?。
  • 您能否在 GitHub 上以SSCCE 的形式发布一个最小示例项目?每个人都可以用来重现您的问题的东西?
猜你喜欢
  • 2017-09-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
相关资源
最近更新 更多