問題タブ [hk2]
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 - Jersey 2.0 による依存性注入
以前のジャージー 1.x の知識なしでゼロから始めたので、ジャージー 2.0 プロジェクトで依存性注入をセットアップする方法を理解するのに苦労しています。
また、HK2 が Jersey 2.0 で使用できることも理解していますが、Jersey 2.0 の統合に役立つドキュメントが見つからないようです。
pom.xml
コンテナーを起動してリソースを提供することはできますが、@Inject を MyService に追加するとすぐに、フレームワークは例外をスローします。
私のスターター プロジェクトは GitHub で入手できます: https://github.com/donaldjarmstrong/jaxrs
jpa - Jersey + HK2 + Grizzly:EntityManagerを注入する適切な方法は?
Jersey、HK2、およびプレーンな GrizzlyServer で、独自のサービス クラスの (リソース クラスへの) インジェクションを設定することができました。(基本的にはこの例に従います。)
リソース クラスに JPA EntityManagers を挿入するのに最適なものは何ですか? (現在、1回のリクエストを1単位として考えています)。私が現在検討している 1 つのオプションはFactory<EntityManager>
、次の方法でa を使用することです。
次のようにバインドします。
問題は、dispose
メソッドが呼び出されないことです。
私の質問:
- これは、Jersey + HK2 に EntityManagers を注入するための正しいアプローチですか?
- その場合、EntityManagers が適切に閉じられていることを確認するにはどうすればよいですか?
(このユースケースをカバーするためだけに、重いコンテナや追加の依存性注入ライブラリに依存したくありません。)
java - Jersey 2.x を使用した InjectionResolver -- リソースが 2 回呼び出される
カスタム注釈と HK2 を使用して Resource メソッドに何かを挿入する方法を理解しようとしています。私は Spring webapp 環境にいるので、既存の helloworld-spring-webapp Jersey 2 の例を積み上げただけです。私の問題は、Resource メソッドが 2 回呼び出されることです。1 回目は注入が成功しますが、2 回目は成功しません。
InjectionResolver.resolve() メソッド
Binder.configure() メソッド
バインダーの ResourceConfig 登録
JerseyResource.getHello()
SINGLE呼び出しからのサーバー出力
どこかで構成を見逃していませんか? なぜ2回呼び出されているのかわかりません。それを修正すれば、2回目の呼び出しでInjectionResolverが機能しないという問題は問題にならないと思います。
java - ジャージー 2.* & HK2. パスパラメータに基づいて異なるオブジェクト (DAO など) を注入する
マルチテナント アプリケーションを実装しています。私のリソースの多くには、「/api/tenant/{tenant_id}/resource/path/」のようなパスがあります。私がやりたいことは、"{tenant_id}" パス パラメーターに基づいて、さまざまな DAO (または他のオブジェクト) をリソースに挿入することです。
同様のことを達成する方法について、次の2つの最適なアイデアがあります。
次のようなラッパー クラスを使用します。
次に、私のリソース クラスでは、 で
SomeDAOWrapper
注釈が付けられた属性として持つことになります@BeanParam
。正しい DAO を持つリソースを返すパス "/api/tenant/{tenant_id}" でサブリソース ロケーターを使用します。
他のアイデアはありますか?理想的にはSomeDAO
、自分のリソース クラスにアノテートされた属性または類似の属性を単純に持つことです (パス パラメーターを考慮し@Inject
たファクトリを使用します)。tenant_id
jersey - サーブレットコンテナがシャットダウンされたときにJersey 2.3がHK2サービスロケータのシャットダウンを呼び出さない
質問: HK2 が Jersey 2 で確実にシャットダウンする適切な方法はありますか? そうでない場合、これはバグと見なされますか?
@PreDestroy
jersey-server 2.3.1 を使用して、マネージド シングルトンの HK2 メソッドと実装のdispose()
メソッドFactory<T>
が呼び出されていないことに気付きました。ちょっと調べてみると、サービス ロケーターでConfigHelper
呼び出すライフサイクル リスナーが定義されていることがわかりますが、それ以上のことはありません。これは と の両方でpreDestroy()
Jersey から呼び出されますが、サービス ロケータではシャットダウンに関してそれ以上何も行われません。 ServletContainer
shutdown()
reload()
を調べましたがServletContainer
、公開または保護された API を介して HK2 サービス ロケーターにアクセスする方法はないようです。
java - JSR-330 注入オブジェクトの単体テスト
私は以前に Spring DI を使用したことがあり、Spring を使用せずに Spring Bean クラスをテストできることが利点の 1 つとして認識されています (簡潔にするためにインポートは省略されています)。
現在、私は JSR-330 を試しています。これは、セッターを明示的に記述しないことを意味します。
これまでのところ、Hk2 を使用しています。これは、純粋に、Jersey が Hk2 に関連付けられており、他の JSR-330 実装との共存が困難になっているという逸話があるためです。
@Inject アノテーションによってセッターが使用可能になるという魔法が起こることを半分期待していましたが、そうではありません。
- フレームワークを呼び出さずに、この種の注釈付きクラスを (便利に) テストするにはどうすればよいですか?
- それができない場合、移植可能な方法でフレームワークを呼び出すにはどうすればよいですか (つまり、テスト コードを Hk2、Guice などに緊密に結合せずに)。
- それができない場合、この方法で注釈が付けられたクラスをテストするための典型的でクリーンな方法は何ですか?
java - HK2 でサービスのプロキシを作成するにはどうすればよいですか
私は、Jersey 2.x と、Jersey に組み込まれている HK2 を使用しています。注釈でマークされたサービスの特定のメソッドを装飾する必要があります。つまり、そのようなメソッド呼び出しの前後にいくつかの追加アクションを実行したいと考えています。残念ながら、HK2 には AOP 機能がありません。ファクトリをサービスのインターフェイスにバインドし、ファクトリのprovide
メソッドが呼び出されるたびにサービスのプロキシを作成できると考えました。ただし、工場で機能するにはいくつかのものが必要です。
1) プロキシを作成するためのサービスのクラスとインターフェース
2)ServiceLocator
すべてのサービスの依存関係を適切に注入するインスタンス
そして、私は両方を持つ方法がわかりません。を使用してファクトリをバインドするbindFactory(MyFactory.class)
と、サービスに関する情報を渡すことはできませんが、ServiceLocator インスタンスをそれに注入することはできます。そして、使用してファクトリをバインドするとbindFactory(new MyFactory(Service.class, ServiceImpl.class))
、サービスに関する情報が得られServiceLocator
ますが、そのサービスを適切に作成するためのインスタンスがありません。HK2 はファクトリ インスタンスに何も注入せず、とにかく ServiceLocator インスタンスを取得する方法がわかりません。 AbstractBinder を使用して、バインド中にファクトリにロケーターを提供します。
提案や推奨事項をいただければ幸いです。サービスを一様にプロキシしたいと思ったのは私が初めてではないことを願っています。
java - Jersey で AbstractBinder を設定する方法
サーブレット/トムキャットのコンテキストで、Jersey に HK2 バインディングを実装しようとしています。
私は、 org.glassfish.jersey.servlet.ServletContainer を拡張するサーブレットで行います:
...しかし、私は得る:
では、どうすれば独自の HK2 バインディングを行うことができますか?
なぜこの質問?(編集)
これは、Jersey の EntityManager および JPA 用です。
Netbeans では、AbstractFacade を生成すると、
... と :
しかし、サービスを呼び出すと、em は null です。だから、うまくいかないのは @PersistenceContext だと思いますか?
ソリューションを使用する場合チュートリアル: あなたの Web アプリケーション (Tomcat、EclipseLink) に JPA を配置し、残りの JSON 出力を提供するすべてが魅力のように機能しますが、私は static variable private static EntityManagerFactory emf;を使用するのは好きではありません。エンティティマネージャ用。
ありがとう。