Jo Desmet created OWB-1246:
------------------------------

             Summary: CDI Event are not observed across SessionScoped beans
                 Key: OWB-1246
                 URL: https://issues.apache.org/jira/browse/OWB-1246
             Project: OpenWebBeans
          Issue Type: Bug
          Components: Core, Events
    Affects Versions: 1.7.3
            Reporter: Jo Desmet


I have a simple setup with just one single Session that backs a JSF xhtml file. 
Within that I fire an event, expeting that both the same session, and any other 
session will receive the event on submitting.

However, oddly enough, I can see that during the firing of the event, only the 
current session receives it, not any other sessions. I am making sure I have 
two different sessions by using two different browsers (Safari and Firefox in 
this case).

See also https://stackoverflow.com/q/51027804/744133

 
{code:java}
package testevent;

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Named
@SessionScoped
public class TestEventSession implements Serializable {
private String message = "Start Message";
private String receivedMessage = "";

@Inject
@ForTest Event<String> messageEvent;

Logger LOG = LogManager.getLogger();

public void messageChanged(@Observes(notifyObserver = Reception.IF_EXISTS) 
@ForTest String message) {
LOG.info("messageChanged <-- "+message);
this.receivedMessage = message;
}

public String getReceivedMessage() {
return receivedMessage;
}

public String getMessage() {
LOG.info("getMessage --> "+message);
return message;
}

public void setMessage(String message) {
LOG.info("setMessage <-- "+message);
this.message = message;
LOG.info("Firing Message Change");
messageEvent.fire(message);
LOG.info("Done Firing Message Change");
}
}
{code}
{code:java}
<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html 
xmlns="http://www.w3.org/1999/xhtml";
xmlns:h="http://xmlns.jcp.org/jsf/html";
xmlns:f="http://java.sun.com/jsf/core";
>
<f:view transient="false">
<h:body>
<h:form>
<h:inputText value="#{testEventSession.message}" />
<h:outputText value="#{testEventSession.receivedMessage}" />
<h:commandButton value="Submit"/>
<h:button value="Refresh" />
</h:form>
</h:body>
</f:view>
</html>
{code}
{code:java}
 
package testevent; 
import static java.lang.annotation.ElementType.FIELD; 
import static java.lang.annotation.ElementType.METHOD; 
import static java.lang.annotation.ElementType.PARAMETER; 
import static java.lang.annotation.ElementType.TYPE; 
import static java.lang.annotation.RetentionPolicy.RUNTIME; 
import java.lang.annotation.Retention; import java.lang.annotation.Target; 
import javax.inject.Qualifier; 
@Qualifier @Retention(RUNTIME) @Target({METHOD, FIELD, PARAMETER, TYPE}) public 
@interface ForTest { }
{code}
 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to