You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ch...@apache.org on 2013/06/13 07:02:56 UTC
[07/10] git commit: Fire events when the ServletContext is created or
destroyed
Fire events when the ServletContext is created or destroyed
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/c161b112
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/c161b112
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/c161b112
Branch: refs/heads/master
Commit: c161b112a43183ef4b1dbd64e130198c36180005
Parents: 8a42460
Author: Christian Kaltepoth <ch...@kaltepoth.de>
Authored: Wed May 22 17:22:48 2013 +0200
Committer: Christian Kaltepoth <ch...@kaltepoth.de>
Committed: Thu Jun 13 06:53:29 2013 +0200
----------------------------------------------------------------------
.../impl/ServletEventBridgeListener.java | 17 ++++-
.../context/ServletContextEventsObserver.java | 64 ++++++++++++++++
.../event/context/ServletContextEventsTest.java | 79 ++++++++++++++++++++
3 files changed, 158 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/c161b112/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/ServletEventBridgeListener.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/ServletEventBridgeListener.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/ServletEventBridgeListener.java
index 6993351..a339c5c 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/ServletEventBridgeListener.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/ServletEventBridgeListener.java
@@ -18,6 +18,8 @@
*/
package org.apache.deltaspike.servlet.impl;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@@ -30,10 +32,22 @@ import org.apache.deltaspike.servlet.api.literal.WebLiteral;
*
* @author Christian Kaltepoth
*/
-public class ServletEventBridgeListener extends EventEmitter implements HttpSessionListener
+public class ServletEventBridgeListener extends EventEmitter implements ServletContextListener, HttpSessionListener
{
@Override
+ public void contextInitialized(ServletContextEvent sce)
+ {
+ fireEvent(sce.getServletContext(), WebLiteral.INSTANCE, InitializedLiteral.INSTANCE);
+ }
+
+ @Override
+ public void contextDestroyed(ServletContextEvent sce)
+ {
+ fireEvent(sce.getServletContext(), WebLiteral.INSTANCE, DestroyedLiteral.INSTANCE);
+ }
+
+ @Override
public void sessionCreated(HttpSessionEvent se)
{
fireEvent(se.getSession(), WebLiteral.INSTANCE, InitializedLiteral.INSTANCE);
@@ -44,5 +58,4 @@ public class ServletEventBridgeListener extends EventEmitter implements HttpSess
{
fireEvent(se.getSession(), WebLiteral.INSTANCE, DestroyedLiteral.INSTANCE);
}
-
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/c161b112/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsObserver.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsObserver.java b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsObserver.java
new file mode 100644
index 0000000..9e9d1b4
--- /dev/null
+++ b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsObserver.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.servlet.impl.event.context;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.servlet.ServletContext;
+
+import org.apache.deltaspike.servlet.api.Destroyed;
+import org.apache.deltaspike.servlet.api.Initialized;
+import org.apache.deltaspike.servlet.api.Web;
+
+/**
+ * Application scoped observer which listens for {@link ServletContext} events on the CDI event bus.
+ *
+ * @author Christian Kaltepoth
+ */
+@ApplicationScoped
+public class ServletContextEventsObserver
+{
+
+ private final List<String> eventLog = new ArrayList<String>();
+
+ public void contextInitialized(@Observes @Web @Initialized ServletContext context)
+ {
+ eventLog.add("Initialized ServletContext: " + context.getServletContextName());
+ }
+
+ public void contextDestroyed(@Observes @Web @Destroyed ServletContext context)
+ {
+ eventLog.add("Destroyed ServletContext: " + context.getServletContextName());
+ }
+
+ public int getEventCount()
+ {
+ return eventLog.size();
+ }
+
+ public List<String> getEventLog()
+ {
+ return Collections.unmodifiableList(eventLog);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/c161b112/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsTest.java b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsTest.java
new file mode 100644
index 0000000..6a18c1c
--- /dev/null
+++ b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/event/context/ServletContextEventsTest.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.servlet.impl.event.context;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import javax.inject.Inject;
+
+import org.apache.deltaspike.test.category.WebProfileCategory;
+import org.apache.deltaspike.test.servlet.impl.Deployments;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptors;
+import org.jboss.shrinkwrap.descriptor.api.spec.servlet.web.WebAppDescriptor;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+/**
+ * Test which validates that CDI events are fired when the servlet context is created.
+ *
+ * @author Christian Kaltepoth
+ */
+@RunWith(Arquillian.class)
+@Category(WebProfileCategory.class)
+public class ServletContextEventsTest
+{
+
+ private final static String MODULE = "servlet-context-events-test";
+
+ @Deployment
+ public static WebArchive getDeployment()
+ {
+ return ShrinkWrap.create(WebArchive.class, "test.war")
+ .addAsLibraries(Deployments.getDeltaSpikeCoreArchives())
+ .addAsLibraries(Deployments.getDeltaSpikeServletArchives())
+ .addAsLibraries(Deployments.getTestSupportArchives())
+ .addClass(ServletContextEventsObserver.class)
+ .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml")
+ .addAsWebResource(new StringAsset("foobar"), "foobar.txt")
+ .setWebXML(new StringAsset(
+ Descriptors.create(WebAppDescriptor.class)
+ .displayName(MODULE)
+ .exportAsString()));
+
+ }
+
+ @Inject
+ private ServletContextEventsObserver observer;
+
+ @Test
+ public void shouldReceiveServletContextInitializedEvent()
+ {
+ assertEquals(1, observer.getEventCount());
+ assertTrue("Didn't receive expected event",
+ observer.getEventLog().contains("Initialized ServletContext: " + MODULE));
+ }
+
+}