1

現在の設定は、JBoss4.2.3.GA上のJBossSeam2.2です。

私はそのような2つのBeanを持っています:

@Name("mailingManager")
@Scope(ScopeType.PAGE)
public class MailingMgr {
  private Mailing selectedMailing;

  @Observer("mailing.letter.success")
  public void recordSuccess(final Object arg) {
    if (null != selectedMailing) { // store arg }
  }

  public void send() {
    selectedMailing = new Mailing();
    if ('EMAIL' == determineType()) {
      EmailSender mailer = (EmailSender) Component.getInstance(EmailSender.class);
      mailer.send(getAddresses());
    }
    // ... more options
  }
}

@Name("emailSender")
@Scope(ScopeType.PAGE)
public class EmailSender {
  public void send(final Set<String> addresses) {
    for (String addr : addresses) {
      // ... create a mail
      Events.instance().raiseEvent("mailing.letter.success", getGeneratedMail());
    }
  }
}

問題は、recordSuccess()が呼び出されたときselectedMailingは常にであるということですnull

selectedMailing回避策として、イベントをトリガーする可能性のあるコードを呼び出す前に、会話コンテキストで手動で設定し、呼び出される@In(required=false)前にフィールドに再度挿入するように注釈を付けrecordSuccessます。しかし、より洗練された解決策はありますか(デカップリングをそのまま維持する)?また、呼び出し元のBeanがイベントの処理に再利用されないのはなぜですか?

4

0 に答える 0