Spring 2.5 アプリでロード時ウィービングからコンパイル時ウィービングに変更しようとしています。
これを行うには、次のことを行いました。
私のantビルドファイルに、追加しました
<path id="aspectPath"> <pathelement location="${lib.home}/spring-aspects.jar"/> </path> <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"> <classpath> <pathelement location="${aspectj.home}/aspectjtools.jar"/> </classpath> </taskdef>
javac コンパイラへの参照を次のように置き換えました。
<iajc sourceroots="${src.home}"
destdir="${build.home}/WEB-INF/classes"
classpathRef="compile.classpath"
aspectPathRef="compile.classpath"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
encoding="cp1252"
source="1.6"
target="1.6"
showWeaveInfo="${compile.debug}"/>
applicationContext.xml で、次に置き換えました
<context:load-time-weaver/>
と
<context:spring-configured/>
私のアプリ コンテキスト ファイル、ところで、その他の構成設定には、次のものが含まれます。
<tx:annotation-driven/>
<context:component-scan base-package="com.domain.somepackage"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
context.xml ファイルで、loader タグから以下を削除しました
loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"
ビルド スクリプトを実行すると、エラーなしでコンパイルされます。
ただし、この警告が表示されます。
[iajc] warning at <Unknown>::0 Found @DeclareAnnotation while current release
does not support it (see 'org.aspectj.weaver.bcel.AtAjAttributes')
上部に、この警告が下部にあります。
[iajc] warning at C:\server-
lib\aspectjtools.jar!org\aspectj\ajdt\internal\compiler\
CompilerAdapter.class:121::0 advice defined in
org.aspectj.ajdt.internal.compiler.CompilerAdapter has not been
applied [Xlint:adviceDidNotMatch]
ロギングのほとんどは次のようになります。
[iajc] weaveinfo Join point 'method-execution(void com.kjconfigurator.upgra
de.Upgrade1_07HelperImp.addServiceParticipation(com.kjconfigurator.core.domain.U
ser, com.kjconfigurator.core.domain.ServiceAccount))' in Type 'com.kjconfigurato
r.upgrade.Upgrade1_07HelperImp' (Upgrade1_07HelperImp.java:196) advised by after
Returning advice from 'org.springframework.transaction.aspectj.AnnotationTransac
tionAspect' (spring-aspects.jar!AbstractTransactionAspect.class:77(from Abstract
TransactionAspect.aj))
tomcat lib から tomcatspringweaver jar を削除しました。私はaspectj1.7を使用しています
アプリを起動すると、dao クラスがサービス クラスに注入されているときに、org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:104) に NPE があることを示すエラーが表示されます。
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested
PropertyAccessExceptions (1) are: PropertyAccessException 1:
org.springframework.beans.MethodInvocationException: Property 'dao' threw exception;
nested exception is java.lang.NullPointerException
Dao クラスは、次のような AbstractJpaDao クラスを拡張します。
public abstract class AbstractJpaDao<T> {
private static Logger log = Logger.getLogger(AbstractJpaDao.class.getName());
private EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this. entityManager = entityManager;
}
...
}
これらすべてが最初にセットアップされてから長い時間が経ちましたが、すべての構成がどのように機能したか覚えていません。また、クラスローダーや AspectJ についてもよく理解していません。しかし、何かが正しく起こっていません。おそらく何らかの理由で Entitymanager が注入されていません。
質問。
- 何が原因でしょうか?
- 本当に
<context:spring-configured/>
必要ですか? - が参照するパッケージ
<context:component-scan base-package="com.domain.somepackage"/>
には、問題の Dao クラスが含まれていません。dao のパッケージを含む別の component-scan タグを追加しても、何も変わりません。これは必要ですか?