問題タブ [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 - 実行時のアスペクト ウィービング
AOP を使用して、実行時に既に実行されているコードの上に新しいコードを織り込むことができる Java ソリューションを探しています。重要なのは、JVM の再起動を要求しないことです。また、実行時に織り込みを削除し、古いコードを織り込み前の状態で実行したいと考えています。
私は、AspectJ の読み込み時間のウィービング + ランタイム クラスの読み込み/アンロードがそれを行うと考えています。誰も試したことがありますか?推奨事項はありますか?ありがとうございました。
tomcat - Tomcat で AspectJ の読み込み時間の織り方を使用するには? (スプリングなし)
コマンドラインからTomcatサーバーを起動するときに、JVM引数を織り込んでAspectJの読み込み時間を渡したいです。次のようになります。
このCLASSPATH
変数は、aspectjweaver.jarファイルを指します。
引数を追加しました
Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader
、Daj.class.path=path-to-jar-file-where-the-aspects-should-be-woven
とDaj.aspect.path=path-of-jars-where-aspects-are-present
(ソース jar にはコンパイル済みの側面もあります)。
ただし、上記の構成を使用しても、Tomcat では機能しません。Tomcat クラスパスまたはクラスローダーに関連するその他の変更を行う必要はありますか? はいの場合、助けてください。
Tomcatなしで同じことを試してみましたが、うまくいきました。これについて私を助けてください。Springを使わずにこれを機能させたい。
spring - Hibernate JPA と Spring Framework でロード時間/ランタイム ウィービングを有効にする方法
Spring Framework アプリケーションでHibernate を JPA プロバイダー (EntityManagerFactory
代わりに itsを使用しています) として使用しています。SessionFactory
Spring Framework の読み込み時間の織り込みサポートが機能するようになったので、そのハードルを超えました。
エンティティのプロパティbyte[]
とプロパティの遅延読み込みを有効にする必要があります。Hibernate の ant タスクを使用してビルド@ManyToOne
時にエンティティをインストルメント化 (ウィービング) する方法は理解していますが、代わりに実行時にエンティティをインストルメント化(ロード時ウィービング)したいと考えています。いくつかの Google 検索結果で への参照を見てきましたが、それを有効にするための実際の手順はありません。実行時にエンティティを計測できるように Hibernate に指示するには、どのプロパティを設定する必要がありますか?
spring - スプリング ロード タイム ウィービングが機能しないのはなぜですか
@Configuration ビルドの例を (groovy で) 動作させようとしてきたので、Spring コンテナーを使用して依存性注入をトリガーできますが、取得できるのは -javaagent に関するエラーだけで、修正できないようです
私はこのような beanConfig クラスを持っています
@Configuration
@EnableSpringConfigured // should turn on AnnotationBeanConfigurerAspect
@EnableLoadTimeWeaving (aspectjWeaving=AspectJWeaving.ENABLED) // switch on for this context
class BeanConfig {
次に、サンプルクラスで new を呼び出して、上記の構成クラスで diSource Bean が宣言されている Spring コンテナーの外に注入を試みます。
` @Configurable (autowire=Autowire.BY_TYPE, dependencyCheck=true) class ExtDI { @Autowired DISource diSource
`
私のサンプラークラスでは、これを呼び出してインジェクションをトリガーしようとします
` ... static void main (String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(/ BeanConfig.class /) ctx.scan ("com.softwood") ctx.refresh () ....
`
クラスパスには、aspectjeaver-1.6.10.jar、aspectjrt-1.6.10.jar、spring-xxx-3.1.4.jars などがあります
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.1.7'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
compile "org.springframework:spring-core:${spring_version}"
compile "org.springframework:spring-beans:${spring_version}"
compile "org.springframework:spring-context:${spring_version}"
compile "org.springframework:spring-aspects:${spring_version}"
compile "org.springframework:spring-aop:${spring_version}"
compile "org.springframework:spring-instrument:${spring_version}"
compile "org.aspectj:aspectjrt:1.6.10"
compile "org.aspectj:aspectjweaver:1.6.10"
compile "cglib:cglib:2.2"
}
私が持っているvm引数のEclipseプロジェクトランタイムで
-javaagent:C:/Users/802518659/aspectjweaver-1.6.10.jar
spring-instrument-3.1.4.jar でも同じことを試しましたが、同じ問題がありました。
プロジェクトを実行すると、このエラーが発生します
`
`
これは、アプリケーションが Java クラスローダを計測できないことを示しています - -javaagent:spring-instrument-xxx またはspectjweaver.jar で開始したにもかかわらず - どちらも失敗します
それで、私は何を間違っていますか-これは本当に気になり始めています-コンテキスト内で通常のインジェクションを機能させることができます(LTWなし)が、コンテナの外でこのインジェクションを機能させたいと本当に思っていました
私は何を間違っていますか
java - ドメインオブジェクトでロードタイムウィービングが機能しない
ドメイン オブジェクト (つまり、新しい演算子で作成されたオブジェクト) でSpring Managed Bean にアクセスする必要があるシナリオがあります。いろいろ調べたところ、aspectJ が提供する Load Time Weaving を使えばできることがわかりました。私の知る限り、上記のすべての構成を行いました。私はaspectJが初めてです。以下は私のコードと構成ファイルです。
ドメインクラス、
コントローラ、
パッケージ test.controllers;
applicationContext.xml
aop.xml、
-javaagent :c:\spring-agent-2.5.6.jar を VM 引数として書きました
以下のjarを使用してLTWとaspectJをサポートし、
- spectjrt-1.5.4.jar
- spring-agent-2.5.6.jar
- 春のアスペクト.jar
- アスペクトjWeaver-1.5.4.jar
- 春-2.5.6.jar
他のすべての春の依存関係は正常に機能していますが、ドメイン オブジェクト (つまり、新しい演算子で作成されたオブジェクト) に注入された依存関係のみが機能していません。つまり、これらの依存関係に対して null を取得しています。
親切に助けてください。前もって感謝します。
java - javaコマンドラインでjavaagentオプションを指定せずにロード時のバイトコード変換に関する解決策はありますか
オープン ソース ライフサイクル フレームワーク API プロバイダーとして、ライフサイクル API を提供する暗黙の方法で内部設計を非表示にするために最善を尽くしたいと考えています。これにより、API クライアントにより多くの利便性がもたらされます。
コア Java アプリケーションと Java EE アプリケーションの両方の構成を回避することが期待されていますが、現実には、java コマンドの -javaagent:${path}/Lifecycle.jar オプションを使用して、クラスのロード時に独自の ClassFileTransformer を有効にしています。
いくつかの検索の後、いくつかの不明な方向が見つかりました。要約して私たちを導くために、Java Guyが必要です。
- エージェントメインとプリメイン
Glassfish の ByteCodePreprocessor などの特定のランタイム環境との統合には、バイト コード変換を実行する次のメソッドがあります。
public byte[] preprocess(String classname, byte[] classBytes);
これらの方向についての私の混乱:
- Core Java Application の場合、startup クラスの main メソッドを変更して、agentmain ソリューションを適応させることができるようです。他のオプションはありますか?
- Glassfish などの JavaEE Container を使用する場合、ByteCodePreprocessor を使用してクラスのバイト コードを変更できますが、いくつかの新しいクラスを作成する必要がありますが、それらの新しいクラス ファイルをどこに保存するか、または新しいクラス ファイルを設計または適用する方法がわかりません。 ClassLoader を使用して、クラス ファイルの前処理中に新しく作成されたクラス ファイルをロードします。
(ところで、Lifecycle API は、EntityManager インターフェースを持たない JPA に非常に近いメタ駆動型スタイルに従います。現在のところ、それらのほとんどは単なる Annotations と CallbackContext インターフェースと LifecycleEvent インターフェースです。)
tomcat7 - AspectJ が META-INF/aop.xml を認識しない
外部 jar ファイル ( にあります) からクラスを織り込むために、Tomcat 7 Web アプリケーションで Load Time Weaving を動作させようとしていますWEB-INF/lib
。
私は次のことをしました:
次のパラメーターを使用して Tomcat を起動しました。
-javaagent:/path/aspectjweaver-1.7.0.jar -classpath /path/aspectjrt-1.7.0.jar:etc
aop.xml
に配置WAR_ROOT/META-INF/, WEB-INF/lib/META_INF, WEB-INF/lib and WEB-INF/
aop.xml:
ファイルをどこに配置しても、ターゲット クラスが織り込まれず、次のようなエラーが表示され続けます。
私が指定したパッケージ以外のクラスを織り込もうとしているということと、サーバーの起動時間が4倍になったことを考えると、すべてのクラスを織り込もうとしていると思います。
私は何が欠けていますか?