1

私は3つのBeanを持っていますが、すべて同じメソッドシグネチャを持っています。

import javax.ejb.Singleton;
import javax.ejb.Startup;
@Startup    //  Eager initialization
@Singleton
public class ApplicationManager
{
    private void onRemoveUserLoginSession(@Observes @Removed UserLoginSession userLoginSession) {
        logger.info("ApplicationManager.onRemoveUserLoginSession");
    }

}

@SessionScoped
public class ManageEventOrWorkflowNotFoundLogConversations
{
    private void onRemoveUserLoginSession(@Observes @Removed UserLoginSession userLoginSession) {
        logger.info("ManageEventOrWorkflowNotFoundLogConversations.onRemoveUserLoginSession");
    }
}

@Dependent
public class ManageEventOrWorkflowNotFoundLogConversation
{
    private void onRemoveUserLoginSession(@Observes @Removed UserLoginSession userLoginSession) {
        logger.info("ManageEventOrWorkflowNotFoundLogConversation.onRemoveUserLoginSession");
    }
}

イベントが発生すると、ApplicationManager#onRemoveUserLoginSessionのイベントオブザーバーのみがイベントを受信します(たとえば、他の2つのメソッドはどちらもイベントを受信しません)。

ApplicationManagerでイベントオブザーバーを削除すると、他の2つのメソッドのそれぞれがイベントを受け取ります。

@Startup    //  Eager initialization
@Singleton
public class ApplicationManager
{
    private void onRemoveUserLoginSession(UserLoginSession userLoginSession) {
        logger.info("ApplicationManager.onRemoveUserLoginSession");
    }

}

イベントを起動するBeanは次のとおりです。

@SessionScoped
public class SessionManager implements UserLoginSession
{
    @Inject @Removed Event<UserLoginSession> sessionRemovedEvent;

    @PreDestroy private void sessionDestroyed() {
        this.sessionRemovedEvent.fire(this);
    }
}

なぜこうなった?

4

0 に答える 0