64

私がオンラインで見つけたものから、Guice + Jersey統合の最先端は、両方のチームが行き詰まったように見える2008年以来停滞しています。問題の核心は、JAX-RSアノテーションがフィールドとメソッドの注入を実行することであり、これはGuice自身の依存性注入とうまく機能しません。

私が見つけたいくつかの例は、解明するのに十分ではありません:

  • IqbalyusufのJersey+Guice on Google App Engine Javaに関する投稿は、多くの定型文(手動でインジェクターを取得して呼び出す)に悩まされています。バインディングとインジェクションは、Guiceアノテーションを介して舞台裏で行われる必要があります。

  • Jonathan Curranの記事「Jersey、Guice、およびJSR-250を使用したRESTfulサービスの作成」は、はるかに新しい(2010)ため、希望を与えてくれましたが、GuiceServletModule内でJerseyサービスを開始する方法を示しただけでした。ただし、実際の依存性注入を行う例はありません。それは読者の練習問題として残されたと思います。Curranの投稿は、実際にはGuiceとJerseyを接続するための正しい最初のステップである可能性があるため、それから始める予定です。

  • 食欲をそそるジェームズ・ストラチャンはこう書いています

    JAX-RSは、Spring、Guice、GuiceyFruit、JBossMCなどの依存性注入フレームワークでうまく機能します。基本的にはどちらかを選択できます。

    しかし、開業医の観点からは真実であるという証拠は見当たりません。

私が不足しているのは、JAX-RSとGuiceアノテーションを組み合わせる方法に関する実際的な例と説明です。例えば:

  • ジャージーがこれを制御したいので、どのリソースでもコンストラクターインジェクションを使用できないと思います
  • @Injectを@PathParam、@QueryParamなどと組み合わせることができるかどうかはわかりません。
  • MessageBodyWriter実装でインジェクションを使用する方法

プロセスでどちらか一方を犠牲にすることなく、JerseyとGuiceを組み合わせた重要なアプリケーションの例を、できればソースとともに誰かが持っていますか?私は関係なくこの道を進んでいますが、ジャージーとギスのリストの断片は、私の前に来た他の人の仕事を繰り返しているように私に思わせます。

4

11 に答える 11

52

ジャージーとのGuice統合は停滞していません。反対のことが当てはまります。PaulとJerseyの背後にいる彼のコホートのおかげで、最新の1.7リリースには、Guiceベースのサーブレットと連携するための特別なJerseyServletModuleクラスが含まれています。JAX-RSリソースへのGuiceベースのコンストラクターインジェクションが機能します!問題は、JAX-RSリソースのコンストラクターで@QueryParamなどのJAX-RSアノテーションを使用していることです。あなたはそれを必要としません!シングルトンを含め、POJOインジェクションにはGuiceを使用します。次に、JAX-RSは、URLパス、クエリパラメータ、コンテンツタイプなどのHTTPベースのRESTfulAPIを解析するためのアイシングです。「産業強度」の例も必要ありません。GuiceとJerseyはどちらもすでにバトルテスト済みです。それがどのように機能するかを確認するには、完全な実例が必要です。次に、高度な機能を自分で試すことができます。Guice3.0とJersey1.7を使用した完全な例については、次のリンクを確認してください。これらはすべて最新リリースです。http:
//randomizedsort.blogspot.com/2011/05/using-guice-ified-jersey-in-embedded.html

于 2011-05-30T05:09:27.963 に答える
20

ここでGuice/Jersey / Jetty/Jacksonのサンプルアプリケーションを作成しました。

http://github.com/sunnygleason/j4-minimal

例を改善する方法について質問や提案がある場合は、github経由で私にメッセージを送ってください。目標は、これをJavaスタック上のRESTの非常にアクセスしやすい紹介にすることです。

これがお役に立てば幸いです-素晴らしい一日を!

-晴れ

于 2010-07-21T05:13:56.263 に答える
9

Sunnysサンプルアプリケーションに触発されて、ApacheTomcatなどのデプロイメントに標準のWARファイルを使用する同様のサンプルプロジェクトを作成しました。あなたはここでプロジェクトを見つけることができます:

https://github.com/danbim/template-guice-jersey-tomcat

楽しむ!ダニエル

于 2010-12-20T13:47:36.887 に答える
3

ジャージーがこれを制御したいので、どのリソースでもコンストラクターインジェクションを使用できないと思います

リソースの作成はjerseyによって管理されるため、guiceのコンストラクターインジェクションを使用することはできません。この場合@Inject、注入するコンストラクターパラメーターの前にジャージーのアノテーションを使用できます。

public NewsResource(@Inject NewsService service)
于 2010-04-21T13:04:31.020 に答える
3

