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>