Author: jboynes
Date: Tue Feb 28 21:04:29 2006
New Revision: 381906

URL: http://svn.apache.org/viewcvs?rev=381906&view=rev
Log:
swag at Tomcat integration using a specialized Host implementation
added an additional ResourceLoader to AssemblyModelContext so loaders have 
access to both the runtime
classloader and one being used to load application artifacts

Added:
    
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java
   (contents, props changed)
      - copied, changed from r381711, 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHostListener.java
Removed:
    
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHostListener.java
Modified:
    
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilderTestCase.java
    
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
    
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/assembly/tests/JavaScriptAssemblyLoaderTestCase.java
    
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyModelContext.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyModelContextImpl.java
    
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyContextListener.java
    
incubator/tuscany/java/sca/tomcat/src/main/resources/org/apache/tuscany/tomcat/LocalStrings.properties
    
incubator/tuscany/java/sca/tomcat/src/test/java/org/apache/tuscany/tomcat/integration/TomcatIntegrationTestCase.java
    
incubator/tuscany/java/sca/tomcat/src/test/resources/app1/WEB-INF/classes/sca.module

Modified: 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilderTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilderTestCase.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilderTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilderTestCase.java
 Tue Feb 28 21:04:29 2006
@@ -48,7 +48,7 @@
 
     private AssemblyFactory factory = new AssemblyFactoryImpl();
     
-    private AssemblyModelContext assemblyContext = new 
AssemblyModelContextImpl(null, null,null); 
+    private AssemblyModelContext assemblyContext = new 
AssemblyModelContextImpl(null,null); 
     
     public JavaComponentContextBuilderTestCase() {
     }

Modified: 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
 Tue Feb 28 21:04:29 2006
@@ -83,7 +83,7 @@
 
     private static SystemAssemblyFactory systemFactory = new 
SystemAssemblyFactoryImpl();
 
-    private static AssemblyModelContext assemblyContext = new 
AssemblyModelContextImpl(null, null, null);
+    private static AssemblyModelContext assemblyContext = new 
AssemblyModelContextImpl(null, null);
 
     /**
      * Creates an initialized simple component

Modified: 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/assembly/tests/JavaScriptAssemblyLoaderTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/assembly/tests/JavaScriptAssemblyLoaderTestCase.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/assembly/tests/JavaScriptAssemblyLoaderTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/assembly/tests/JavaScriptAssemblyLoaderTestCase.java
 Tue Feb 28 21:04:29 2006
@@ -70,7 +70,7 @@
         super.setUp();
 
         
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-        modelContext = new AssemblyModelContextImpl(null, null,null);
+        modelContext = new AssemblyModelContextImpl(null,null);
     }
 
 }

Modified: 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockAssemblyFactory.java
 Tue Feb 28 21:04:29 2006
@@ -60,7 +60,7 @@
         impl.getComponentType().getServices().add(s);
         ConfiguredService cService = factory.createConfiguredService();
         cService.setService(s);
-        cService.initialize(new AssemblyModelContextImpl(null, null,null));
+        cService.initialize(new AssemblyModelContextImpl(null,null));
         sc.getConfiguredServices().add(cService);
         sc.setName(name);
         sc.setComponentImplementation(impl);

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java
 Tue Feb 28 21:04:29 2006
@@ -56,7 +56,7 @@
         this.modelContext=modelContext;
         this.modelLoader=this.modelContext.getAssemblyLoader();
         this.assemblyFactory=this.modelContext.getAssemblyFactory();
-        this.resourceLoader=this.modelContext.getResourceLoader();
+        this.resourceLoader=this.modelContext.getArtifactResourceLoader();
     }
     
     /**

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyModelContext.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyModelContext.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyModelContext.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyModelContext.java
 Tue Feb 28 21:04:29 2006
@@ -32,11 +32,18 @@
     AssemblyFactory getAssemblyFactory();
 
     /**
-     * Returns a loader for resources in the current environment
+     * Returns a loader for resources in the application environment
      *
      * @return a resource loader
      */
     ResourceLoader getResourceLoader();
