問題タブ [load-time-weaving]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - アップキャスト時に AspectJ と Spring LTW が機能しない
私は AspectJ を使用して LTW をセットアップし、かなり迅速かつ成功しました。セットアップは次のとおりです: beans.xml:
クラスに自動配線される私のサービス:
親クラス:
サービスを自動配線し、Bar を拡張する構成可能なクラス。
そして、親クラス Bar への参照を持つクラスのみ:
そして成功したテストケース。BarExtended のインスタンスを作成し、LTW が機能しているかどうかを確認するだけです。Foo クラスは何もしません。
このテストは緑色で実行されます。しかし、次のテストは失敗します:
クラス BarExtended が Foo に設定されている行を挿入するだけです。ダウンキャストにより、AspjectJ が機能しなくなります。
ところで、Foo クラスを BarExtended クラスを使用するように変更すると (したがって、アップキャストは必要ありません):
上記のテストは機能します。構成可能なオブジェクトがアップキャストされたときに、なぜ AspjectJ が非常に奇妙な動作をするのか、誰にもわかりますか?
編集:以下も失敗します:
別の BarExtended オブジェクトが Foo に設定され、最初の barExtended オブジェクトは AspectJ によって無視されます。しかし、リフレクションを使用して BarExtended をインスタンス化すると、次のようになります。
奇妙ですね。
どうもありがとう
よろしく、
アンドレアス
java - 「2番目の」aop.xmlファイルを使用したAspectJ LTW
最近AspectJ LTWを使い始めました。AJDTで Eclipse を使用しています。私は基本的に「outjar」オプションを使用して、コンパイルされた .aj ファイルで「AspectJ ライブラリ (.jar ファイル)」を作成します。
次のステップは、「通常の」Eclipse Java プロジェクト内でこの jar ファイルを使用することです。このプロジェクトは、javaagent パスに aspectjweaver.jar ライブラリがあれば完璧に動作します。
私の次の目標は、この「通常の」Java プロジェクト内で2 番目の aop.xml ファイルを使用することです。META-INF/aop.xml
ファイルがクラスローダーの検索パスにある場合でも、これはうまく機能します。今、私はこれを発見しました:
http://www.eclipse.org/aspectj/doc/released/README-1612.html
(「aop.xml でより柔軟なポイントカット/コード ワイヤリング」までスクロールします)
次の XML 仕様は問題なく機能します。
しかし、私が実際に興味を持っているのは、自分の引数/変数/メッセージを method に「渡す」ことsomeMethod
です。何かのようなもの:
それで、文字列(たとえば)をメソッドに渡す方法はありsomeMethod
ますか?または、利用可能な他のオプションはありますか?
java - AspectJ と Tomcat でロード時のウィービングを設定するには?
次の方法で (Perf4J でプロファイリングを行うために) ロード時のウィービングを構成しようとしました。
1)フォルダに追加aop.xml
しました。META-INF
デプロイされると、META-INF はアーティファクト ルート ディレクトリ (つまりMyAppDeployed/META-INF
) に配置されます。
2) 、 、 をフォルダに入れaspectjrt-1.6.1.jar
ましaspectjweaver-1.6.1.jar
たcommons-jexl-1.1.jar
(commons-logging.jar
最初Tomcat/lib
に試しMyAppDeployed/WEB-INF/libs
ましたが、これも機能しませんでした)。
3) -javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar
Tomcat の起動時に VM オプションを追加しました。
4) 私aop.xml
:
読み込み時の織り込みが発生する兆候は見られません。エラー報告も必要な結果もありません。私が持っている唯一のエラーメッセージは次のとおりです。
aspectjweaver-1.6.1.jar
javaagent パラメータを指定する際に名前を間違えた場合。正しく記述されていれば、エラー メッセージは表示されません。
アイデアはありますか、何が間違っていますか?
PS私はJava 5を使用しています1.5.4
.aspectjのバージョンで同じことを試してみましたが、まったく同じ結果が得られました.
java - Spring @Value が @Controller と互換性がないのはなぜですか?
この問題の理解を深めたいと思っています。回避策は非常に簡単です。つまり、プロキシ/アドバイスがラップされていない別のクラスに構成データを移動しますが、これをよりよく理解することは、将来的に他の関連する問題を回避するのに役立つと思います。提供することができる。
Spring 3.1.0.RELEASE を Spring STS と vFabric tc サーバーで使用しています。@Controller クラスを使用して基本的な小さな REST サーバーを実装しました。それはすべて素晴らしいことですが (本当にそうです)、@Controller も @Transactional であり、それとロード時間の織り込みと vFabric tc サーバーの間で、@Value が壊れます。
プロパティ ファイル app.properties:
これは JUnit の下で正常に動作し、テストは "SUCCESS" に設定された prop を持つ MyAPI オブジェクトを取得します。しかし、アプリが vFabric に読み込まれると、読み込み時間の織り込みとプロキシが発生すると推測されます。何が起こっても、2 つの MyAPI インスタンスが作成されます。1 つは prop == "SUCCESS" で、もう 1 つは (残念ながら http 要求を処理するものです) prop == "${my.prop}" です。
要するに、私はこれを魔法の失敗と呼んでいます。これは、AOP のようなものを使用する際の私の最大の懸念事項です。STS を使用しても、問題の背後にある原因を追跡する方法や、これが重大なバグであるかどうかを判断する方法がわかりません。バグだとしたらSpringのバグなのか、AspectJなのか、ロードタイムウィーバーなのか、vFabricのバグなのかわからないので、どこにバグレポートを提出すればいいのかもわかりません。
したがって、これを理解するための助けをいただければ幸いです。ありがとう。
java - スタックトレースを解釈する方法は?
IBM RAD 8 を使用して websphere にデプロイすると、次のスタックトレースが得られます。
どういう意味ですか?エラーを解決するには、どのような手順を実行する必要がありますか?
助けてくれてありがとう
tomcat - WEB-INF/lib/spring-instrument-tomcat.jar とともに META-INF/context.xml で定義された TomcatInstrumentableClassLoader で Tomcat を動作させる方法
Tomcat 7.0.27 でホストされているサーバー側で Spring Data 3.1.0.RELEASE と Eclipselink 2.4 を使用する単純なアプリを作成しました。mywebapp/META-INF/context.xml に Spring クラスローダーがあります
入れた場合spring-instrument-tomcat.jar
、$TOMCAT_HOME/lib
Tomcat は mywebapp を正常に実行しますが、入れた場合spring-instrument-tomcat.jar
- $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib
Tomcat は例外で 終了します
useSystemClassLoaderAsParent
に設定されたコンテキストローダーパラメーターfalse
も役に立ちません。
私はTomcatに(カスタム)グローバルライブラリを持ちたくありません(そして、実際のプロダクションシステムでグローバルライブラリを持つのは簡単ではありません)ので、必要なものすべてをシンプルにローカライズしようとしています(まだ大きい)戦争ファイル。そのようなカプセル化を達成する方法について何か考えはありますか?
tomcat - SpringフレームワークTomcatLoadTimeWeaving
WebサーバーとしてTomcatを使用していてfetch = FetchType.lazy
、すべての@OneToOneアノテーションにアノテーションを使用したいのですが、Springがレイジー設定を元に戻し、eclipselink警告が表示されます。
遅延フェッチを使用できるように、Tomcatでウィービングを機能させるにはどうすればよいですか、または遅延負荷の関係に代わる方法はありますか。パフォーマンスに大きな問題がありますか?
現在、ロードタイムウィービングを追加しようとしています。tomcat/ libにspring-instruments.jarとspring-aspects.jarの両方を追加<context:load-time-weaver/>
し、applicationContext.xmlファイルにグローバルを追加した後、
ant - OpenJPAエンハンサーまたはロード時ウィーバー
この例外が発生しています。
Antスクリプトにエンハンサータスクがあります。
クラスが拡張され、クラスファイルのサイズが大きくなっているのがわかりますが、それでも上記の例外が発生します。
spring - インターフェイスなしで Load Time Weaving を使用して AspectJ を構成する方法
私のプロジェクトでは、現在 AspectJ (いくつかの制限により Spring AOP だけでなく) をコンパイル時のウィービングで使用しています。Eclipse での開発を高速化するために、Load Time でウィービングを行いたいと考えています。私はそれを成功させましたが、大きな制約が 1 つあります。いくつかのトランザクション メソッドを含むサービスのインターフェイスを使用することです。インターフェイスではなく実装を使用してサービスを宣言すると、呼び出し元クラスでウィービングが行われないため、トランザクションはサポートされません。
AspectJでサポートされている場合、インターフェイスなしで Load Time Weaving を使用して AspectJ を構成するにはどうすればよいですか?
問題を再現する小さなプロジェクトを作成しました。
次のテストは失敗します。
次のテストは、次の場合に成功します。
注入されたサービスは、その実装の代わりにそのインターフェースで宣言されます (つまり、「@Inject MyServiceImpl サービス」を「@Inject MyService サービス」に置き換えます)、テストは成功します。
ウィービングはコンパイル中に実行されます (この場合、構成、POM および Spring アプリケーションのコンテキストは明らかに異なります)。しかし、私の目標は、Java ファイルを保存するたびにウィービング フェーズを回避するために、読み込み時にウィービングを行うことです。
AspectJ の代わりに、プロキシベースのソリューションである Spring AOP (tx:annotation-driven mode="proxy") が使用されます。ただし、この場合、自己呼び出しの問題が発生しました。つまり、ターゲット オブジェクト内のメソッドがターゲット オブジェクトの他のメソッドを呼び出している場合、呼び出されたメソッドが @Transactional でマークされていても、実行時に実際のトランザクションにつながりません。
spectj-ltw/src/test/java/mycompany/aspectj_ltw/MyServiceImplTest.java
spectj-ltw/src/main/java/mycompany/aspectj_ltw/MyService.java
spectj-ltw/src/main/java/mycompany/aspectj_ltw/MyServiceImpl.java
spectj-ltw/src/test/resources/META-INF/applicationContext.xml
spectj-ltw/src/test/resources/META-INF/aop.xml
spectj-ltw\pom.xml
テストを実行するための VM 引数: