問題タブ [requestscope]
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 - @RequestScoped BeanでWeb層からEJBにヘッダー値を渡しますか?
リクエストから EJB への HTTP ヘッダーに含まれる情報を渡す必要がありますが、パラメーターを追加して、必要な場所に渡したくありません。そこで、ヘッダー値を保持するために RequestScoped Bean を使用しました。この実装は問題ありませんか、それとも @RecuestScoped Bean の概念を誤解していますか?
まず、インターセプター (Resteasy) を使用してヘッダーを取得し、それらをリクエスト スコープBeanに保存します。
これは豆です:
次に、EJB から値 (リクエストごとに異なる) にアクセスできます。
@RequestScopedの説明に基づいて、これは期待どおりに機能するはずです。
リクエスト スコープはアクティブです。
- Web アプリケーションの任意のサーブレットの service() メソッド中、任意のサーブレット フィルタの doFilter() メソッド中、およびコンテナが任意の ServletRequestListener または AsyncListener を呼び出すとき、
- Java EE Web サービスの呼び出し中、
- EJB のリモート メソッド呼び出し中、EJB の非同期メソッド呼び出し中、EJB タイムアウト メソッドの呼び出し中、および
- EJB メッセージ駆動型 Bean へのメッセージ配信中、および Java EE コンポーネント環境から取得した JMS トピックまたはキューの MessageListener へのメッセージ配信中。
caching - Ninject InRequestScope が間違ったインスタンスを返す場合がある
依存性注入を処理するためMVC 5 application
に使用する を開発しています。Ninject
アプリケーションは、SecurityService
現在ログインしているユーザーに関するさまざまな情報を提供する を定義します。Windows 認証を使用しています。
では、コードに飛び込みましょう。
NinjectWebCommon.cs
kernel.Bind<ISecurityService>().To<SecurityService>().InRequestScope();
セキュリティ バインディングの定義に注意してください。
SecurityService.cs
私の問題は、 がSecurityService
リクエストごとにインスタンス化されている場合でも、_CurrentUser.Username
が異なるインスタンスを受け取ることがありますcurrUsername
(つまり、どちらもテストを実行する有効な A/D ユーザーです)。
現在の回避策は!_CurrentUser.Username.Equals(currUsername)
、リクエスト認証されたユーザーがキャッシュされたユーザーと異なる場合、キャッシュされたユーザー インスタンスを無効にする必要があることですが、何が起こっているのか知りたいです。
好奇心からInThreadScope
、同じ問題が発生したことを確認しましたが、これは、IIS が使用するスレッド プールが別の要求に対して同じスレッドを提供する可能性があるという事実によって説明できると思います。
InRequestScope がこのように動作する理由を知っている人はいますか?
ありがとう。
[編集]
現在のユーザーがキャッシュされたユーザーと異なる場合のコール スタック:
ProjectName.Models.dll!ProjectName.Models.SecurityService.GetLoggedUserData() 行 54 C# ProjectName.Models.dll!ProjectName.Models.SecurityService.GetAndCheckUserData() 行 76 C# ProjectName.Models.dll!ProjectName.Models.SecurityService.IsAdmin. get() 行 98 C# ProjectName.Models.dll!ProjectName.Models.EntitiesCache.ProjectStatuses.get() 行 51 C# ProjectName.Services.dll!ProjectName.Services.ProjectService.CreateSelectorsDomain() 行 253 C# ProjectName.Services.dll! ProjectName.Services.ProjectService.ProjectService(ProjectName.Models.ISecurityService securityService, ProjectName.Models.IEntitiesCache entitiesCache, ProjectName.Models.IScopedDataAccess dataAccess, ProjectName.Services.IProjectTemplateService projectTemplateService) 33 行目 C# [外部コード] ProjectName.Web.dll!ProjectName 。ウェブ。NinjectWebCommon.PerformInjectionOn(オブジェクト インスタンス) 93 行目 C# ProjectName.Web.dll!ProjectName.Web.BaseController.BaseController() 21 行目 C# [外部コード]
同期のすべてのステップのロジック (no async
、await
、 no Tasks
)
jsf - JSF Bean が複数回作成される
jsf ページを開くと、catalog bean
2 回作成されます。では、なぜそれが起こるのですか?jsf ページ:
豆:
jersey - ServletModule なしで RequestScope を使用する
私は探検@RequestScoped
していて、インストールせずにそれを使用する方法があるかどうか疑問に思っていましたServletModule
. GuiceContainer
私は Guice 3.0 + Jersey 1.17 を使用していますが、おそらく&を使用したくないでしょうGuiceServletContextListener
。
Jerseyリクエストでのユーザー入力に応じて、リクエストごとにオブジェクトの作成(注入)が必要です。出来ますか?既存のものを GuiceGuiceContainer
のものに置き換える必要がある場合、パフォーマンスとセキュリティに関する考慮事項は何ですか?ServletContextListener
必要に応じて使用する方法があればRequestScope
、参考にしてもらえますか?
spring - Spring RequestContextListenerrequestDestroyed は、リクエスト スレッドが終了する前に呼び出されます
ServletRequestListener
スプリングを使用した Web アプリケーションで問題が発生しました。私はこれ(以下を参照)をRequestContextListener
(基本的には、RequestContextListener
パラメーターを除いて春からのコピーをfalse
取得しました)として持っていますtrue
。requestDestroyed
実際の Web メソッドが終了する前に呼び出されるようです。
問題: tomcat の開始後の最初の呼び出しのみが成功します。userProvider.get()
リクエストの範囲外のため失敗します。これはリクエスト スコープの Bean です。これはエラーです: リクエスト属性を要求できません - リクエストはもうアクティブではありません!
そして、私はこれをジャージのウェブリソースとして持っています:
以下は、2 つの連続した呼び出しの出力です。
私のセットアップで何かが間違っていると思います。誰でも助けることができますか?私は私の専門知識の終わりにいます。
セットアップは次のとおりです。
春 4.2.6. glassfish ジャージ 2.16 Tomcat 7.0.69。最新のジャージを使ってみました。でも同じ結果。
spring - Spring: requestscoped Bean メソッドのテストが呼び出されました
現在、Spring Boot 1.4 を使用しています。テストを作成していますが、次の状況を解決するための助けが必要です:
簡単にするために、リクエストスコープのBeanがあります。属性、セッター、およびゲッターを持つ単純なPOJOであるとしましょう。その Bean のセッターが要求に沿って 1 回だけ呼び出されていることを確認するテストを作成したいと考えています。
これが私のアプローチです:
ただし、「setaProperty」が呼び出されないことを示すテストは失敗しています。
myRequestScopeBean.getaProperty の値も確認しましたが、常に null を返します。
問題は、コントローラーに注入された MyRequestScopeBean のインスタンスが「実行」の終了後に存在しなくなったため、テストで注入されたものと同じではないことだと思います。
このセッターメソッドがリクエストに沿って呼び出されているかどうかを確認する方法はありますか?
前もって感謝します!
spring - リクエスト スコープ Bean のインスタンス化
Spring のリクエスト スコープ Bean は、コンテナが HTTP リクエストごとに 1 つの Bean インスタンスを作成することを意味します。
RequestScopedBean Bean があるとしましょう:
構成 :
私はRequestScopedBeanをSingleton Bean内で使用しています - そして、着信 HTTP リクエストごとに init() メソッドが呼び出されることを期待しています。そうではありません。init() メソッドは 1 回だけ呼び出されます。つまり、コンテナはRequestScopedBeanのインスタンスを 1 つだけ作成します。誰かが私に説明できますか:私が期待している動作が正しいかどうか、または構成の何が問題なのか.
spring - XML-config のメソッドの Spring RequestScope
次のモジュールがあります。
IUser
はインターフェースであり、これはこの Bean を使用するすべての java-config モジュールで正常に機能します。@Autowired IUser user
ただし、xml-config を使用した古いプロジェクトがあります。そこでは、Bean はデプロイ時に初期化されますが (これはもちろん null です)、要求時に正しいユーザーを取得するためのプロキシはありません。
私が今書いたこと(明らかに間違っています):
XML の UserHolder: getUser で Bean を定義する必要があります。しかし、これはインターフェースを返すので、そこでクラスを定義できません...
UserHolder を定義するモジュールの Spring バージョンは次のとおりです。
- 春: 4.2.6.RELEASE
- 春のセキュリティ: 4.1.0.RELEASE
UserHolder モジュールを使用する xml-config を持つモジュールの Spring バージョンは次のとおりです。
- 春: 3.2.15.RELEASE
- 春のセキュリティ: 3.2.9.RELEASE
どんな助けでも大歓迎です!
どうも!