1

技術スタック: Arquillian embedded-tomee, HSQLDB, openJpa, jdk 1.8.

私はこれをすべて一緒に機能させる方法を見つけようと数日を費やし、IMO に非常に近づいてきました。そして今、私はこの非常に一般的なエラーに悩まされています。

<openjpa-2.4.0-r422266:1674604 fatal general error>
org.apache.openjpa.persistence.PersistenceException: null

すべてのエンティティが に追加され、 のtest-persistence.xml下に正しく配置されてsrc/test/resourcesいます。

Runtime Unenhanced Classes設定を 試みた最初の問題は、コンテナーsupported内で実行時に拡張が行われることを期待していました。Arquillian-Embedded-Tomeeそこには運がありませんでした。一部のエンティティに、ランタイム拡張に必要な public/protected no-args コンストラクターがないというエラーが発生し続けました。 : ランタイム拡張は、実際にデプロイされた tomee コンテナー内で完全に正常に機能します。Arquillian 内では機能しません。

上記の問題を解決するための最初のアプローチ: エンティティをパブリックとして公開したくありませんでした。そのため、ここで説明されているように をbuild-time-enhancement使用するように切り替えました。このアプローチである程度の成功を収めました。実行中にエンティティが強化されていることを実際に確認して確認できました。openjpa maven pluginmvn clean install

ビルド出力:

 --- openjpa-maven-plugin:1.2:enhance---
some-persistent-unit  INFO   [main] openjpa.Tool - Enhancer running on 
type "class someClass".
some-persistent-unit  INFO   [main] openjpa.Tool - Enhancer running on 
type "class someotherclass".

等々...

しかし、ここでの問題は次のとおりです。テストは maven ビルド中にのみパスします。テスト クラスの個々のテスト、またはそのテスト クラスのすべてのテストを実行しようとすると、失敗します。また、このアプローチでは、永続化コンテキストで拡張されていないクラスのランタイム サポートを無効にしました。

<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>

そのため、期待どおりに機能していると結論付けましたopenjpa-maven-plugin

質問 1: これは予期された動作ですか? テストは Maven ビルドの外では機能しませんか? 質問 2: openjpa プラグインjavaagentは舞台裏を提供していますか?

javaagent何をすべきかわからないので、別の (???) アプローチに切り替え まし。これでは成功しませんでした。以下のエラーで終了しました:

<<< ERROR! org.apache.openjpa.persistence.ArgumentException: This 
configuration disallows runtime optimization, but the following listed types 
were not enhanced at build time or at class load time with a javaagent: "
List of entities described in test-persistence.xml

質問 3:では、ビルド時の拡張機能を設定し、実行するすべての単体テストで拡張機能が機能することを確認するにはどうすればよいですか?

質問 4: Arquillian 内で実行されているテストに対してのみビルド時間の拡張を行うにはどうすればよいでしょうか (ポップ可能な場合)。

それとも、そもそもこれにアプローチするのは間違っていますか?

4

1 に答える 1

0

Q1: IDE が openjpa プラグインを実行せず、コンパイルのみを実行する場合、拡張機能を見逃すことになります

Q2: いいえ、プラグインと javaagent の両方が同じ拡張機能の実装を使用していますが、異なるフック (ビルドとランタイム) として見ることができます。

Q3: IDE によって異なります。Eclipse では、openjpa を構成するためにライフサイクル プラグインが必要であり、Intellij では、実行構成の Make フェーズの後に openjpa:enhance を追加する必要があります。

Q4: tomee remote では自動で行われます

javaagent を使用することが拡張機能を解決するための最良の方法だと思います。実際に必要なのは、maven および/またはテスト構成に -javaagent:/path/to/openejb-javaagent.jar があることを確認することだけです。

于 2017-05-28T19:03:22.867 に答える