diff --git a/cdi/events/pom.xml b/cdi/events/pom.xml
new file mode 100644
index 000000000..050b5a491
--- /dev/null
+++ b/cdi/events/pom.xml
@@ -0,0 +1,12 @@
+
+
+ 4.0.0
+
+ org.javaee7.cdi
+ cdi-samples
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ events
+
diff --git a/cdi/events/src/main/java/org/javaee7/cdi/events/EventReceiver.java b/cdi/events/src/main/java/org/javaee7/cdi/events/EventReceiver.java
new file mode 100644
index 000000000..8a28a1b43
--- /dev/null
+++ b/cdi/events/src/main/java/org/javaee7/cdi/events/EventReceiver.java
@@ -0,0 +1,8 @@
+package org.javaee7.cdi.events;
+
+/**
+ * @author Radim Hanus
+ */
+public interface EventReceiver {
+ String getGreet();
+}
diff --git a/cdi/events/src/main/java/org/javaee7/cdi/events/EventSender.java b/cdi/events/src/main/java/org/javaee7/cdi/events/EventSender.java
new file mode 100644
index 000000000..ecf31716d
--- /dev/null
+++ b/cdi/events/src/main/java/org/javaee7/cdi/events/EventSender.java
@@ -0,0 +1,8 @@
+package org.javaee7.cdi.events;
+
+/**
+ * @author Radim Hanus
+ */
+public interface EventSender {
+ void send(String message);
+}
diff --git a/cdi/events/src/main/java/org/javaee7/cdi/events/GreetingReceiver.java b/cdi/events/src/main/java/org/javaee7/cdi/events/GreetingReceiver.java
new file mode 100644
index 000000000..f7ff59d20
--- /dev/null
+++ b/cdi/events/src/main/java/org/javaee7/cdi/events/GreetingReceiver.java
@@ -0,0 +1,22 @@
+package org.javaee7.cdi.events;
+
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.event.Observes;
+import java.io.Serializable;
+
+/**
+ * @author Radim Hanus
+ */
+@SessionScoped
+public class GreetingReceiver implements EventReceiver, Serializable {
+ private String greet = "Willkommen";
+
+ void receive(@Observes String greet) {
+ this.greet = greet;
+ }
+
+ @Override
+ public String getGreet() {
+ return greet;
+ }
+}
diff --git a/cdi/events/src/main/java/org/javaee7/cdi/events/GreetingSender.java b/cdi/events/src/main/java/org/javaee7/cdi/events/GreetingSender.java
new file mode 100644
index 000000000..15b43692c
--- /dev/null
+++ b/cdi/events/src/main/java/org/javaee7/cdi/events/GreetingSender.java
@@ -0,0 +1,17 @@
+package org.javaee7.cdi.events;
+
+import javax.enterprise.event.Event;
+import javax.inject.Inject;
+
+/**
+ * @author Radim Hanus
+ */
+public class GreetingSender implements EventSender {
+ @Inject
+ private Event event;
+
+ @Override
+ public void send(String message) {
+ event.fire(message);
+ }
+}
diff --git a/cdi/events/src/test/java/org/javaee7/cdi/events/GreetingTest.java b/cdi/events/src/test/java/org/javaee7/cdi/events/GreetingTest.java
new file mode 100644
index 000000000..2c065c436
--- /dev/null
+++ b/cdi/events/src/test/java/org/javaee7/cdi/events/GreetingTest.java
@@ -0,0 +1,52 @@
+package org.javaee7.cdi.events;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.inject.Inject;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+/**
+ * @author Radim Hanus
+ */
+@RunWith(Arquillian.class)
+public class GreetingTest {
+ @Deployment
+ public static Archive> deploy() {
+ return ShrinkWrap.create(JavaArchive.class)
+ .addClasses(EventReceiver.class, EventSender.class, GreetingReceiver.class, GreetingSender.class)
+ .addAsManifestResource("beans.xml");
+ }
+
+ @Inject
+ private EventSender sender;
+
+ @Inject
+ private EventReceiver receiver;
+
+ @Test
+ public void test() throws Exception {
+ assertThat(sender, is(notNullValue()));
+ assertThat(sender, instanceOf(GreetingSender.class));
+
+ assertThat(receiver, is(notNullValue()));
+ assertThat(receiver, instanceOf(GreetingReceiver.class));
+
+ // default greet
+ assertEquals("Willkommen", receiver.getGreet());
+ // send a new greet
+ sender.send("Welcome");
+ // receiver must not belongs to the dependent pseudo-scope since we are checking the result
+ assertEquals("Welcome", receiver.getGreet());
+ }
+}
diff --git a/cdi/events/src/test/resources/arquillian.xml b/cdi/events/src/test/resources/arquillian.xml
new file mode 100644
index 000000000..30b3e876c
--- /dev/null
+++ b/cdi/events/src/test/resources/arquillian.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+ ${serverRoot:target/wildfly-8.0.0.CR1}
+ ${serverProfile:standalone-full.xml}
+
+
+
+
diff --git a/cdi/events/src/test/resources/beans.xml b/cdi/events/src/test/resources/beans.xml
new file mode 100644
index 000000000..aa8e57744
--- /dev/null
+++ b/cdi/events/src/test/resources/beans.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/cdi/pom.xml b/cdi/pom.xml
index d3c0e357f..b6ee7feee 100644
--- a/cdi/pom.xml
+++ b/cdi/pom.xml
@@ -34,5 +34,6 @@
alternatives-priority
nobeans-el-injection
nobeans-el-injection-flowscoped
+ events