最初はGuiceを使用してJersey注釈付きクラスでコンストラクターインジェクションを実行しようとして同様の問題が発生していましたが、かなり些細なアプリケーションではありましたが、最終的には機能するようになりました。

私はここの指示に従いました:jersey-guice javadoc

私の場合の秘訣は、web.xmlから標準のJersey構成(Jersey ServletContainerなど)を削除し、GuiceリスナーとGuiceフィルターのみを保持する必要があることでした。これを行うと、Guiceが呼び出されてJAX-RS注釈付きオブジェクトが作成され、Jerseyは期待どおりにJAX-RS注釈付きメソッド(@GETなど)を注入していました。

于 2010-11-18T22:28:33.590 に答える
3

Sunny Gleasonの例は素晴らしいですが、今では少し時代遅れになっています。

そこで、今日、GuiceとJerseyを互いにうまく機能させるために多くの苦労をした後、私はあなたが始めるために次のサンプルプロジェクトを作成しました。

https://github.com/MaliciousMustard/gradle-guice-jersey-jetty

このプロジェクトでは、次のテクノロジを使用しています。

  1. DIのガイド
  2. RESTfulAPIのジャージー
  3. POJOからJSONへのマッピングのためのJackson
  4. Webサーバー用のJetty
  5. Gradle

最も重要なことは、追加するすべての新しいリソースクラスを明示的に指定する必要がないことだと思います。スキャンされているパッケージにそれらを追加している限り(を見てくださいmalicious.mustard.modules.JerseyModule)、それらは自動的に検出されます!

于 2016-02-29T00:05:49.733 に答える
2

GWizardには、Jersey2とGuiceをすぐに統合できるモジュールが含まれています。完全なJAX-RSサービスの例を次に示します。

public class Main {
    @Path("/hello")
    public static class HelloResource {
        @GET
        public String hello() {
            return "hello, world";
        }
    }

    public static class MyModule extends AbstractModule {
        @Override
        protected void configure() {
            bind(HelloResource.class);
        }
    }

    public static void main(String[] args) throws Exception {
        Guice.createInjector(new MyModule(), new JerseyModule()).getInstance(Run.class).start();
    }
}

これはSquarespacejersey2-guiceアダプターに基づいていることに注意してください。これは、Jerseyの将来のポイントリリースでは正しく機能しない可能性があります。GWizardは、推奨されるRESTEasyJAX-RSモジュールも提供します。

これに関するブログエントリが役立つ可能性があります:http://blorn.com/post/107397841765/guice-and-jersey-2-the-easy-way

于 2015-01-07T10:31:23.723 に答える
1

これらの例はすべて私にとって素晴らしいスタートでしたが、Jersey-Guiceをコアとして使用する完全なMVCスタックが必要でした。私はしばらくの間それを洗練することに取り組んできました。今週の時点で、このMVCスタックはアーキタイプとしてMavenCentralリポジトリに完全にデプロイされています。これは、1つのMavenコマンドで新しいJersey-Guiceスタックを作成できることを意味します。

mvn archetype:generate \
    -DarchetypeGroupId=org.duelengine \
    -DarchetypeArtifactId=duel-mvc-archetype \
    -DarchetypeVersion=0.2.1

これにより、指定したパッケージ名で独自のプロジェクトが自動的に生成されるため、テンプレートプロジェクトを手動で編集する必要はありません。

詳細については、プロジェクトReadme.mdを参照してください:https ://bitbucket.org/mckamey/duel-mvc

私が使用しているデュアルサイドビュー(クライアント側テンプレートとサーバー側ビュー)の詳細は、https ://bitbucket.org/mckamey/duelにありますが、使用しているものに置き換えることができます。

于 2011-07-23T16:50:40.767 に答える
1

Jersey-GuiceプラグインJavadocは、かなり良い説明を提供します。

http://jersey.java.net/nonav/apidocs/1.1.5/contribs/jersey-guice/com/sun/jersey/guice/spi/container/servlet/package-summary.html

于 2012-03-08T05:20:36.157 に答える
0

軽量のJetty+Guice + Jackson Webサービスの興味深いプロジェクトを見つけました:https ://github.com/talis/jersey-common/

于 2012-03-10T12:27:04.500 に答える
0

Guice 4.2、Jetty 9.4、Jersey2.7のサンプルアプリケーションを作成しました。

https://github.com/bnsd55/jetty-jersey-guice-starter-kit

サニーが言ったように:

例を改善する方法について質問や提案がある場合は、github経由で私にメッセージを送ってください。目標は、これをJavaスタック上のRESTの非常にアクセスしやすい紹介にすることです。

于 2018-09-25T05:26:02.857 に答える