Title: [1036] trunk/servicemix-lwcontainer: Add LwContainerComponent, which replace the crappy ServiceMixComponent
Revision
1036
Author
gnt
Date
2005-12-07 09:22:30 -0500 (Wed, 07 Dec 2005)

Log Message

Add LwContainerComponent, which replace the crappy ServiceMixComponent 

Modified Paths

Added Paths

Property Changed

  • trunk/servicemix-lwcontainer/

Diff

Property changes: trunk/servicemix-lwcontainer

Name: svn:ignore
   + .classpath
.project
target

Modified: trunk/servicemix-lwcontainer/maven.xml (1035 => 1036)

--- trunk/servicemix-lwcontainer/maven.xml	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/maven.xml	2005-12-07 14:22:30 UTC (rev 1036)
@@ -7,25 +7,4 @@
 
   <goal name="nightly" prereqs="clean, jar:install, jbi:install, jar:deploy, jbi:deploy"/>
 
-  <postGoal name="java:compile">
-    <attainGoal name="xbean:generate" />
-  </postGoal>
-
-  <goal name="xbean:generate" description="Generates the XBean XSD, documentation and META-INF/services files.">
-    <path id="test.classpath">
-      <pathelement path="${maven.build.dest}" />
-      <pathelement path="${basedir}/target/classes" />
-      <pathelement path="${basedir}/target/test-classes" />
-      <path refid="maven.dependency.classpath" />
-    </path>
-
-    <taskdef name="xsdGenerate" classname="org.xbean.spring.generator.MappingGeneratorTask">
-      <classpath refid="test.classpath" />
-    </taskdef>
-    <xsdGenerate destFile="${basedir}/target/servicemix-lwcontainer-${pom.currentVersion}.xsd" namespace="http://servicemix.org/lwcontainer/1.0"
-    		classpathref="test.classpath" srcdir="${basedir}/src/main/java"  metaInfDir="${basedir}/target/generated/"/>
-  	<copy file="${basedir}/target/servicemix-jsr181-${pom.currentVersion}.xsd" todir="${basedir}/target/generated/"/>
-  	<copy file="${basedir}/target/servicemix-jsr181-${pom.currentVersion}.xsd" todir="${basedir}/../xdocs"/>    
-    <copy file="${basedir}/target/servicemix-jsr181-${pom.currentVersion}.xsd.html" todir="${basedir}/../xdocs"/>
-  </goal>
 </project>

Modified: trunk/servicemix-lwcontainer/project.properties (1035 => 1036)

--- trunk/servicemix-lwcontainer/project.properties	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/project.properties	2005-12-07 14:22:30 UTC (rev 1036)
@@ -2,5 +2,3 @@
 jbi.bootstrap.class.name = org.servicemix.lwcontainer.LwContainerBootstrap
 jbi.component.type=service-engine
 
-org.apache.commons.attributes.enable=true
-org.apache.commons.attributes.index.enable=true

Modified: trunk/servicemix-lwcontainer/project.xml (1035 => 1036)

--- trunk/servicemix-lwcontainer/project.xml	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/project.xml	2005-12-07 14:22:30 UTC (rev 1036)
@@ -175,22 +175,6 @@
         <version>${log4j_version}</version>
       </dependency>
 
-      <dependency>
-        <groupId>annogen</groupId>
-        <artifactId>annogen</artifactId>
-        <version>${annogen_version}</version>
-        <properties>
-          <scope>compile</scope>
-        </properties>
-      </dependency>
-      <dependency>
-        <groupId>qdox</groupId>
-        <artifactId>qdox</artifactId>
-        <version>${qdox_version}</version>
-        <properties>
-          <scope>compile</scope>
-        </properties>
-      </dependency>
     </dependencies>  
 
     <build>
