問題タブ [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.
glassfish - ウェルドとHK2の関係は?
これはばかげた質問かもしれませんが、私はそれに困惑しており、どこにも明確な説明を見つけることができませんでした.
HK2 は、Glassfish V3 および V4 の基盤である JS330 を実装する依存性注入フレームワークです。私が見る限り、それはJerseyによって使用されています
Weld は CDI のリファレンス実装であり、依存性注入フレームワークでもあり、Glassfish でも使用できますか?
だから私の質問はこれらです
- それらは同じ仕様の異なる実装ですか?
- それらは異なる仕様の実装ですか?
- どのような状況で、どちらか一方を使用する必要がありますか?
Java EE のエコシステム全体に対する私の貧弱な理解に起因する質問であることは理解していますが、どんな回答でも大歓迎です
dependency-injection - CDI と HK2 が連携していない
これら 2 つが @Inject を使用してインジェクションを行う正確な方法を理解したかどうかはわかりませんが、開発の最初のフェーズで HK2 の @inject を使用して依存性注入を使用し、抽象バインダーを使用してリソースをバインドするアプリを最近開発しました。 、それはうまくいきました。それから、もう1つの値を注入したかったのです。@Inject を使用して基本的な String 値を注入する必要があり、この値は @Produces で注釈が付けられたメソッドから取得されました。しかし、そうすると、このエラーが発生します。
私は多くの場所を読みましたが、CDI と HK2 の連携に問題があることを多くの人が示唆しています。私はこの問題を解決できません。
上記のシナリオを 2 つの異なるスタンドアロン プログラムで試すと、問題なく動作しますが、それらを統合すると、上記のエラー メッセージが表示されます。
これは私がJavaのjiraで見つけたものです: https://java.net/jira/browse/GLASSFISH-20597
私の例は次のとおりです。
抽象バインダーでクラス b をバインドしました
これはうまくいきました。
しかし、同じシステムで@InjectをStringに追加するという以下の概念を試したところ、上記の例外でクラッシュしました
プロデューサークラス
jersey - hk2+jersey で作成されたオブジェクトを注入すると null が返される
私は次のリソースクラスを持っています
以下は UserAuthorizationRepository の私の実装です
そして、次のバインダーを ResourceConfig に登録しました
この後、リソース クラスの userRepository は正しくバインドされますが、UserAuthorizationRepositoryImpl の userIdToUserNameTable は null です。
誰も理由を知っていますか?前もって感謝します!
java - Jersey 2.12でHK2 ServiceLocatorを取得するには?
リソースまたはサービスとしてジャージーに関与していないクラスのシングルトン インスタンスを作成したいのですが、その依存関係をジャージー ServiceLocator から注入したいと考えています。
このクラスを手動で ResourceConfig コンストラクターに登録できます。ResourceConfig は次のように Grizzly ファクトリ メソッドに渡されます。
残っている問題は、Jersey ServiceLocator への参照を取得する方法です。これにより、createAndInitialize() を呼び出して、依存関係が注入されたオブジェクトを取得できます。以前のJerseyバージョンには、もちろんサービスロケーターへのアクセスを提供するApplicationHandlerを期待するコンストラクターバリアントがあったことがわかりました(それをどのように初期化するかは別の問題です)。また、親 ServiceLocator を渡そうとしたこともわかりますが、もちろん、解決は子 -> 親ロケーターから行われ、他の方向では行われないため、Jersey @Contract および @Service タイプではないため、親にオブジェクトを要求することは失敗します。ここに表示されます。
GrizzlyHttpServerFactory 以外のものを使用する必要がありますか? あきらめて、シングルトンの依存関係を手動で配線する必要がありますか?
java - カスタム ファクトリー HK2 DI とジャージーの使用
Jersey アプリケーションで HK2 コンテナーを使用しています。カスタム ファクトリ メソッドを使用して、HK2 コンテナーから注入されたインスタンスを取得する必要があります。例えば 、
これが私のコードです:
このようにする必要がある理由は、時々、依存関係を持つクラスを手動で割り当てるためです。このように、@Inject を使用するたびに null が返されます。たとえば、 new BusinessLogic() を使用すると、@Inject のロガーは null になります。ILogge を取得するには、ビジネスロジックもバインドし、IOC を使用する必要があります。
私はこのようなものが必要です:
MyApplication に登録したインスタンスを取得するには、DependencyResolver を使用する必要があります。
助言がありますか。前もって感謝します...
java - @Service アノテーション付きクラスを注入する Jersey Hk2
私の人生では、Jersey with hk2 を取得して @Service アノテーション付きクラスを自動的に検出し、それらを注入することはできません。スタック オーバーフロー、ジャージー、hk2 のドキュメントに関するすべてのアドバイスに従おうとしましたが、まだ運がありません。シンプルなエコー サービスをジャージー リソースに挿入しようとしています。スケルトンは、Jersey の単純な webapp maven アーキタイプから生成されます。これを拡張しようとしました。これは私がこれまでに持っているものです:
pom.xml
web.xml
my.package.jerseytest.application.Application
my.package.jerseytest.service.EchoService
my.package.jerseytest.resource.MyResource
私は、抑制剤ジェネレーターが実際に実行され、その出力を生成することを確認しましたが、Tomcat サーバーの GETtinghttp://localhost:8080/sandbox/webapi/myresource
を実行すると、
私が見逃しているアイデアはありますか?助けていただければ幸いです:(
注意!私は知っている
- ServiceLocator はどのようにして HK2 で @Service と @Contact を自動的に見つけますか?
- HK2 アノテーションが処理されない
- https://hk2.java.net/inhabitant-generator.html
- https://hk2.java.net/2.2.0-b25/getting-started.html
- https://java.net/jira/browse/HK2-165
しかし、彼らは私を助けませんでした...
java - jersey 2.0でhk2を使用して定数を注入するにはどうすればよいですか?
jerseyでHK2を使用して定数をクラスに注入するにはどうすればよいですか? Guiceを使用すると、次のようなクラスを持つことができます
そして、インジェクターで次のように構成します
HK2 に相当するものは何ですか?
java - カスタム hk2 InjectionResolver を使用してアプリケーション構成を注入する
前回の質問のフォローアップのようなものです。JSR-330 標準アノテーションと jersey にバンドルされている HK2 フレームワークを使用して、アプリケーション構成データを挿入しようとしています。
InjectionResolver
理想的には、注釈のカスタムを作成したいと思います。これは、またはオブジェクトでNamed
必要な値を検索し、他の場所で読み取ったデータから入力します。私の最初の試みでは、次のようなインスタンスを作成しましたMap
Properties
Application
そして、私のようにInjectionResolver
見えます
私の問題はそれapplication.getProperties()
が空であることです。何が問題なのですか?また、クラスをバインドする代わりに、インジェクターのインスタンスをバインドできますか? Map
そうすれば、データをパラメーターとして渡すインスタンスを構築できます。