+
+    /**
+     * Returns a loader for resources in the system environment.
+     *
+     * @return a loader for resources in the system environment
+     */
+    ResourceLoader getArtifactResourceLoader();
 
     /**
      * Returns a loader that can be used to load sub-models.

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyModelContextImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyModelContextImpl.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyModelContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyModelContextImpl.java
 Tue Feb 28 21:04:29 2006
@@ -25,24 +25,29 @@
  */
 public class AssemblyModelContextImpl implements AssemblyModelContext {
 
-    private AssemblyFactory assemblyFactory;
-    private AssemblyModelLoader assemblyLoader;
-    private ResourceLoader resourceLoader;
+    private final AssemblyFactory assemblyFactory;
+    private final AssemblyModelLoader assemblyLoader;
+    private final ResourceLoader resourceLoader;
+    private final ResourceLoader artifactLoader;
+
+    public AssemblyModelContextImpl(AssemblyModelLoader assemblyLoader, 
ResourceLoader resourceLoader) {
+        this(new AssemblyFactoryImpl(), assemblyLoader, resourceLoader, 
resourceLoader);
+    }
 
-    /**
-     * Constructor
-     *
-     * @param resourceLoader
-     */
     public AssemblyModelContextImpl(AssemblyFactory assemblyFactory, 
AssemblyModelLoader assemblyLoader, ResourceLoader resourceLoader) {
-        if (assemblyFactory!=null)
-            this.assemblyFactory = assemblyFactory;
-        else
-            this.assemblyFactory = new AssemblyFactoryImpl();
-        this.resourceLoader = resourceLoader;
+        this(assemblyFactory, assemblyLoader, resourceLoader, resourceLoader);
+    }
+
+    public AssemblyModelContextImpl(AssemblyFactory assemblyFactory, 
AssemblyModelLoader assemblyLoader, ResourceLoader resourceLoader, 
ResourceLoader artifactLoader) {
+        this.assemblyFactory = assemblyFactory;
         this.assemblyLoader = assemblyLoader;
-        if (assemblyLoader!=null)
+        this.resourceLoader = resourceLoader;
+        this.artifactLoader = artifactLoader;
+
+        // FIXME isn't this dangerous?
+        if (assemblyLoader!=null) {
             assemblyLoader.setModelContext(this);
+        }
     }
 
     /**
@@ -58,7 +63,11 @@
     public ResourceLoader getResourceLoader() {
         return resourceLoader;
     }
-    
+
+    public ResourceLoader getArtifactResourceLoader() {
+        return artifactLoader;
+    }
+
     /**
      * @see 
org.apache.tuscany.model.assembly.AssemblyModelContext#getAssemblyLoader()
      */

Modified: 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyContextListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyContextListener.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyContextListener.java
 (original)
+++ 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyContextListener.java
 Tue Feb 28 21:04:29 2006
@@ -42,11 +42,13 @@
     private final AssemblyFactory modelFactory;
     private final AssemblyModelLoader modelLoader;
     private final AggregateContext rootContext;
+    private final ResourceLoader systemLoader;
 
-    public TuscanyContextListener(AggregateContext rootContext, 
AssemblyFactory modelFactory, AssemblyModelLoader modelLoader) {
+    public TuscanyContextListener(AggregateContext rootContext, 
AssemblyFactory modelFactory, AssemblyModelLoader modelLoader, ResourceLoader 
systemLoader) {
         this.rootContext = rootContext;
         this.modelFactory = modelFactory;
         this.modelLoader = modelLoader;
+        this.systemLoader = systemLoader;
     }
 
     public void lifecycleEvent(LifecycleEvent event) {
@@ -60,7 +62,7 @@
 
     private void startContext(Context ctx) {
         ResourceLoader resourceLoader = new 
ResourceLoaderImpl(ctx.getLoader().getClassLoader());
-        AssemblyModelContext modelContext = new 
AssemblyModelContextImpl(modelFactory, modelLoader, resourceLoader);
+        AssemblyModelContext modelContext = new 
AssemblyModelContextImpl(modelFactory, modelLoader, systemLoader, 
resourceLoader);
         ModuleComponentConfigurationLoader loader = new 
ModuleComponentConfigurationLoaderImpl(modelContext);
 
         AggregateContext moduleContext;

Copied: 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java
 (from r381711, 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHostListener.java)
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java?p2=incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java&p1=incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHostListener.java&r1=381711&r2=381906&rev=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHostListener.java
 (original)
+++ 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java
 Tue Feb 28 21:04:29 2006
@@ -26,7 +26,9 @@
 import org.apache.catalina.ContainerEvent;
 import org.apache.catalina.Container;
 import org.apache.catalina.Context;
-import org.apache.catalina.Valve;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.util.StringManager;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -64,40 +66,28 @@
  *
  * @version $Rev$ $Date$
  */
-public class TuscanyHostListener implements LifecycleListener, 
ContainerListener {
+public class TuscanyHost extends StandardHost {
     private static final String SYSTEM_MODULE_COMPONENT = 
"org.apache.tuscany.core.system";
-    private static final Log log = 
LogFactory.getLog(TuscanyHostListener.class);
+    private static final Log log = LogFactory.getLog(TuscanyHost.class);
     private static final StringManager sm = 
StringManager.getManager("org.apache.tuscany.tomcat");
 
     private RuntimeContext runtime;
     private AssemblyModelLoader modelLoader;
     private AssemblyFactory modelFactory;
+    private ResourceLoader systemLoader;
 
-    public void lifecycleEvent(LifecycleEvent event) {
-        String type = event.getType();
-        if (Lifecycle.START_EVENT.equals(type)) {
-            startRuntime();
-            if (event.getLifecycle() instanceof Container) {
-                Container container = (Container) event.getLifecycle();
-                container.addContainerListener(this);
-            }
-        } else if (Lifecycle.STOP_EVENT.equals(type)) {
-            if (event.getLifecycle() instanceof Container) {
-                Container container = (Container) event.getLifecycle();
-                container.removeContainerListener(this);
-            }
-            stopRuntime();
-        }
+    public synchronized void start() throws LifecycleException {
+        startRuntime();
+        super.start();
     }
 
-    public void containerEvent(ContainerEvent event) {
-        if (Container.ADD_CHILD_EVENT.equals(event.getType()) && 
event.getData() instanceof Context) {
-            contextAdded((Context) event.getData());
-        }
+    public synchronized void stop() throws LifecycleException {
+        super.stop();
+        stopRuntime();
     }
 
     private void startRuntime() {
-        ResourceLoader resourceLoader = new 
ResourceLoaderImpl(getClass().getClassLoader());
+        systemLoader = new ResourceLoaderImpl(getClass().getClassLoader());
 
         // Create an assembly model factory
         modelFactory = new AssemblyFactoryImpl();
@@ -108,7 +98,7 @@
         modelLoader = new SCDLAssemblyModelLoaderImpl(scdlLoaders);
 
         // Create an assembly model context
-        AssemblyModelContext modelContext = new 
AssemblyModelContextImpl(modelFactory, modelLoader, resourceLoader);
+        AssemblyModelContext modelContext = new 
AssemblyModelContextImpl(modelFactory, modelLoader, systemLoader);
 
         // Load the system module component
         ModuleComponentConfigurationLoader loader = new 
ModuleComponentConfigurationLoaderImpl(modelContext);
@@ -156,11 +146,23 @@
         log.info(sm.getString("runtime.stopped"));
     }
 
+    public synchronized void addChild(Container child) {
+        if (!(child instanceof StandardContext)) {
+            throw new 
IllegalArgumentException(sm.getString("tuscanyHost.notContext"));
+        }
+        StandardContext ctx = (StandardContext) child;
+        ctx.addLifecycleListener(new 
TuscanyContextListener(runtime.getRootContext(), modelFactory, modelLoader, 
systemLoader));
+        super.addChild(child);
+    }
 
-    private void contextAdded(Context ctx) {
-        if (ctx instanceof Lifecycle) {
-            TuscanyContextListener contextListener = new 
TuscanyContextListener(runtime.getRootContext(), modelFactory, modelLoader);
-            ((Lifecycle) ctx).addLifecycleListener(contextListener);
+    public String toString() {
+
+        StringBuffer sb = new StringBuffer(132);
+        if (getParent() != null) {
+            sb.append(getParent().toString()).append('.');
         }
+        sb.append("TuscanyHost[").append(getName()).append(']');
+        return (sb.toString());
+
     }
 }

Propchange: 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/tomcat/src/main/java/org/apache/tuscany/tomcat/TuscanyHost.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: 
incubator/tuscany/java/sca/tomcat/src/main/resources/org/apache/tuscany/tomcat/LocalStrings.properties
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tomcat/src/main/resources/org/apache/tuscany/tomcat/LocalStrings.properties?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tomcat/src/main/resources/org/apache/tuscany/tomcat/LocalStrings.properties
 (original)
+++ 
incubator/tuscany/java/sca/tomcat/src/main/resources/org/apache/tuscany/tomcat/LocalStrings.properties
 Tue Feb 28 21:04:29 2006
@@ -15,4 +15,6 @@
 runtime.loadSystemFailed = Error loading system configuration:
 runtime.registerSystemFailed = Error registering system configuration:
 runtime.started = Started Tuscany runtime
-runtime.stopped = Stopped Tuscany runtime
\ No newline at end of file
+runtime.stopped = Stopped Tuscany runtime
+
+tuscanyHost.notContext = Child of a TuscanyHost must be a StandardContext
\ No newline at end of file

Modified: 
incubator/tuscany/java/sca/tomcat/src/test/java/org/apache/tuscany/tomcat/integration/TomcatIntegrationTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tomcat/src/test/java/org/apache/tuscany/tomcat/integration/TomcatIntegrationTestCase.java?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tomcat/src/test/java/org/apache/tuscany/tomcat/integration/TomcatIntegrationTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/tomcat/src/test/java/org/apache/tuscany/tomcat/integration/TomcatIntegrationTestCase.java
 Tue Feb 28 21:04:29 2006
@@ -26,6 +26,8 @@
 import org.apache.catalina.core.StandardService;
 import org.apache.catalina.startup.ContextConfig;
 
+import org.apache.tuscany.tomcat.TuscanyHost;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -72,12 +74,10 @@
         engine.setBaseDir(baseDir.getAbsolutePath());
         service.setContainer(engine);
 
+//        host = new TuscanyHost();
         host = new StandardHost();
         host.setName("localhost");
         host.setAppBase(appBase.getAbsolutePath());
         engine.addChild(host);
-
-        // add in the Tuscany specific components
-//        host.addLifecycleListener(new TuscanyHostListener());
     }
 }

Modified: 
incubator/tuscany/java/sca/tomcat/src/test/resources/app1/WEB-INF/classes/sca.module
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tomcat/src/test/resources/app1/WEB-INF/classes/sca.module?rev=381906&r1=381905&r2=381906&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tomcat/src/test/resources/app1/WEB-INF/classes/sca.module
 (original)
+++ 
incubator/tuscany/java/sca/tomcat/src/test/resources/app1/WEB-INF/classes/sca.module
 Tue Feb 28 21:04:29 2006
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2005 BEA Sytems Inc.
+  Copyright (c) 2005 International Business Machines
+
+  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.
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"; 
xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9";
+        name="test">
+
+</module>


Reply via email to