@@ -201,22 +185,5 @@
             <excludes>
             </excludes>
         </unitTest>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                    <include>**/*.xml</include>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>target/generated</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <filtering>false</filtering>
-            </resource>
-        </resources>
     </build>
 </project>

Added: trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerBootstrap.java (1035 => 1036)

--- trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerBootstrap.java	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerBootstrap.java	2005-12-07 14:22:30 UTC (rev 1036)
@@ -0,0 +1,7 @@
+package org.servicemix.lwcontainer;
+
+import org.servicemix.common.BaseBootstrap;
+
+public class LwContainerBootstrap extends BaseBootstrap {
+
+}

Added: trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerComponent.java (1035 => 1036)

--- trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerComponent.java	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerComponent.java	2005-12-07 14:22:30 UTC (rev 1036)
@@ -0,0 +1,17 @@
+package org.servicemix.lwcontainer;
+
+import org.servicemix.common.BaseComponent;
+import org.servicemix.common.BaseServiceUnitManager;
+import org.servicemix.common.Deployer;
+
+public class LwContainerComponent extends BaseComponent {
+
+    /* (non-Javadoc)
+     * @see org.servicemix.common.BaseComponent#createServiceUnitManager()
+     */
+    public BaseServiceUnitManager createServiceUnitManager() {
+        Deployer[] deployers = new Deployer[] { new LwContainerXBeanDeployer(this) };
+        return new BaseServiceUnitManager(this, deployers);
+    }
+
+}

Added: trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerEndpoint.java (1035 => 1036)

--- trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerEndpoint.java	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerEndpoint.java	2005-12-07 14:22:30 UTC (rev 1036)
@@ -0,0 +1,57 @@
+package org.servicemix.lwcontainer;
+
+import javax.jbi.component.ComponentContext;
+import javax.jbi.messaging.MessageExchange.Role;
+import javax.xml.namespace.QName;
+
+import org.activemq.util.IdGenerator;
+import org.servicemix.common.Endpoint;
+import org.servicemix.common.ExchangeProcessor;
+import org.servicemix.jbi.container.ActivationSpec;
+import org.servicemix.jbi.container.JBIContainer;
+import org.servicemix.jbi.framework.ComponentContextImpl;
+
+public class LwContainerEndpoint extends Endpoint {
+
+    private static final QName SERVICE_NAME = new QName("http://lwcontainer.servicemix.org", "LwContainerComponent");
+    
+    private ActivationSpec activationSpec;
+    
+    public LwContainerEndpoint(ActivationSpec activationSpec) {
+        this.activationSpec = activationSpec;
+        this.service = SERVICE_NAME;
+        if (activationSpec.getId() != null) {
+            this.endpoint = activationSpec.getId();
+        } else if (activationSpec.getComponentName() != null) {
+            this.endpoint = activationSpec.getComponentName();
+        } else {
+            this.endpoint = new IdGenerator().generateId();
+        }
+    }
+    
+    public Role getRole() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void activate() throws Exception {
+        getContainer().activateComponent(activationSpec);
+        
+    }
+
+    public void deactivate() throws Exception {
+        getContainer().deactivateComponent(activationSpec.getId());
+    }
+
+    public ExchangeProcessor getProcessor() {
+        throw new UnsupportedOperationException();
+    }
+
+    public JBIContainer getContainer() {
+        ComponentContext context = getServiceUnit().getComponent().getComponentContext();
+        if( context instanceof ComponentContextImpl ) {
+            return ((ComponentContextImpl) context).getContainer();
+        }
+        throw new IllegalStateException("LwContainer component can only be deployed in ServiceMix");
+    }
+
+}

Added: trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerXBeanDeployer.java (1035 => 1036)

--- trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerXBeanDeployer.java	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/src/main/java/org/servicemix/lwcontainer/LwContainerXBeanDeployer.java	2005-12-07 14:22:30 UTC (rev 1036)
@@ -0,0 +1,38 @@
+package org.servicemix.lwcontainer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.servicemix.common.BaseComponent;
+import org.servicemix.common.xbean.AbstractXBeanDeployer;
+import org.servicemix.jbi.container.ActivationSpec;
+import org.servicemix.jbi.container.SpringServiceUnitContainer;
+import org.xbean.kernel.Kernel;
+import org.xbean.kernel.StringServiceName;
+
+public class LwContainerXBeanDeployer extends AbstractXBeanDeployer {
+
+    public LwContainerXBeanDeployer(BaseComponent component) {
+        super(component);
+    }
+
+    protected String getXBeanFile() {
+        return "servicemix";
+    }
+
+    protected List getServices(Kernel kernel) {
+        try {
+            Object jbi = kernel.getService(new StringServiceName("jbi"));
+            SpringServiceUnitContainer suContainer = (SpringServiceUnitContainer) jbi; 
+            ActivationSpec[] specs = suContainer.getActivationSpecs();
+            List services = new ArrayList();
+            for (int i = 0; i < specs.length; i++) {
+                services.add(new LwContainerEndpoint(specs[i]));
+            }
+            return services;
+        } catch (Exception e) {
+            throw new RuntimeException("Can not find 'jbi' bean", e);
+        }
+    }
+
+}

Added: trunk/servicemix-lwcontainer/src/test/java/org/servicemix/lwcontainer/LwContainerComponentTest.java (1035 => 1036)

--- trunk/servicemix-lwcontainer/src/test/java/org/servicemix/lwcontainer/LwContainerComponentTest.java	2005-12-07 14:20:22 UTC (rev 1035)
+++ trunk/servicemix-lwcontainer/src/test/java/org/servicemix/lwcontainer/LwContainerComponentTest.java	2005-12-07 14:22:30 UTC (rev 1036)
@@ -0,0 +1,130 @@
+/** 
+ * 
+ * Copyright 2005 Unity Systems, LLC. http://www.unity-systems.com
+ * 
+ * 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.servicemix.lwcontainer;
+
+import org.servicemix.client.DefaultServiceMixClient;
+import org.servicemix.client.ServiceMixClient;
+import org.servicemix.jbi.container.JBIContainer;
+
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessagingException;
+import javax.xml.namespace.QName;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+/**
+ * 
+ * @version $Revision$
+ */
+public class LwContainerComponentTest extends TestCase {
+	protected JBIContainer container = new JBIContainer();
+
+	private File tempRootDir;
+
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		container.setCreateMBeanServer(false);
+		container.setMonitorInstallationDirectory(false);
+		tempRootDir = File.createTempFile("servicemix", "rootDir");
+		tempRootDir.delete();
+		File tempTemp = new File(tempRootDir.getAbsolutePath() + "/temp");
+		if (!tempTemp.mkdirs())
+			fail("Unable to create temporary working root directory ["
+					+ tempTemp.getAbsolutePath() + "]");
+
+		System.out.println("Using temporary root directory ["
+				+ tempRootDir.getAbsolutePath() + "]");
+
+		container.setRootDir(tempRootDir.getAbsolutePath());
+        container.setMonitorInstallationDirectory(false);
+        container.setUseMBeanServer(false);
+        container.setCreateMBeanServer(false);
+        container.setFlowName("st");
+		container.init();
+		container.start();
+	}
+
+	public void testComponentInstallation() throws Exception {
+        LwContainerComponent component = new LwContainerComponent();
+        container.activateComponent(component, "#ServiceMixComponent#");
+        URL url = ""
+        File path = new File(new URI(url.toString()));
+        path = path.getParentFile();
+        ServiceMixClient client = new DefaultServiceMixClient(container);
+        
+        for (int i = 0; i < 2; i++) {
+            // Deploy and start su
+            component.getServiceUnitManager().deploy("su1", path.getAbsolutePath());
+            component.getServiceUnitManager().init("su1", path.getAbsolutePath());
+            component.getServiceUnitManager().start("su1");
+            
+            // Send message
+            InOut inout = client.createInOutExchange();
+            inout.setService(new QName("http://servicemix.org/demo/", "chained"));
+            client.send(inout);
+            
+            // Stop and undeploy
+            component.getServiceUnitManager().stop("su1");
+            component.getServiceUnitManager().shutDown("su1");
+            component.getServiceUnitManager().undeploy("su1", path.getAbsolutePath());
+
+            // Send message
+            inout = client.createInOutExchange();
+            inout.setService(new QName("http://servicemix.org/demo/", "chained"));
+            try {
+                client.send(inout);
+            } catch (MessagingException e) {
+                // Ok, the lw component is undeployed
+            }
+            
+        }
+	}
+
+    /*
+	 * @see TestCase#tearDown()
+	 */
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+        container.stop();
+		container.shutDown();
+		deleteDir(tempRootDir);
+	}
+
+	public static boolean deleteDir(File dir) {
+		System.out.println("Deleting directory : " + dir.getAbsolutePath());
+		if (dir.isDirectory()) {
+			String[] children = dir.list();
+			for (int i = 0; i < children.length; i++) {
+				boolean success = deleteDir(new File(dir, children[i]));
+				if (!success) {
+					return false;
+				}
+			}
+		}
+		// The directory is now empty so delete it
+		return dir.delete();
+	}
+}

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/au1-src (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/au1-src) ( => )

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/au1.zip (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/au1.zip)

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/build.sh (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/build.sh) ( => )

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/component-src (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/component-src)

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/component.zip (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/component.zip) ( => )

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/example.xml (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/example.xml)

