問題タブ [stateful-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 - wildlfy9で、スタンドアロンモード(クラスタリング)で2ノードでステートフルなejbセッションレプリケーションを行う方法
ear プロジェクトでクラスタリングを行いたい。私は、standalone-ha.xml 構成を使用して、クラスタリングでスタンドアロンを実行する 1 つのソリューションを見つけました。以下の記事に従いました。それはうまくいっています。 wildfly9 を使用したドメイン モードでのクラスタリング しかし、ear とステートフルな ejb を備えた ERP プロジェクトを実行したいと考えています。そのため、スタンドアロン モードでクラスタリングを実行します。
私は2台のマシンのIPが異なっています。
1.10.10.10.10 ノード 1
- 20.20.20.20 ノード 2
両方のマシンに wildfly9 があり、テスト目的で、Web コンポーネントを使用してステートフルな ejb プロジェクトのサンプルを 1 つ作成しました。
サーバーを実行するための私のコマンドは次のとおりです。
と
私のプロジェクト Test.war には、ステートフルな ejb と servlet と jsp があります。1) Bank.java は、リモートおよびローカル インターフェイスを実装するステートフルな ejb です。
2)OpenAccount.java はサーブレットです
3)index.jsp は、サーブレットにリダイレクトする以下の単一行を含むホームページです。
4) サーブレットから転送された operation.jsp は次のとおりです。
4) operationprocess.jsp は
5) web.xml に含まれるもの
クラスタリングを有効にするためのタグ。
6) クラスパスにも jboss-ejb-client.properties があります
これらすべてを使用して、両方のサーバーに Test.war をデプロイし、apache_mode_cluster 10.10.10.10/Test/ でアクセスしようとしました。それはejbを呼び出して出力を提供しますが、
1) 10.10.10.10 サーバーをシャットダウンし、ブラウザーを更新します (セッションを維持するためのブラウザー履歴をクリアしません)。
2) 10.10.10.10 がシャットダウンされ、履歴を消去し、再度 URL 10.10.10.10 にアクセスして、20.20.20.20 サーバー (つまり node2) にリダイレクトしてテストし、正常に実行されます。ただし、セッションは複製されません。
私を助けてください。standalone-ha.xml -- サブシステムの infinispan は次のとおりです。
java - ステートフル Bean をステートレスに注入する
Bean (SFSB) は決して Bean (SLSB) に注入されるべきではないことを読みました。しかし、次のことを達成する正しい方法は何ですか?@Stateful
@Stateless
second.businessMethod1()
と の間で永続化する必要がある状態があるsecond.businessMethod2()
ため、SecondEJB
ステートレスにすることはできません。businessMethod1()
また、businessMethod2()
メソッドを 1 つにマージする簡単な方法もありません。これはSecondEJB
、2 つ以上のビジネス メソッドを持つことができ、さまざまな組み合わせで呼び出すことができるためです。
実際に私はステートフルにしようとしましSecondEJB
たが、うまくいくようですが、メモリリークにつながります。注釈付きのSecondEJB
メソッドはありませんが、試してみましたがうまくいきませんでした。多くのインスタンスが作成され、削除されていません。なぜ漏れるのか誰か説明できますか?@Remove
@StatefulTimeout
SecondEJB
java - Map への EJB 3 セッション Bean 参照の格納
現在、私はEJB3.0 session beans
自分のアプリケーションで使用しています。通常、私は使用してBeanを検索しjndi name
、関連するメソッドを呼び出します。しかし最近、何Map
度も検索するのではなく、これらの参照を保存するように提案されました。
毎回参照を避けるために
Session Bean
参照を保存するのは良い習慣ですか?Map
それとも危険ですか?アプリケーションで発生する可能性がある場合、どのような問題が発生する可能性がありますか?
それが良い習慣であれば、私は別の懸念があります。
参照を
Map
格納するクラスは、モジュール Asession beans
の一部です。モジュール B1 ...Bnの一部です。そのため、参照を に保存するときにMap
検索した後、元に戻すことができます。その間、 モジュール Bnは再デプロイされますが、A はそのまま残ります。そのため、マップから Bean を検索した後 (エントリが含まれているため)、それを使用してClassCast Exception
スローされます。
その理由は何ですか?どうすれば回避できますか? JBOSS アプリケーション サーバー - jboss 5.1.0.GAを使用しています。
java - WildFly EJB UnknownSessionID
ejb の学習を始めたばかりで、問題が発生しています。私のejbコードは
テスト専用です。わかりましたので、80秒後にWildFlyから問題が発生しました
1) 80 秒後に ejb を削除し、ページを更新した後に新しいインスタンスを取得する必要があると考えました。または、80 秒後にインスタンスが非活性化されます (ハード ドライブに保存されます) ?
2) UnknownSessionID のこの問題は何ですか? WildFly が ID を session に割り当てたくないのはなぜですか?
3) このコード例では、2 つの異なるブラウザーを同時に使用すると、同じインスタンスが表示されるのはなぜですか? ステートフル Bean は one_bean-to-one_user として機能すると思いましたか? したがって、たとえば Google Chrome と Firefox では、i=0 から開始する必要があり、ブラウザ セッション間で同様のデータを取得するべきではありません。
私はあなたの助けに感謝します!
jakarta-ee - bean=null の場合、アプリ サーバーはステートフル Bean インスタンスを破棄して新しいインスタンスを作成しますか?
これは何百万回も尋ねられていることは知っていますが、これまでのところ、頭の中で質問に答えていません。コードで理解するのが最善だと思います。誰かが私の考えを確認してください:
クライアントのステートレス Bean:
クライアントのステートフル Bean:
セッションを破棄するには:
オラクルのドキュメントから
その名前が示すように、セッション Bean はインタラクティブ セッションに似ています。セッション Bean は共有されません。インタラクティブ セッションが 1 人のユーザーしか持てないのと同じように、クライアントは 1 つしか持てません。クライアントが終了すると、そのセッション Bean は終了したように見え、クライアントに関連付けられなくなります。
状態は、クライアント/Bean セッションの間保持されます。クライアントが Bean を削除すると、セッションが終了し、状態が消えます。ただし、この状態の一時的な性質は問題ではありません。クライアントと Bean の間の会話が終了すると、状態を保持する必要がないためです。
上記が正しければ、これから派生する私の質問は、Bean 参照が null に設定されている場合、App サーバーはステートフル Bean インスタンスを破棄して新しいインスタンスを作成しますか? これは次の理由によるものです。
- メソッドを実装しない限り、bean にアイテムを追加し、新しいクライアントの bean にとどまります
flush
が、それは正しい方法ではないと思います。 - ベスト プラクティスとして、Bean が独自の状態を変更してはならない、つまり
this.items
Bean 内に項目を追加してはならない場合、Stateful Bean を使用するより良い理由を思いつきませんか? - 「状態」はBeanインスタンス自体を意味しますか?
dependency-injection - EAR での @Remote の使用について混乱している
NetBeans を使用して、Oracle Web サイトの Java EE 6 チュートリアルに示されているショッピング カートの例を正常に実行できました。これは、EJB モジュールとアプリケーション クライアント モジュールの 2 つのモジュールを持つ EAR です。私が直面している混乱に焦点を当てるために、コードの詳細をいくつか省略しました。まず、以下がコードです。
EJB モジュールのリモート インターフェース
EJB モジュールのステートフル セッション Bean
アプリケーション クライアント モジュールのクライアント
今、私の混乱が始まります!!
混乱-1:チュートリアルでは、リモート クライアントであると説明されています。そうではありません!これは、EJB モジュールと同じ EAR 内にモジュールとしてパッケージ化されています。@Local の方が適切ではないでしょうか?
混乱-2: Glassfish がそれをクライアントとセッション Bean 間のリモート通信と見なす場合、クライアントのコンテナーは、EJB コンテナー内のセッション Bean の実際のインスタンスを表すセッション Bean の偽のインスタンス (つまり、プロキシ) を提供しますか? 「本物の」リモートケースのように?つまり、リモートはリモートを意味しますが、どうでもいいですか?
混乱-3:非 EE 環境でクライアントを作成し、それを EAR の外部から Bean と通信させて、「本物の」リモートを体験することを考えています。では、Eclipse を起動し、クライアントからコンテンツを EAR にコピーして Java SE 7 クライアント プログラムを作成する場合、これらの変更を行う必要がありますか?
依存性注入を置き換える
JNDIで
Java Standard Edition クライアント プロジェクトに Cart インターフェイスのソース コードを追加します。
混乱-4:その EAR ファイルの場所が見つかりません。NetBeans では、カートの下に 2 つの jar ファイルがあることがわかります。しかし、EAR ファイルはどこにあるのでしょうか。C:\glassfish-4.1.1\docs\javaee-tutorial\examples\ejb\cartから NetBeansでプロジェクトを直接開いてデプロイしました。
jakarta-ee - EJB 3.X ステートフル セッション Bean はどのように状態を維持しますか?
私はEJBの初心者です。HTTPSession がどのように維持されているかを理解しています (すべての Cookie Funda)。インターネットのすべてのリソースには、「ステートフル セッション Bean メンテナンス セッション(クライアントを記憶)」と書かれています。しかし、答えが見つかりませんでした。
どのようにステートフル セッション メンテナンス状態?
オラクルのドキュメントによると
オブジェクトの状態は、そのインスタンス変数の値で構成されます。ステートフル セッション Bean では、インスタンス変数は一意のクライアント/Bean セッションの状態を表します。クライアントはその Bean と対話 (「対話」) するため、この状態は多くの場合、会話状態と呼ばれます。
ありがとう。
java - EJB セッション Bean が正しく初期化されない (NameNotFoundException)
EJB セッション Bean が機能しない理由がわかりません。実際のエラー メッセージは EJBException: NameNotFoundException ですが、これは明確なメッセージではありません。
問題の原因となっている行を正確に突き止めましたが、その理由はわかりません。そこで、フォームからの入力値を追跡するセッション Bean を作成したいと考えました。
コードのスリム化されたバージョンは次のとおりです。
次に、インターフェイス dohicky を作成しました...
次に、テスト Bean 自体を作成しました...
私のテストサーブレットでは
Bean 定義の Bean 初期化メソッドの 1 行のコメントを外すと、エラーが発生します。だから、それと関係があることを知っています。//name.currentValue = "TestValue";
コメントアウトしたままにしておくと、サーブレットで t1.getName("New Value") をコーディングするとすぐに、同じエラーが発生します。
コメントアウトしたままにしておくと、Bean は期待どおりに動作します。初期化して、setAction と getAction を問題なく使用できます。
サーブレットでコーディングできるので、rrpInput クラスが正しいと確信しています。
私の入力フィールドクラスと関係があるに違いないと思いますが、何が原因かわかりませんでした。
java - 別のステートフル セッション Bean を使用して 1 つのステートフル セッション Bean を取得する方法
私は1つの機能を作りたいと思っています。つまり、ユーザーが1つのデバイスからパスワードを変更した場合、ログインしていた他のすべてのデバイスからログアウトする必要があります.
このためには、少なくとも他のすべてのセッション Bean オブジェクトを取得する必要があります。それらのいくつかのフィールドを使用して他のすべてのオブジェクトを取得する方法はありますか? すべての Bean で共通のユーザー名を使用できるためです。
いいえの場合、この機能を実装する他の方法はありません
(jboss コンテナーで ejb 3.0 を使用しています)
jakarta-ee - ステートフル セッション EJB の実際のユース ケース
セッション EJB の使用に関して、私がこれまで「実世界のアプリケーション」(私の記憶が正しければ) で見たものは、(CMT を介した) トランザクション ビジネス ロジック メソッドの「ファサード」として使用されるステートレス セッション EJB です。ただし、ステートフル セッション EJB は見たことがありません。実際、たとえば Java EE の書籍に見られる「ショッピング カート」としての使用は、永続ストレージに何らかの方法で状態を保存する必要があることを意味しているようです。しかし、これは、データベースでモデル化されているアプリケーション ドメインの他の部分もステートフルな EJB にマップする必要があることを示唆しているように思われますが、これは非常に複雑なようです。
では、あなたの経験/専門知識に基づいて、ステートフル セッション EJB が今日の (たとえば 2003 年とは対照的に) アプリケーションでどのように使用されているかについて、具体的な例を挙げていただけますか?