2

Spring dm Server OSGi 環境内で EclipseLink JPA を動作させようとしています。

Spring Enterprise Bundle Repository からダウンロードされた関連するフレームワークとライブラリには、次のものがあります。

  • dm サーバー 1.0.2.SR02
  • AspectJ ランタイム 1.6.3
  • AspectJ ウィーバー 1.6.3
  • スプリング フレームワーク 2.5.6.A
  • Eclipse の持続性 1.1.0
  • Javax 持続性 API 1.99.0

EclipseLink JPA をセットアップするために、 PetClinic-1.5.0の例で示されたのと同じ構造に従いました。遅延フェッチが有効になるまで、すべてが機能します (プロキシされたオブジェクトが必要です)。

遅延フェッチが有効になると、次のエラーは、読み込み時間の織り込みが正しく機能していないことを示しています。

---- (読みやすくするために切り捨てられています)

例外 [EclipseLink-60] (Eclipse Persistence Services - 1.1.0.r3634): org.eclipse.persistence.exceptions.DescriptorException 例外の説明: メソッド [_persistence_setcustomer_vh] または [_persistence_getcustomer_vh] がオブジェクト [net.fractech で定義されていません。 .fds.backoffice.Job]. 内部例外: java.lang.NoSuchMethodException: net.fractech.fds.backoffice.Job._persistence_getcu stomer_vh() マッピング: org.eclipse.persistence.mappings.OneToOneMapping[顧客] 記述子: RelationalDescriptor(net.fractech.fds.backoffice.J ob --> [データベーステーブル(JOBS)])


これは、_persistence_getcustomer_vh() および _persistence_setcustomer_vh() メソッドが Job ドメイン オブジェクトに自動的に組み込まれていないことを示しています。

質問

1.) load-time-weaving が実際に機能しているかどうかを判断するにはどうすればよいですか? さらに、どの負荷時間ウィービング エージェントとウィーバーが開始されたかをログに記録するにはどうすればよいですか? このウィーバーにスイッチを渡してデバッグ情報を出力させるにはどうすればよいですか?

<context:load-time-weaverspectj-weaving="on" /> で load-time-weaving を開始したと思います

2.) 多くの検索により、dm サーバーを使用する場合、-javaagent パラメーターを jvm に渡す必要がないことが明らかになりました。これは正しいです?

3.) com.springsource.org.eclipse.persistence;version="[1.1.0,1.1.0]";import-scope: をアサートすることにより、別のバンドル内のドメイン オブジェクトが Eclipse 永続性クラスにアクセスできることを保証しました。 =application を eclipselink バンドルに追加し、PAR 内のすべてのアプリケーション バンドルを含めます。Spring dm Server で EclipseLink JPA を有効にするために必要なその他の構成はありますか?

4

3 に答える 3

2

私も同様の問題を抱えていました。最初に eclipselink.weaving.lazy=false を設定するか、それが機能しない場合は eclipselink.weaving=false を設定してみてください。後者を設定する必要がありました。

私が使用している設定があなたに当てはまるかどうかを参照したい場合は、私のサイトに投稿があります。

于 2009-12-23T09:28:49.627 に答える
1

Equinox Waving Springwaverを使用することをお勧めします

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

...

<property name="loadTimeWeaver">

<bean class="org.eclipse.equinox.weaving.springweaver.EquinoxAspectsLoadTimeWeaver"/>

</property>

</bean>

-javaagent オプションを使用する必要はありません。

JPA と EclipseLink を使用した実際の例は、http://code.google.com/p/springdm-in-action/ (第 7 章を​​参照) にあります。

于 2010-03-02T20:32:53.243 に答える
0

EquinoxAspectsLoadTimeWeaverを(EclipseLinkを使用して)JPaコンテキストに使用しようとしましたが、EquinoxAspectsLoadTimeWeaver Bean宣言がModelバンドルと同じバンドルに行われていない場合、モデルクラスは変換されません。

EquinoxAspectsLoadTimeWeaverは、EquinoxAspectsLoadTimeWeaverを宣言するバンドルに格納されているクラスに対してのみクラスを変換します。

サンプルhttp://code.google.com/p/springdm-in-action/を試しました (第7章を参照)(このサンプルLukaszに感謝します)。EquinoxAspectsLoadTimeWeaverの宣言により、エラーが発生しないようにします

Caused by: java.lang.IllegalStateException: Cannot apply class transformer without LoadTimeWeaver specified

ただし、モデルクラスは変換(ウィービング)されません。EclipseLinkへの織り込みは、たとえばレイジーモードを管理します。たとえば、サンプルモデルに設定した場合次のようにレイジーモードに連絡します。

public class Contact {

...
    @Column(name="last_name")
    @Basic(fetch=FetchType.LAZY)
    private String lastName;

Model Contactクラスが作成されていないため、遅延読み込みが適用されていないことに気付くでしょう。

よろしくアンジェロ

于 2010-04-28T09:42:13.327 に答える