Copied: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/su1-src (from rev 1017, trunk/core/src/test/resources/org/servicemix/components/servicemix/su1-src) ( => )

Modified: trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/su1-src/servicemix.xml
===================================================================
--- trunk/core/src/test/resources/org/servicemix/components/servicemix/su1-src/servicemix.xml	2005-12-06 13:01:23 UTC (rev 1017)
+++ trunk/servicemix-lwcontainer/src/test/resources/org/servicemix/lwcontainer/su1-src/servicemix.xml	2005-12-07 14:22:30 UTC (rev 1036)
@@ -1,38 +1,43 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- START SNIPPET: servicemix -->
 <beans xmlns:my="http://servicemix.org/demo/"
-       xmlns:sm="http://servicemix.org/config/1.0">
+	xmlns:sm="http://servicemix.org/config/1.0">
 
-  <sm:activationSpec service="my:echo">
-    <sm:component>
-      <bean class="org.servicemix.components.util.EchoComponent" />
-	</sm:component>
-  </sm:activationSpec>
+  <sm:serviceunit id="jbi">
+    <sm:activationSpecs>
+      
+      <sm:activationSpec service="my:echo">
+        <sm:component>
+          <bean class="org.servicemix.components.util.EchoComponent" />
+	    </sm:component>
+      </sm:activationSpec>
 
-  <sm:activationSpec service="my:chained">
-    <sm:component>
-      <bean class="org.servicemix.components.util.ChainedComponent">
-        <property name="services">
-          <list>
-			<bean
-				class="javax.xml.namespace.QName">
-				<constructor-arg value="http://servicemix.org/demo/" />
-				<constructor-arg value="echo" />
-			</bean>
-          </list>
-        </property>
-      </bean>
-	</sm:component>
-  </sm:activationSpec>
+      <sm:activationSpec service="my:chained">
+        <sm:component>
+          <bean class="org.servicemix.components.util.ChainedComponent">
+            <property name="services">
+              <list>
+			    <bean class="javax.xml.namespace.QName">
+				  <constructor-arg value="http://servicemix.org/demo/" />
+				  <constructor-arg value="echo" />
+			    </bean>
+              </list>
+            </property>
+          </bean>
+	    </sm:component>
+      </sm:activationSpec>
 
-  <sm:activationSpec service="my:trace">
-    <sm:component>
-      <bean class="org.servicemix.components.util.TraceComponent" />
-    </sm:component>
-    <sm:subscriptions>
-      <sm:subscriptionSpec service="my:chained"/>
-    </sm:subscriptions>
-  </sm:activationSpec>
+      <sm:activationSpec service="my:trace">
+        <sm:component>
+          <bean class="org.servicemix.components.util.TraceComponent" />
+        </sm:component>
+        <sm:subscriptions>
+          <sm:subscriptionSpec service="my:chained"/>
+        </sm:subscriptions>
+      </sm:activationSpec>
       
+    </sm:activationSpecs>
+  </sm:serviceunit>
+      
 </beans>
 <!-- END SNIPPET: servicemix -->

Reply via email to