2

サードパーティのライブラリ クラス ( SpringBeanELResolver ) を織り込むために AspectJ(1.6.12) を使用しています。を使用して LTW を有効にし<context:load-time-weaver/>、アスペクトは AspectJ アノテーション構成を使用します。Aspectj のデバッグ出力に表示されるクラスの完全なリストを使用して、すべてが jetty で正常に動作します。Spring で説明されているように、Websphere プラットフォームでは必要ないため、-javaagent は使用しません。

Websphere 8 では、Spring が正しく初期化WebSphereLoadTimeWeaverし、Aspectj が正しく初期化されたというログが表示されます。しかし、aspectj のデバッグ出力にはクラスの一部しか表示されません。SpringBeanELResolverもウィービングには含まれていません。その結果、私たちのクラスは織り込まれていません。

クラスなど、デバッグ出力にリストされているクラスを織り込むことができます。

Classloading ポリシーを PARENT_LAST に設定します。

いくつかのログと構成を次に示します。

Websphere SystemErr ( SpringBeanELResolverを含むほとんどのサードパーティ クラスはここには表示されません)

00000022 SystemErr     R [CompoundClassLoader@1293b09] info AspectJ Weaver Version 1.6.12 built on Tuesday Oct 18, 2011 at 17:52:06 GMT
00000022 SystemErr     R [CompoundClassLoader@1293b09] info register classloader com.ibm.ws.classloader.CompoundClassLoader@1293b09
00000022 SystemErr     R [CompoundClassLoader@1293b09] info using configuration <path-to-ear>/our_war.ear/our.war/WEB-INF/classes/META-INF/aop.xml
00000022 SystemErr     R [CompoundClassLoader@1293b09] info register aspect com.ourcompany.OurAspect
00000022 SystemErr     R [CompoundClassLoader@1293b09] debug not weaving 'org.springframework.instrument.classloading.websphere.WebSphereClassPreDefinePlugin$Dummy'
00000022 SystemErr     R [CompoundClassLoader@1293b09] debug not weaving 'org.apache.myfaces.shared_orchestra.util.ClassUtils'
00000022 SystemErr     R [CompoundClassLoader@1293b09] debug not weaving 'org.apache.myfaces.orchestra.conversation.annotations.ConversationRequire'

...

Websphere SystemOut

00000022 DefaultContex I org.springframework.context.weaving.DefaultContextLoadTimeWeaver setBeanClassLoader Determined server-specific load-time weaver: org.springframework.instrument.classloading.websphere.WebSphereLoadTimeWeaver

aop.xml

<!DOCTYPE aspectj PUBLIC
        "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver options="-showWeaveInfo -verbose -debug">
        <!-- only weave classes in packages below-->
        <include within="org.springframework.beans.factory.access.el.*"/>
        <include within="com.ourcompany.*"/>
    </weaver>
    <aspects>
        <!-- weave in just this aspect -->
        <aspect name="com.ourcompany.OurAspect"/>
    </aspects>
</aspectj>

CompoundClassLoader が WEB-INF/lib のすべてのサードパーティ ライブラリをロードする際に問題が発生する可能性があると思います。または、Aspectj と CompoundClassLoader の間の何かです...

4

1 に答える 1

0

私の Java クラスはすべて ${src.dir} にあるので、iajc にソース リストを渡します。ソース リストには 1 行しかありません。

http://resultplanet.org/

于 2013-05-31T06:21:28.440 に答える