summaryrefslogtreecommitdiffstats
path: root/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle
diff options
context:
space:
mode:
Diffstat (limited to 'tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle')
-rw-r--r--tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/BootstrapConfigurationException.java41
-rw-r--r--tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/RuntimeBootstrap.java113
-rw-r--r--tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatServerLifecycleListener.java40
-rw-r--r--tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatWebAppLifecycleListener.java249
-rw-r--r--tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/WebAppLifecycleListener.java152
5 files changed, 0 insertions, 595 deletions
diff --git a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/BootstrapConfigurationException.java b/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/BootstrapConfigurationException.java
deleted file mode 100644
index 39f24cba8f..0000000000
--- a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/BootstrapConfigurationException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *
- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
- *
- * Licensed 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.tuscany.tomcat.lifecycle.listener;
-
-import org.apache.tuscany.common.TuscanyException;
-
-/**
- * Signals an exception booting the Tuscany runtime hosted in a Tomcat instance
- *
- * @version $Rev$ $Date$
- */
-public class BootstrapConfigurationException extends TuscanyException {
-
- public BootstrapConfigurationException() {
- super();
- }
-
- public BootstrapConfigurationException(String message) {
- super(message);
- }
-
- public BootstrapConfigurationException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public BootstrapConfigurationException(Throwable cause) {
- super(cause);
- }
-
-}
diff --git a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/RuntimeBootstrap.java b/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/RuntimeBootstrap.java
deleted file mode 100644
index 16cad1cb1b..0000000000
--- a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/RuntimeBootstrap.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- *
- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
- *
- * Licensed 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.tuscany.tomcat.lifecycle.listener;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import javax.naming.Context;
-import javax.naming.Name;
-import javax.naming.RefAddr;
-import javax.naming.Reference;
-import javax.naming.spi.ObjectFactory;
-
-import org.apache.tuscany.common.monitor.MonitorFactory;
-import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
-import org.apache.tuscany.core.config.ModuleComponentConfigurationLoader;
-import org.apache.tuscany.core.config.JavaIntrospectionHelper;
-import org.apache.tuscany.core.system.builder.SystemComponentContextBuilder;
-import org.apache.tuscany.core.system.builder.SystemEntryPointBuilder;
-import org.apache.tuscany.core.system.builder.SystemExternalServiceBuilder;
-import org.apache.tuscany.core.runtime.RuntimeContext;
-import org.apache.tuscany.core.runtime.RuntimeContextImpl;
-
-/**
- * Bootstraps an SCA runtime hosted by a Tomcat instance. The runtime will be bound to JNDI and accessed by
- * {@link org.apache.tuscany.tomcat.lifecycle.listener.WebAppLifecycleListener}s that deploy web archives as module
- * components.
- * <p>
- * Tomcat is configured by adding the following to <code>server.xml</code> under the
- * <code>GlobalNamingResources</code> element:
- *
- * <pre>
- * &lt;Resource name=&quot;TuscanyRuntime&quot; auth=&quot;Container&quot; type=&quot;org.apache.tuscany.core.runtime.RuntimeContext&quot;
- * description=&quot;Tuscany Runtime&quot;
- * factory=&quot; org.apache.tuscany.tomcat.lifecycle.listener.RuntimeBootstrap&quot;
- * monitor=&quot;[monitor factory]&quot; loader=&quot;[configuration loader]&quot;/&gt;
- * </pre>
- *
- * @version $Rev$ $Date$
- */
-public class RuntimeBootstrap implements ObjectFactory {
-
- public static final String RUNTIME_NAME = "TuscanyRuntime";
-
- public RuntimeBootstrap() {
- }
-
- public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment)
- throws BootstrapConfigurationException {
- if (!RUNTIME_NAME.equals(name)) {
- throw new BootstrapConfigurationException("Tuscany Runtime must be configured with JNDI address of " + RUNTIME_NAME);
- }
- MonitorFactory monitorFactory = null;
- ModuleComponentConfigurationLoader configurationLoader = null;
-
- Reference ref = (Reference) obj;
- if (!RuntimeContext.class.getName().equals(ref.getClassName())) {
- throw new BootstrapConfigurationException("Invalid runtime configuration");
- }
- RefAddr monitorAddr = ref.get("monitor");
- RefAddr loaderAddr = ref.get("loader");
- if (loaderAddr == null) {
- throw new BootstrapConfigurationException("No configuration laoder specified in Tomcat configuration");
- }
- if (monitorAddr != null) {
- try {
- Class monitorFactoryClass = JavaIntrospectionHelper.loadClass(monitorAddr.getContent().toString());
- monitorFactory = (MonitorFactory) monitorFactoryClass.newInstance();
- } catch (ClassNotFoundException e) {
- throw new BootstrapConfigurationException("Unable to find monitor factory class specified in Tomcat configuration", e);
- } catch (InstantiationException e) {
- throw new BootstrapConfigurationException("Error initializing monitor factory in Tomcat configuration", e);
- } catch (IllegalAccessException e) {
- throw new BootstrapConfigurationException("Error initializing monitor factory in Tomcat configuration", e);
- }
- }
-// try {
-// Class configurationLoaderClass = JavaIntrospectionHelper.loadClass(loaderAddr.getContent().toString());
-// configurationLoader = (ConfigurationLoader) configurationLoaderClass.newInstance();
-// } catch (ClassNotFoundException e) {
-// throw new BootstrapConfigurationException("Unable to find configuration loader class specified in Tomcat configuration", e);
-// } catch (InstantiationException e) {
-// throw new BootstrapConfigurationException("Error initializing configuration loader in Tomcat configuration", e);
-// } catch (IllegalAccessException e) {
-// throw new BootstrapConfigurationException("Error initializing configuration loader in Tomcat configuration", e);
-// }
- // create the SCA Runtime and have it bound in the global JNDI context
- return new RuntimeContextImpl(monitorFactory, null, createBuilders(),null);
- }
-
- /**
- * Creates a collection of bootstrap builders
- */
- private List<RuntimeConfigurationBuilder> createBuilders() {
- List<RuntimeConfigurationBuilder> builders = new ArrayList();
- builders.add((new SystemComponentContextBuilder()));
- builders.add(new SystemEntryPointBuilder());
- builders.add(new SystemExternalServiceBuilder());
- return builders;
- }
-}
diff --git a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatServerLifecycleListener.java b/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatServerLifecycleListener.java
deleted file mode 100644
index 0da95bde17..0000000000
--- a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatServerLifecycleListener.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- *
- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
- *
- * Licensed 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.tuscany.tomcat.lifecycle.listener;
-
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
-
-/**
- * This class manages the lifecycle of the SCA container in Tomcat.
- * @deprecated
- */
-public class TomcatServerLifecycleListener implements LifecycleListener {
- //private CoreModuleContext containerModuleContext;
-
- /**
- * Constructor
- */
- public TomcatServerLifecycleListener() {
- }
-
- /**
- * @see org.apache.catalina.LifecycleListener#lifecycleEvent(org.apache.catalina.LifecycleEvent)
- */
- public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
- }
-}
diff --git a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatWebAppLifecycleListener.java b/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatWebAppLifecycleListener.java
deleted file mode 100644
index d1e7d8de39..0000000000
--- a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/TomcatWebAppLifecycleListener.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/**
- *
- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
- *
- * Licensed 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.tuscany.tomcat.lifecycle.listener;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.catalina.Context;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.deploy.FilterDef;
-import org.apache.catalina.deploy.FilterMap;
-import org.apache.tuscany.common.monitor.impl.NullMonitorFactory;
-import org.apache.tuscany.common.resource.ResourceLoader;
-import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
-import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
-import org.apache.tuscany.core.builder.impl.DefaultWireBuilder;
-import org.apache.tuscany.core.config.ModuleComponentConfigurationLoader;
-import org.apache.tuscany.core.config.impl.ModuleComponentConfigurationLoaderImpl;
-import org.apache.tuscany.core.context.AggregateContext;
-import org.apache.tuscany.core.context.CoreRuntimeException;
-import org.apache.tuscany.core.context.EventContext;
-import org.apache.tuscany.core.context.webapp.HTTPSessionExpirationListener;
-import org.apache.tuscany.core.context.webapp.TuscanyRequestFilter;
-import org.apache.tuscany.core.context.webapp.TuscanyWebAppRuntime;
-import org.apache.tuscany.core.runtime.RuntimeContext;
-import org.apache.tuscany.core.runtime.RuntimeContextImpl;
-import org.apache.tuscany.core.system.builder.SystemComponentContextBuilder;
-import org.apache.tuscany.core.system.builder.SystemEntryPointBuilder;
-import org.apache.tuscany.core.system.builder.SystemExternalServiceBuilder;
-import org.apache.tuscany.core.system.loader.SystemSCDLModelLoader;
-import org.apache.tuscany.model.assembly.AssemblyFactory;
-import org.apache.tuscany.model.assembly.AssemblyModelContext;
-import org.apache.tuscany.model.assembly.ModuleComponent;
-import org.apache.tuscany.model.assembly.impl.AssemblyFactoryImpl;
-import org.apache.tuscany.model.assembly.impl.AssemblyModelContextImpl;
-import org.apache.tuscany.model.assembly.loader.AssemblyModelLoader;
-import org.apache.tuscany.model.scdl.loader.SCDLModelLoader;
-import org.apache.tuscany.model.scdl.loader.impl.SCDLAssemblyModelLoaderImpl;
-import org.osoa.sca.ServiceRuntimeException;
-
-//FIXME This is a temporary hack to bootstrap the runtime in a Tomcat environment and do some bringup testing, the real bootstrap code is
-// still under construction
-
-/**
- * Responsible for initializing web applications as module components in a
- * Tomcat instance. When a web app is being loaded in Tomcat, this listener
- * receives a callback to register a corresponding module component and set up
- * the appropriate Servlet filters in the web context.
- * <p/>
- * Note that Tomcat loads this class in the standard (common/lib) classloader
- * even though the context classloader is that of the web app being loaded.
- * Consequently, the transitive closure of class references must not include
- * <tt>ModuleContext</tt> or <tt>ModuleManager</tt>
- * <p/>
- * TODO decide if we want to set this up as a Tomcat listener or as a web app
- * listener Setting this up as a web app listener allows users to set the
- * context path, avoiding a performance hit for SCA event processing in contexts
- * where it is not used. The downside is the potential for user error. For
- * example, SCA event filters must be manually configured. We probably should
- * provide both options
- * FIXME fix the exception handling
- */
-public class TomcatWebAppLifecycleListener implements LifecycleListener {
-
- private final static String SYSTEM_MODULE_COMPONENT = "org.apache.tuscany.core.system";
-
- /**
- * Constructor
- */
- public TomcatWebAppLifecycleListener() {
- }
-
- /**
- * Callback for receiving web application events. When a web app containing
- * an SCA configuration is initialized, a module component is created and
- * appropriate SCA filters are set for in the web context. If a web app stop
- * event is received, the corresponding module component is deregistered from
- * the system.
- */
- public void lifecycleEvent(LifecycleEvent event) {
- String lifecycleEventType = event.getType();
- Object lifecycleEventSource = event.getSource();
-
- if (Lifecycle.START_EVENT.equals(lifecycleEventType) && lifecycleEventSource instanceof Context) {
-
- // The web app is starting
- Context context = (Context) lifecycleEventSource;
- try {
-
- // Get the application classloader
- ClassLoader applicationClassLoader = Thread.currentThread().getContextClassLoader();
- ResourceLoader resourceLoader = new ResourceLoaderImpl(applicationClassLoader);
-
- // Check if the web app contains an sca.module file
- URL url;
- try {
- url = resourceLoader.getResource("sca.module");
- } catch (IOException e) {
- url = null;
- }
- if (url != null) {
- // The Web app has an sca.module file
- // Get the module component name from the context
- String moduleComponentName = context.getPath().substring(1);
- try {
-
- // Create an assembly model factory
- AssemblyFactory modelFactory=new AssemblyFactoryImpl();
-
- // Create an assembly model loader
- List<SCDLModelLoader> scdlLoaders=new ArrayList<SCDLModelLoader>();
- scdlLoaders.add(new SystemSCDLModelLoader());
- AssemblyModelLoader modelLoader=new SCDLAssemblyModelLoaderImpl(scdlLoaders);
-
- // Create an assembly model context
- AssemblyModelContext modelContext = new AssemblyModelContextImpl(modelFactory, modelLoader, resourceLoader);
-
- // Create system configuration builders
- List<RuntimeConfigurationBuilder> configBuilders = new ArrayList();
- configBuilders.add((new SystemComponentContextBuilder()));
- configBuilders.add(new SystemEntryPointBuilder());
- configBuilders.add(new SystemExternalServiceBuilder());
-
- // Create a runtime context and start it
- RuntimeContext runtimeContext = new RuntimeContextImpl(new NullMonitorFactory(), scdlLoaders, configBuilders,new DefaultWireBuilder());
- runtimeContext.start();
-
- // Get the system context
- AggregateContext systemContext = runtimeContext.getSystemContext();
-
- // Load the system module component
- ModuleComponentConfigurationLoader loader = new ModuleComponentConfigurationLoaderImpl(modelContext);
- ModuleComponent systemModuleComponent = loader.loadSystemModuleComponent(SYSTEM_MODULE_COMPONENT, SYSTEM_MODULE_COMPONENT);
-
- // Register it with the system context
- systemContext.registerModelObject(systemModuleComponent);
-
- // Get the aggregate context representing the system module component
- AggregateContext systemModuleComponentContext = (AggregateContext) systemContext.getContext(SYSTEM_MODULE_COMPONENT);
- systemModuleComponentContext.registerModelObject(systemModuleComponent.getComponentImplementation());
- systemModuleComponentContext.fireEvent(EventContext.MODULE_START, null);
-
- // Load the SCDL configuration of the application module
- String uri = context.getPath().substring(1);
- ModuleComponent moduleComponent = loader.loadModuleComponent(moduleComponentName, uri);
-
- // Register it under the root application context
- runtimeContext.getRootContext().registerModelObject(moduleComponent);
- AggregateContext moduleContext=(AggregateContext)runtimeContext.getContext(moduleComponent.getName());
- moduleContext.registerModelObject(moduleComponent.getComponentImplementation());
-
- // Create a Tuscany runtime and store it in the servlet
- // context
- TuscanyWebAppRuntime tuscanyRuntime = new TuscanyWebAppRuntime(moduleContext);
- context.getServletContext().setAttribute(TuscanyWebAppRuntime.class.getName(), tuscanyRuntime);
-
- // Start the runtime and the module component context
- tuscanyRuntime.start();
- try {
- //moduleContext.start();
-
- moduleContext.fireEvent(EventContext.MODULE_START, null);
-
- } finally {
- tuscanyRuntime.stop();
- }
-
- // Set up the SCA web app filter and listener
- FilterDef def = new FilterDef();
- def.setDescription("SCA Filter");
- def.setFilterClass(TuscanyRequestFilter.class.getName());
- def.setFilterName("__modContext");
- def.setDisplayName("SCA Filter");
- FilterMap map = new FilterMap();
- map.setFilterName("__modContext");
- map.setURLPattern("/*");
- context.addFilterDef(def);
- context.addFilterMap(map);
- context.addApplicationListener(HTTPSessionExpirationListener.class.getName());
-
- } catch (CoreRuntimeException e) {
- throw new ServiceRuntimeException(e);
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if (Lifecycle.STOP_EVENT.equals(lifecycleEventType) && lifecycleEventSource instanceof Context) {
-
- // The web app is stopping
- Context context = (Context) lifecycleEventSource;
- try {
-
- // Get the tuscany runtime from the servlet context
- // If the servlet context contains a tuscany runtime then this is a
- // Tuscany app
- TuscanyWebAppRuntime tuscanyRuntime = (TuscanyWebAppRuntime) context.getServletContext().getAttribute(
- TuscanyWebAppRuntime.class.getName());
- if (tuscanyRuntime != null) {
-
- // Get the module component name from the servlet context
- try {
- // Start the runtime
- tuscanyRuntime.start();
- try {
- // Stop the module context
- AggregateContext aggregateContext = tuscanyRuntime.getModuleComponentContext();
- aggregateContext.fireEvent(EventContext.MODULE_STOP, null);
- aggregateContext.stop();
- } finally {
-
- // Stop the runtime
- tuscanyRuntime.stop();
-
- // Cleanup the servlet context
- context.getServletContext().removeAttribute(TuscanyWebAppRuntime.class.getName());
- }
-
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
-}
diff --git a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/WebAppLifecycleListener.java b/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/WebAppLifecycleListener.java
deleted file mode 100644
index 0e9a80f13d..0000000000
--- a/tags/java-stable-20060304/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/lifecycle/listener/WebAppLifecycleListener.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- *
- * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
- *
- * Licensed 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.tuscany.tomcat.lifecycle.listener;
-
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import org.apache.catalina.Context;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.deploy.FilterDef;
-import org.apache.catalina.deploy.FilterMap;
-import org.apache.tuscany.common.TuscanyRuntimeException;
-import org.apache.tuscany.core.config.ConfigurationException;
-import org.apache.tuscany.core.context.AggregateContext;
-import org.apache.tuscany.core.context.EventContext;
-import org.apache.tuscany.core.context.webapp.HTTPSessionExpirationListener;
-import org.apache.tuscany.core.context.webapp.TuscanyRequestFilter;
-import org.apache.tuscany.core.context.webapp.TuscanyWebAppRuntime;
-import org.apache.tuscany.core.runtime.RuntimeContext;
-import org.apache.tuscany.core.runtime.RuntimeMonitor;
-import org.apache.tuscany.model.assembly.ModuleComponent;
-
-/**
- * Responsible for initializing web applications as module components in a Tomcat instance. When a web app is being
- * loaded in Tomcat, this listener receives a callback to register a corresponding module component and set up the
- * appropriate Servlet filters in the web context.
- * <p>
- * Note that Tomcat loads this class in the standard (common/lib) classloader even though the context classloader is
- * that of the web app being loaded.
- */
-public class WebAppLifecycleListener implements LifecycleListener {
-
- private RuntimeContext runtime;
-
- private RuntimeMonitor monitor;
-
- // ----------------------------------
- // Constructors
- // ----------------------------------
-
- public WebAppLifecycleListener() {
- // locate runtime in the global naming context
- javax.naming.Context context = null;
- try {
- context = (javax.naming.Context) (new InitialContext()).lookup("java:/");
- runtime = (RuntimeContext) context.lookup(RuntimeBootstrap.RUNTIME_NAME);
- monitor = runtime.getMonitorFactory().getMonitor(RuntimeMonitor.class);
- } catch (NamingException e) {
- // FIXME need bootstrap logging;
- return;
- }
- }
-
- /**
- * Callback for receiving web application events. When a web app containing an SCA configuration is initialized, a
- * module component is created and appropriate SCA filters are set for in the web context. If a web app stop event
- * is received, the corresponding module component is deregistered from the system.
- */
- public void lifecycleEvent(LifecycleEvent event) {
- String lifecycleEventType = event.getType();
- Object lifecycleEventSource = event.getSource();
-
- if (Lifecycle.START_EVENT.equals(lifecycleEventType) && lifecycleEventSource instanceof Context) {
- // The web app is starting
- Context context = (Context) lifecycleEventSource;
- String name = context.getPath().substring(1);
- try {
- ModuleComponent moduleComponent = null;// FIXME runtime.loadModuleComponent(name, "sca.module");
- if (moduleComponent == null) {
- return; // not an SCA module component
- }
- // create the module component
- runtime.registerModelObject(moduleComponent);
- AggregateContext aggregateContext = (AggregateContext) runtime.getContext(moduleComponent.getName());
- TuscanyWebAppRuntime tuscanyRuntime = new TuscanyWebAppRuntime(aggregateContext);
- context.getServletContext().setAttribute(TuscanyWebAppRuntime.class.getName(), tuscanyRuntime);
- // Start the runtime and the module component context
- tuscanyRuntime.start();
- try {
- aggregateContext.start();
- aggregateContext.fireEvent(EventContext.MODULE_START, null);
- } finally {
- tuscanyRuntime.stop();
- }
- // Set up the SCA web app filter and listener
- FilterDef def = new FilterDef();
- def.setDescription("SCA Filter");
- def.setFilterClass(TuscanyRequestFilter.class.getName());
- def.setFilterName("__modContext");
- def.setDisplayName("SCA Filter");
- FilterMap map = new FilterMap();
- map.setFilterName("__modContext");
- map.setURLPattern("/*");
- context.addFilterDef(def);
- context.addFilterMap(map);
- context.addApplicationListener(HTTPSessionExpirationListener.class.getName());
- } catch (ConfigurationException e) {
- e.addContextName(name);
- monitor.log(e);
- return;
- } catch (TuscanyRuntimeException e) {
- e.addContextName(name);
- monitor.log(e);
- return;
- }
- } else if (Lifecycle.STOP_EVENT.equals(lifecycleEventType) && lifecycleEventSource instanceof Context) {
- // The web app is stopping
- Context context = (Context) lifecycleEventSource;
- // Get the tuscany runtime from the servlet context
- TuscanyWebAppRuntime tuscanyRuntime = (TuscanyWebAppRuntime) context.getServletContext().getAttribute(
- TuscanyWebAppRuntime.class.getName());
- if (tuscanyRuntime == null) {
- return; // not an SCA module
- }
- try {
- // Stop the module context
- tuscanyRuntime.start();
- AggregateContext aggregateContext = tuscanyRuntime.getModuleComponentContext();
- aggregateContext.fireEvent(EventContext.MODULE_STOP, null);
- aggregateContext.stop();
- } catch (TuscanyRuntimeException e) {
- monitor.log(e);
- } finally {
- try {
- tuscanyRuntime.stop();
- } catch (TuscanyRuntimeException e) {
- monitor.log(e);
- } finally {
- // Cleanup the servlet context
- context.getServletContext().removeAttribute(TuscanyWebAppRuntime.class.getName());
- }
- }
-
- }
- }
-}