2015-02-06 20 views
0

我使用aspectJ和jBoss6面臨問題「nullPointerException」作爲方面的建議沒有得到應用。AspectJ的建議沒有得到應用多Maven模塊和獲取NullPointerException在jBoss6

我有一個多maven模塊項目,每個模塊被分離出來,如下所述。

「行家 - submodule1」:

下面FieldAspect在行家子模塊定義 - 「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>  

「行家 - submodule2」:

的註釋被描述爲一個行家子模塊中所示的下面 - 說 「submodule2」。

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

「行家 - submodule3」:

與上文註釋的字符串字段被稱爲在另一個行家子模塊描述 - 說 「submodule3」。

@Field 
private String value; 

我在jBosss 6中部署這個多重maven模塊並嘗試運行該應用程序。當在代碼中使用「字段」註解的「值」時,由於被用作實現LTW的aspectj java代理,因此應使用加載時織入(LTW)應用方面應使用的「andy」作爲輸出。但是,這不是在多個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 
+0

當你在你的* aop.xml中包含''時,你在控制檯上看到了什麼?哦,順便說一下,你的項目引用了三種不同的AspectJ版本:編織代理是1.8.5,根據POM的運行時間是1.8.2,AspectJ Maven Plugin 1.6中的編譯器是1.7.4。也許你想調整這些。 – kriegaex 2015-02-07 12:32:58

+0

嗨kriegaex ..非常感謝。我試過解決方案,但沒有得到結果。我也嘗試了http://wiki.eclipse.org/LTWJboss7中給出的下面的解決方案來利用jBoss6中的加載時間編織,但事實並非如此。我是否需要定義特定的類加載器來加載aspectJ代理(aspectweaver)才能在jBoss 6中工作。 – sridhar 2015-02-09 11:22:47

+0

我在jBoss6中收到錯誤 - java.lang.ExceptionInInitializerError,這應該與配置問題有關。由於方面建議不適用,因此發生nullpointerexception。 – sridhar 2015-02-09 11:31:59

回答

0

I tried the solution but didn't get the result.

哪些解決方案?我沒有建議任何解決方案,只需要一些aop.xml設置織工來產生更多的日誌輸出,所以你可以看看是否有任何建議被編織到你想要的連接點。

I am getting error java.lang.ExceptionInInitializerError in JBoss6 and this should be related to configuration issue.

不,它與您的建議引發異常有關。引述自己的代碼:

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

ExceptionInInitializerErrorJDK 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(...)

請修復你的方面代碼,你的問題清楚c從應用的角度來看。你的假設,它不適用是錯誤的,否則ExceptionInInitializerError不會發生。

+0

非常感謝.. kriegaex。我正在使用一個拋出運行時異常的設置方法,並且背後的意圖是隻有在方面,值應該被設置,並且不允許在其他地方使用。在我的例子中,我只讀取變量。你說的理由是對的,但我覺得這不是因爲方面代碼。由於http://wiki.eclipse.org/LTWJboss7中提到的LTW問題,我無法在jBoss 6中觀察到AspectJ日誌,我遵循此解決方案。我已經在問題中複製了「完整跟蹤」,並且我認爲aspectJ編織並非全部適用。在跟蹤中,觀察到jboss-aop相關的東西。 – sridhar 2015-02-10 11:40:50

+0

添加附加信息..我將aspect應用於本地singleton EJB,並且所用的應用服務器是jBoss 6.查看跟蹤,您告知的原因是正確的,我不知道aspectJ是否可用於EJB。建議沒有被應用到靜態塊中,因此,我相信這個錯誤。 aspectJ不適用於EJB是否有限制? – sridhar 2015-02-11 09:35:00

+0

您可以在GitHub上發佈一個最小樣本項目作爲[SSCCE](http://sscce.org/)嗎?每個人都可以用來重現你的問題? – kriegaex 2015-02-14 12:22:57