私は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);
}
}
なぜこうなった?