技術スタック: 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 plugin
mvn 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 内で実行されているテストに対してのみビルド時間の拡張を行うにはどうすればよいでしょうか (ポップ可能な場合)。
それとも、そもそもこれにアプローチするのは間違っていますか?