# Java EE 6 Observer Pattern / Events With CDI (JSR-299/JSR-330) and EJB 3.1

1. You will have to define an event class first. It can be any POJO you like:public class HelloEvent {    private String message;    public HelloEvent(String message) {        this.message = message;    }    public String getMessage() {        return message;    }}2. An event has to be fired by an injected javax.enterprise.event.Event class. It can be injected into an EJB 3.1:@Named("messenger")@Statelesspublic class HelloMessenger {    @Inject Event<HelloEvent> events;    public void hello(){        events.fire(new HelloEvent("from bean " + System.currentTimeMillis()));    }} 3. The event can be consumed by another Session Bean / managed bean. You only have to use the @Observes annotation: @Statelesspublic class HelloListener {    public void listenToHello(@Observes HelloEvent helloEvent){        System.out.println("HelloEvent: " + helloEvent);    }}4. You can access the EJB 3.1 directly - without any backing beans. You only have to use the name (messenger) from the @Named annotation in the JSF 2.0 page and bind the action to the method (hello()) name:    <h:body>        <h:form>            <h:commandButton value="Fire!" action="#{messenger.hello}"/>        </h:form>[...] The project (CDIEJB3Events) was implemented in few minutes with NetBeans 6.8, tested with Glassfish v3 and pushed into: http://kenai.com/projects/javaee-patterns/. The entire WAR (JSF 2.0 , EJB 3.1, CDI) is 8 kB small. The initial deployment took (897 ms): INFO: Initializing Mojarra 2.0.2 (FCS b10) for context '/CDIEJB3Events'INFO: Loading application CDIEJB3Events at /CDIEJB3EventsINFO: CDIEJB3Events was successfully deployed in 897 milliseconds.
