1

要件があります:

RESTful リソース メソッドごとに、OXM メタデータ ファイルのセットがあります。JAXBContext の作成中にこれらのファイルをロードする必要があります。そのため、リクエストごとの ResourceInfo を把握し、リソース メソッドの注釈からマッピングする必要があります。これにより、どの OXM メタデータ ファイルのセットをロードする必要があるかを示すことができます。

  1. ResourceInfo はリクエストごとですか?
  2. MessageBodyReaderやMessageBodyWriterなど、EntityProvider内のリクエストごとにメソッド(リソースメソッド)を取得することはできますか?
  3. JPA Entity と XML/JSON 間の OXM メタデータ、または TO と XML/JSON 間の OXM メタデータのどちらを好みますか? 私はサービスごとに TO がドメインクラスのビューをクライアントにカスタマイズできると仮定しているので。
4

2 に答える 2

0

いくつかの研究と実験の後、ついに私は突破口を開きました。

  1. ResourceInfo はリクエストごとですか? [ANS] はい、javadoc に記載されています。
  2. MessageBodyReaderやMessageBodyWriterなど、EntityProvider内のリクエストごとにメソッド(リソースメソッド)を取得することはできますか? [ANS] これと非常によく似た JIRA の欠陥があり、ResourceInfo をフィルターやインターセプターに注入できないと書かれています。これは、glassfish.jersey チームのいくつかのバージョンで修正される可能性があります。

  3. JPA Entity と XML/JSON 間の OXM メタデータ、または TO と XML/JSON 間の OXM メタデータのどちらを好みますか? 私はサービスごとに TO がドメインクラスのビューをクライアントにカスタマイズできると仮定しているので。[ANS] 最後に、モジュール エクスポートの概念として、JPA エンティティ以外の TO を使用することにしました。開発ライフサイクルが異なるため、OXM で JPA Entity を使用するにはいくつかの制限もあります。a. 開発ライフサイクル: TO は、他のモジュールや上位層サービスへのインターフェースと共にエクスポートできるように設計されており、要件に応じてケース設計段階で決定されると想定され、インターフェースと共に提供されるため、TO の内容は比較的安定している必要があります。バージョン管理にも従います。ただし、エンティティの設計ははるかに柔軟で、時々変更されます。これらの変更は、このモジュールのクライアントから隠されている必要があります。また、内部にビジネス ロジックが含まれている場合もあります。エンティティを他のモジュールに公開する会社またはアーキテクチャがあること、またはモジュールが 1 つしかないことはわかっているので、問題ではありません。しかし、私はドメイン クラスを非表示にすることにしました。b. サービス層で公開する JPA エンティティを使用している場合、Mapping JPA エンティティと RESTful エンティティ本体を提供する MOXy は良い選択です。次に、いくつかの遅延読み込み要件により、ORM フレームワークはいくつかのクラス変換またはバイトコード生成作業を暗黙的に行い、いくつかの追加の遅延読み込み関連フィールドが実行時にロードされるか、コンパイル時に生成されます。これらのフィールドは MOXy で退屈なエラーを引き起こします。アクセサ タイプとして FIELD を使用する OXM。PROPERTY モードに切り替えるか、OXM メタデータで既知のフィールドを定義して非表示にする必要があります。それ以外の場合は、Getter と Setter を JPA Entity クラスで定義する必要がありました。

また、TO を導入すると OXM 作業の複雑さが軽減され、使用されるメタデータ ファイルがはるかに少なくなり、TO クラスに注釈が付けられ、OXM メタデータ ファイルがゼロになる可能性があります。 1 つのシステム。したがって、答えは次のとおりです。

私はJPAエンティティよりも好きです。

于 2013-10-08T12:01:34.517 に答える
0

同様の問題がありました。数時間の調査の後、リソースメソッドを解決できるプロバイダーを直接注入することで、必要なものを取得しました。

@Inject
Provider<RoutingContext> routingContextProvider;


    log.info("routing method == " + routingContextProvider.get().getResourceMethod());
于 2013-11-17T20:07:36.047 に答える