ejbCreateメソッドのEJB 3.0バージョンとは

古いEJB 2.1コードをEJB 3.0に移行したいのですが、ejbCreateメソッドに設定エラーがある程度処理されています。そのメソッドのEJB 3バージョンはありますか?

編集:EJB 2.xでは、ejbCreateはCreateExceptionをスローする可能性があります。 @PostConstructなどのドキュメントに基づいて、私はもうチェックされた例外をスローすることはできません。私は今すぐEJBを使用してコードを移行できない場合、どのように私はこれを処理することができます。

Edit2:フロントエンドは特に残念なことにチェックされているCreateExceptionを処理します。

3

3 答え

@PostConstruct
public void anyName() {
    //initialization code, dependencies are already injected
}

No only the name is arbitrary, you can have several @PostConstruct methods in one EJB - however the order of invocation is unspecified, so be careful and try to stick with one method. UPDATE:

この注釈で注釈できるメソッドは1つだけです。

6
追加された
"クラスがサービスに入れてはならない未確認例外をスローする" /annotation/PostConstruct.html "rel =" nofollow noreferrer ">ドキュメントをご覧ください。なぜチェックされた例外を最初に使用したいのですか?また、Springではいくつかの @PostConstruct メソッドを持てませんことはできませんが、残念ながらEJBでは使用できません。
追加された 著者 Tomasz Nurkiewicz,
EJB 3ではejbCreateと100%機能的に同等ではないようです。私たちの場合、フロントエンドをリファクタリングすることなくEJBをリファクタリングすることはできません。解決策が私の問題の一部を解決するので、私はまだこの答えを受け入れるつもりです。
追加された 著者 Stefan,
目的は、EJBに問題があるかどうかをクライアントに知らせることでした。
追加された 著者 Stefan,
私はチェック例外を使いたくない。しかし、EJBを使用するコードは、チェックされている2.x仕様に基づいてCreateExceptionを処理します。私は現在、そのコードを変更することはできません。
追加された 著者 Stefan,
EJB 2.xでは、ejbCreateはCreateExceptionをスローする可能性があります。 @PostConstructのドキュメントに基づいて、私はもはやチェックされた例外をスローすることはできません。私は今すぐEJBを使用してコードを移行できない場合、どのように私はこれを処理することができます。
追加された 著者 Stefan,
EJB 2.xのejbCreate( - )の目的は何ですか? @PostConstruct メソッドは、EJBの新しいインスタンスが作成され、DIが発生したときにコンテナによって呼び出されます。おそらくあなたの設定を行うには @PostConstruct メソッドが必要で、ejbCreate( - )をシミュレートするモックアップ(通常のメソッド)が必要でしょうか?
追加された 著者 Piotr Nowicki,

注釈を使用してEJB 3.0ライフサイクル・コールバック・メソッドを使用する必要があります

@PostConstruct, @PreDestroy, @PostActivate or @PrePassivate

これらの注釈は、public、void、およびno-argのいずれかのメソッドに進むことができます。

2
追加された
公開する必要はありません。 PostConstructのjavadocから直接:「PostConstructが適用されるメソッドはpublic、protected、package privateまたはprivateのいずれかです。」 docs.oracle.com/javaee/5/api/javax/アノテーション/…
追加された 著者 ymajoros,

クライアントが明示的にejbCreateによってスローされたCreateExceptionを処理していて、EJB 3を使用したい場合は、ステートフルセッションBeanを使用している必要があります。ステートレスセッションBeanからのejbCreateの例外はクライアントに伝播されず、エンティティBeanはEJB 3のアノテーションをサポートしません。この場合、@Initアノテーションが必要です。

public interface MyHome extends EJBLocalHome {
  public MyInterface create(int arg) throws CreateException;
}

@Stateful
@LocalHome(MyHome.class)
public class MyBean {
  @Init
  public void init(int arg) throws CreateException {
    if (arg < 0) {
      throw new CreateException();
    }
  }
}
0
追加された
あなたが正しい; 「WebSphere Application Server EJBコンテナは、SLSB home.createからejbCreateをユーザーが見える方法で決して呼ぶことはありません」と言っていたはずです。 (唯一の例外は、遅延されたEJBの初期化と厳密な最小のpoolSizeを組み合わせたもので、これによりbeanプールが事前に設定され、ejbCreateがhome.createの最初のタッチ時に呼び出される可能性があります。例外を呼び出し側に伝達するのではなく、CreateExceptionとCNTR0033Eを発行してください)。
追加された 著者 Brett Kail,
EJBコンテナは、home.createからejbCreateを呼び出すことはありませんが、指定したとおりにプールにデータを挿入しながら呼び出すことができます。したがって、クライアントコードがEJBException(またはRemoteException)をキャッチしていて、getCause()がCreateExceptionかどうかを確認すると、クライアントの動作が変更され、目標を達成する方法がないことに同意します。それはあなたのクライアントコードがやっていることですか?もしそうなら、私の謝罪と、議論のためのおかげです。
追加された 著者 Brett Kail,
そうです、コンテナはhome.createからejbCreateを呼び出さないため、 "フロントエンドが特にCreateException [ejbCreateからスローされました]"を処理するという主張は無効です。 @PostConstructを使用して、必要な例外をスローすることができます。クライアントの動作は変更されません。
追加された 著者 Brett Kail,
私は理解していません。以前はステートレスセッションBeanを使っていましたか?その場合、ステートレスセッションBeanのhome.create()はejbCreateを呼び出さないため、クライアントはあなたのejbCreateメソッドからスローされたCreateExceptionを決して見ません。したがって、PostConstructの例外(例:EJBException)を使用することができ、クライアントの動作は変更されません。
追加された 著者 Brett Kail,
スケーリングとは何を意味しますか?
追加された 著者 Brett Kail,
残念ながら、私はスケーリングに問題があります。
追加された 著者 Stefan,
ステートフルBeanは、大量のユーザーがいるとうまくスケールされません。
追加された 著者 Stefan,
はい、そうでした。 Beanが適切にロードされたかどうかをチェックするコードがejbCreateにありました。 WAS6でのjarファイルの不足とそれに続くDuplicateHomeExceptionsに関する問題がありました。そこで、静的イニシャライザに存在するすべてのクラスをチェックし、その結果をejbCreateがチェックする必要がありました。
追加された 著者 Stefan,
私はあなたがそれがbeanを作成するたびにejbCreateを呼び出さないということを意味すると思います。それは本当です。それはまだそれをプールに入れて、それが私に必要なものであると呼んでいます。
追加された 著者 Stefan,
あなたは間違っている。コンテナはejbCreateを呼び出します。 すべてのを呼び出すだけでは作成できません。しかし、私は、コンテナがプールに移入しようとする最初からCreateExceptionをスローするので、Beanのインスタンスは決して存在せず、クライアントはCreateExceptionを取得します。 theserverside.com/discussions/thread.tss?thread_id=6632 を参照してください。
追加された 著者 Stefan,
決して少し強くはありません。私はSpecがコンテナにそれをすることを許していると確信しています。あなたはそれに頼ることはできませんが、createExceptionはまだwheatherに伝播される必要があります。そうでない場合、Containerは実際にejbCreateを呼び出しません。残念ながら、数年前に行った設計上の決定のいくつかは、EJBコンセプト/標準の理解が不足していました。今はアップグレードしようとしていますが、アプリケーションを中断することなくこれを実行する必要があります。
追加された 著者 Stefan,