問題タブ [session-bean]
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 - セッションBeanの静的変数の制限
セッションBeanコードで静的変数を使用することはできません。この制限は恣意的ですか、それとも基本的ですか?なぜ?
よろしくお願いします
jakarta-ee - Java-EE6:サブプロジェクトからステートレスBeanを呼び出す適切な方法は何ですか?
私のエンタープライズアプリケーション(E-APP)は、私のE-APPとスタンドアロンのJava SEファットクライアント間のインターフェイスライブラリとして機能する追加のクラスライブラリプロジェクト(CLP)を備えています(E-APPはCLPのビルドされたjarファイルを参照します) 。ここで、E-APPにあるセッションBeanのメソッドを呼び出す必要がありますが、E-APPのみがCLPを参照しているため、これらのBeanクラスにアクセスできません。この問題をどのように解決しますか?CLPクラスはアプリケーションサーバー上にjarファイルとして存在しますが、JNDIリモート呼び出しを実行しますか?または、この場合に依存性注入を使用する方法はありますか?
ejb-3.0 - ステートレス Bean からステートフル セッション Bean を作成する
コンテキストは次のとおりです。
クライアント アプリケーションは、ステートレス セッション Bean を使用して、EJB サーバー アプリケーションにログインします。ログインが成功した場合、クライアントは、個人データに対していくつかのトランザクションを実行するために、ステートフル セッション Bean を取得する必要があります。ただし、クライアントがこのセッション Bean を手動で呼び出して認証なしでトランザクションを実行できないように、ログイン メソッドがこのステートフル セッション Bean の新しいインスタンスを返すようにする必要があります。出来ますか ?
私のステートレス Bean には、次のコードがあります。
検索は常に失敗します。何が間違っているのかわかりません...
jpa - ステートレス セッション Bean - 複数の呼び出しの停止
したがって、BalusCのこの投稿から、ステートレス セッション Bean が JSF によってアクセスされたときにデータ ストア (DB など) を継続的にスラッシングするのを防ぐ方法 (複数の呼び出しを行う可能性があります) を読んだので、コードを実装しました。 BalusCによって投稿された内容(およびこの問題に関して私が見た「ベスト プラクティス」からの他のフォーラム投稿)の精神にあると考えたいと思います。
私のステートレス セッション Bean は次のようになります。
編集:シリアルアクセスを確実にするために、関連する部分に同期ブロックを追加しましたが、これはシングルトンのように感じ始めています。データストアへの複数の呼び出しに関連するこの問題に他の人がどのように対処したかを知りたいです。
具体的には、チェックされる「ダーティ」フラグを作成しました。DB が更新された場合、ダーティ フラグは (DB の更新によって) true に設定されます。ダーティ フラグが検出されると、フラグは false に戻されるため、DB への呼び出しは 1 回だけ行われます。したがって、DB のスラッシングは発生しません。
私の質問は次のとおりです:私がやったこと、これは解決策を解決するための適切な「ベストプラクティス」ですか、それとも私が気付いていないより賢い方法はありますか? 私は、古い「J2EE」ブルー プリント デザイン パターンと、Java EE 6 のコンテキスト内で欠落している可能性のある注釈の観点から考えています。
session - セッションスコープのBeanから.getSessionMap()を試行するときのIllegalStateException
私はJavaとJSFを初めて使用します。IllegalStateExceptionについてサポートが必要です。シナリオは次のとおりです。
私の現在のプロジェクトでは、アプリケーションメニュー用に次のセッションスコープBeanを使用しています。
ロジックのある時点で、メニューを更新する必要があるので、次のようにします。
Beanは正常に構築されますが、上記のように手動で更新しようとすると、updateメソッドの1行目にIllegalStateExceptionが発生します。updateMenu()
メニューが最初に作成されたときに同じ呼び出しでセッションマップを取得できるため、何が問題なのかわかりません。
また、NetBeansデバッガを使用すると、MenuBeanのインスタンスが正しくリカバリされていることがわかります。
助けてくれませんか?
java - OGS でセッション Bean のクラスタリング、ロード バランシング、およびフェイルオーバーを実現する方法
JBoss には、セッション Bean のクラスタリングとロード バランシングのための非常に簡単な注釈/構成のセットがあるようですが、GlassFish 3.x のドキュメントには同じ機能がありません。
MyStatefulBean
とMyStatelessBean
豆の両方があるとしましょう。どちらにも、次の機能が必要です。
- Bean のクラスターを (任意の数または規模で) 作成し、Bean をラウンド ロビンするソフトウェア ロード バランサーの背後に配置できるようにしたいと考えています。と
- クラスター化された Bean の 1 つが何らかの理由で失敗した場合、プールから取り出したい
GlassFish フリー/(コミュニティ版) でもこれをサポートしていますか? それとも自分で実装する必要がありますか?
最初の質問に接する: クラスタリング/負荷分散はステートフル Bean からでも意味がありますか? 考えてみると、そうではないと思います...しかし、そうでないことが証明されるまで、問題は両方のタイプの豆に当てはまります!
jsf - セッション Bean をシリアライズできません - 警告がスローされました
EclipseLink (JPA 2.0) を使用して、netbeans で JSF + Primefaces + tomcat 6.0.32 の環境を実行しています。
アプリケーションは正常に動作しますが、実行するたびに、セッション Bean をシリアライズできないという多くの警告が表示され、セッション Bean ごとに次のようなブロックが表示されます。
問題は、私のセッション Bean がすでに Serializable を実装していることです。これを解決するにはどうすればよいですか?
ありがとう !
---- 追加情報 2012 年 7 月 20 日 ----
セッション Bean から EntityManager への参照を作成している唯一のポイントは、次のように getter プロパティで jpaController を作成するときです。
これは、jpaController コンストラクターを次のように定義したためです。
jakarta-ee - サーブレット内のスタンドアロン POJO クラスからローカル EJB セッションをルックアップしようとしたときに、ルックアップ失敗エラーが発生しました
Java EE アプリケーションで、レイアウト マネージャー クラスをコーディングしました。このクラスから、EJB モジュールから EJB セッションにアクセスする必要がある場合があります。
これがコードで、これが生成されたコードです。
しかし、これを使用しようとすると、エラーが発生します
java.lang.RuntimeException: javax.naming.NamingException:
「java:global/CMS/CMS-ejb/MessagesFacade!cms.model.beans.MessagesFacadeLocal」の検索に失敗しました
SerialContext[myEnv= {java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [ルート例外は javax.naming.NameNotFoundException: CMS]
なぜこの問題が発生するのかわかりません。この問題を解決するには?
java - セッション タイムアウト時にセッション スコープ Bean を取得できません
でプロキシされたセッションスコープの Bean を取得する必要がありHttpSessionListener.sessionDestroyed()
ます。invalidate()
目的は、(またはタイムアウトによって) 破棄されたときにセッションのクリーンアップを行うことです。ContextLoaderListener
コンテキストを公開するために を追加し、を介して Bean を取得しましたWebApplicationContextUtils.getWebApplicationContext()
。
サーブレットで自分でセッションを無効にするとすべて正常に動作しますが、セッションがタイムアウトするとScope 'session' is not active for the current thread;
. サーブレットエンジンの内部スレッドによってクリーンアップが行われているために問題が発生することは理解していますが、HttpSessionListener
.
同じ質問がたくさんあるようですが、誰も解決策を見つけていません。これが、もう一度質問する理由です。
注釈を使用しているため、私のapplicationContext.xmlには Bean 宣言がありません。
これは、セッションがタイムアウトしたときにアクセスする必要があるBeanです。
これは、コントローラーcreate
またはdestroy
セッションを手動で行うコントローラーです。
そして、これはセッションの破棄をリッスンするHttpSessionListenerであり、セッション スコープ Beanの内容にアクセスする必要がありますAccess
。
以下の例外は で発生しv.getSerial()
ます。
最後に、これが私のweb.xmlです
既に述べたように、コントローラーのメソッドでセッションを無効にすると、すべてがうまくいきdestroy
ます。
更新 1: 可能な解決策が見つかりました
この問題は、Spring がセッション Bean にアクセスするためにリクエストが必要なために発生します。スレッドに関連付けられたコンテキストがありますが、リクエストはありません。
ここにはいくつかの選択肢があります。
- alexwenの提案に従って、インターフェース DisposableBean を実装します。これは、ビジネス ロジックをモデル オブジェクト[ここ]に移動することを意味します。
- alexwen
DestructionAwareBeanPostProcessor
によっても提案されているを実装します。これは、破棄される Bean が[here]であるかどうかを確認する必要があることを意味します。Access
- セッションから Bean を直接取得します。文書化されていない動作を使用して結果を達成するため、この方法はあまり良い方法ではありませんが、[ここ] で機能します。
- サーブレット リクエストをモックし、その属性を を通じてスレッドにバインドします
RequestContextHolder
。これはまた、文書化されていない動作につながり、将来のリリース[こちら]で変更される可能性があります。
最後の 2 つは文書化されていないため、選択しませんでした。また、特定の Bean の後にすべての Bean を清掃するという考えも好きではありませんでした。また、モデル Bean にビジネス ロジックを混在させたくないので@Service
、Bean を作成し、メソッドも持つ を作成することになりましたdestroy
。
このメソッドは、アクセス Bean の破棄を担当します。DisposableBean
にインターフェースを実装し、Bean にサービスを Access
注入して、サービスメソッドを呼び出しました。サービスは次のようになります。AccessManager
Access
destroy
java - アプリケーションのシャットダウン時に JSF セッション スコープ Bean をクリーンアップする
JSF アプリケーションのシャットダウン時または tomact のシャットダウン時に、アクティブなセッション オブジェクトを無効にしてクリーンアップする必要があります。以下は、アプリケーション スコープ Bean で記述したコードです。
そして、以下は上書きされます HttpSessionListener
このコードを実行すると
実行されていません。私は何かを逃した?ありがとう。