2016-10-07 7 views
0

前提:スレッドセーフであるためには、EJB_Y(EJB_Xによって呼び出される)に「@Stateful」と注釈を付ける必要がありますか?

  1. ステートレスEJB_XはEJB_Y(例えば、 "@EJB EJB_Y")への注釈付きの参照が含まれてい

  2. EJB_Xが

  3. と仮定そのビジネスメソッドを呼び出す前にEJB_Yを初期化する必要があります そのEJB_Xは、(a)EJB_Yのビジネスメソッド、すなわち「マルチステップ」プロセス(?)を初期化し、その後に(b)を呼び出します。

QUESTION:

んEJB_Yは、スレッドセーフであるために "@Stateful" と注釈される必要がありますか?

注:
はそうEJB_Yは単純なPOJO(例えば、POJO_Y)もいるだろう - しかし、それはと思われる、ログ「@Interceptor」EJB_YのにEJB_Xの呼び出しを使用するクラスのアクセスメソッドのパラメータを持っているために、ビジネス方法は、EJB_YはEJBでなければなりません...

その他の情報(?):

。 EJB 3.1

b。 EJB_XはRESTメソッドを公開します

c。現在のWebLogic 12.1.3に追いやらJDKのは1.8.x

+0

コードを表示してください –

+0

なぜあなたのコンテキスト内にのみ存在し、状態を持つことができ、Spring BeanであるプロトタイプBeanを使用しないのですか? – Matt

+0

Thx、Steve C. - 残念なことに、もうひとつの制約はありません:* Springなし... - Java 8、Weblogic 12.1.3 Java ee container(Java ee 7のサブセット)、CDI ... – sairn

答えて

1

を実行している質問:

  1. あなたはEJB_Xとはどういう意味ですかはEJB_Yを初期化?これは、EJBを初期化するコンテナです。

そして、いくつかのポイント:RESTサービスが許可されているさらす

  1. EJBが、あなたのビジネスロジックをさらすビューのOracleの点から、それはで再考されなければならない「迅速かつ汚い」アプローチのようなものです(私は建築家試験からこの質問をよく覚えています)。簡素化するために、EJBはレストサービスのバックエンドである必要があります。または、Webサービスが統合レイヤーに残る必要があります。
  2. ステートレスEJBとそれ以降のステートレスEJBへのすべての呼び出しはスレッドセーフであり、スレッド安全性はコンテナ(この場合はweblogic)によって保証されているため、ステートフルにする必要はありません。 EJBワールド内でマルチスレッドが必要な場合@Singletonを探す
  3. SunとOracleのステートレスでステートフルな言葉は、少しでも誤解を招くことがありましたが、私はいつも会話がなく、言語は、それはSLSBからSFSBを起動しても意味がありません[UPDATE]

    それが:-)

ことができます。結局のところ、プールに住み、クライアント間で共有されるSLSBの性質のために、予期しない結果が生じるでしょう。また、SLSBの最も重要な利点の1つ、つまりスケーラビリティが失われます。

あなたのアーキテクチャーやデザインはよく分かりませんが、フロントエンドEJBを取り除き、アノテーションを使用してWebサービスとして動作するクラスを構造化することで、Webサービスレイヤーを再訪します。次に、EJBの世界にとどまりたい場合は、EJB呼び出しコンテキスト内のすべてのデータを渡してから、EJB自体からデータを取得します。

+0

"初期化する"とは、EJB_Yのメソッドを呼び出す前に、EJB_Yのプロパティを設定することを意味します。それが助けになるのか? – sairn