問題タブ [guice-servlet]

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.

0 投票する
8 に答える
19192 参照

guice-servlet - Jersey 2.0でguice-servletを使用するには?

Jersey 2.0でguice-servletを使用する方法を示すサンプルコードはありますか?

0 投票する
1 に答える
531 参照

guice - @SessionScoped 値を Guice でフィルターに挿入する

セッション中のユーザーのクラス保持値があります

これLoginFilterで、ユーザーログインでアクセスできるURLを確保する必要があります

次に、桟橋をブートストラップしようとすると、範囲外の例外がスローされました。セッションにUserSessionオブジェクトが含まれているかどうかを確認するにはどうすればよいですか? UserSessionクラスの属性名がわかりません。

0 投票する
1 に答える
1161 参照

mocking - テスト時に ServletScopes.scopeRequest と @RequestParameters を指定する

いくつかのレガシー コードを処理する必要があります。次のような関数が必要なポイントが1つあります

NewCodeAccessor.get() は、Guice から取得したオブジェクトを提供します。

Guice は以前に初期化されており、このクラスへの静的注入が要求されています。

本番コードではこれで問題なく動作しますが、今はテストを試みています。PageDataHandle はリクエスト スコープなので、テストは次のようになります。

PageDataHandle またはその依存関係が要求パラメーターの注入を要求しない限り、これは引き続き機能します。

ここで OutOfScope Exception が発生します: com.google.inject.ProvisionException: Guice provision errors:

1) カスタム プロバイダのエラー、com.google.inject.OutOfScopeException: 範囲指定されたオブジェクトにアクセスできません。現在、HTTP サーブレット リクエスト内にいないか、このリクエストのサーブレット フィルタとして com.google.inject.servlet.GuiceFilter を適用するのを忘れている可能性があります。

次のような独自のテスト モジュールを追加しようとしました。

しかし、RequestParameters はすでに ServletRequest によってバインドされているため、これは機能しません。

私ができることは次のとおりです。テスト用に作成したインジェクターの ServletModule を省略し、RequestScope を独自のカスタム スコープにバインドします。そうすれば、RequestParameters は他の誰にもバインドされないので、それをモックする独自のバインドを作成できます。しかし、それは良くないようです。誰かがこれを適切に行う方法を教えてもらえますか? ありがとう!

0 投票する
2 に答える
1172 参照

java - サーブレットコンテキストではなく、Java Webアプリで現在ログインしているユーザーを取得するにはどうすればよいですか?

現在のユーザー情報を取得した後、後で使用するためにセッションに保存しますが、ほとんどの状況では、サーブレット コンテキストではなく現在のユーザー情報を取得する必要があります。非サーブレット環境などでは、次のように呼び出す必要があります。

これに関するアイデアはありますか?

さらに質問があります。私は Guice サーブレットを使用していますが、現在のユーザーを注入する方法はありますか?

0 投票する
4 に答える
1620 参照

java - リクエスト スコープとスレッドを使用した注入

サーブレットリクエストスコープを使用して提供される依存関係を注入するビジネスクラスがいくつかあります。

問題は、サーブレット要求よりも長く存続するいくつかのスレッドでその bussines クラスを使用したいということです。それを行う最も透明な方法は何ですか?

0 投票する
1 に答える
985 参照

annotations - Guice と組み合わせた Servlet 3.0 アノテーション

私は従来の Guice アプリケーションを更新しようとしていますが、Servlet 3.0 アノテーションを考慮に入れる際に、何らかの好ましい方法があるかどうか疑問に思っていました。たとえば、私のアプリケーションには、次のように、Guice Module Factory メソッド configureServlets() で定義されているフィルター FooFilter があります。

上記のバインディングはまだ必要ですか、それとも @WebFilter サーブレット 3.0 アノテーションを使用して以下に干渉しますか?

現在、どの方法が好まれていますか? 彼らはお互いを台無しにしますか?

0 投票する
0 に答える
353 参照

guice-servlet - guice-persist を使用すると、エンティティへの更新が認識されないか、永続化されない

エンティティの値を更新してその更新を永続化しようとする guice-persist および guice-servlet (http-request スコープの jpa セッション) に問題がありますが、更新はデータベースに永続化されません。entityManager.flush()andを使用して書き込みを強制しようとしましたentityManager.getTransaction().commit()が、ログを見ると、http セッションが終了して jdbc 接続が解放されても、何も起こらないようです。
通常、休止状態が sql update ステートメントを発行することを期待しますが、更新は登録されないようです。私が奇妙に感じるのは、新しいエンティティの作成に問題がないことです。これは更新に影響しているように見えるだけです。

注入された UserDao を使用する Singleton スコープのサーブレットがありますProvider<EntityManager>

ここに私のpersistence.xmlがあります:

MySQL および Derby データベースを使用して、この問題を再現しました。

失敗する更新試行の例を次に示します。

DurableUser(以前の http セッションで問題なしで作成された) を取得し、フィールドを更新します。明示的なflush()andがあってもcommit()、休止状態は update ステートメントを発行しません。

更新されたフィールドを示すorg.hibernate.internal.util.EntityPrinterユーザーの をログに記録するログに気付きました。toString()それは、休止状態がエンティティが汚れていることを認識し、まだ変更を保持していないことを意味しますか?

新しいエンティティを正常に作成できるのに、既存のエンティティを更新できない理由を誰でも答えることができますか? これまでのところ、私は完全に困惑しています。

編集:セッションからのログは次のとおりです。

0 投票する
1 に答える
347 参照

rest - Guice 3.0 + JaxRS 2.0 を使用した REST API のバージョニング

HTTP リクエスト ヘッダーを使用してバージョン管理された REST API が必要です。

GET /someResource

バージョン: 1.0

このリソースの 2 つのバージョンがある場合、私の JaxRS Web アプリケーションは、要求されたバージョンのいずれかに適切な応答を提供できる必要があります。そのため、次のクラスがクラスパスの一部であることが期待されます。

ここで、Version ヘッダーに応じて、これらのリソース クラスのいずれかにリクエストをディスパッチしたいと思います。これは、サーブレットフィルターを使用して行われると思います。しかし、私は Guice を使用しているので、探しているのは要求ごとのインジェクターだと思います。

リクエストがバージョン 1.0 の場合、SomeResourceV1 のバインディングでインジェクターを使用します。それ以外の場合、リクエストがバージョン 2.0 の場合、SomeResourceV2 のバインディングでインジェクターを使用します

GuiceFilter をサブクラス化することで、必要なものを取得する方法があると思いますが、完全にはわかりません。誰かが前にこのようなことを試したことがありますか?