diff options
Diffstat (limited to '')
13 files changed, 920 insertions, 0 deletions
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/pom.xml b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/pom.xml new file mode 100644 index 0000000000..e281bca037 --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/pom.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-itest</artifactId>
+ <version>2.0</version>
+ </parent>
+ <artifactId>itest-performance-contribution1</artifactId>
+ <name>Apache Tuscany SCA iTest Performance Contribution1</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-base-runtime-pom</artifactId>
+ <type>pom</type>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-runtime-axis2</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-jetty</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/BeanA.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/BeanA.java new file mode 100644 index 0000000000..a1c739900a --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/BeanA.java @@ -0,0 +1,44 @@ +/*
+ * 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.tuscany.sca.test.performance;
+
+import org.oasisopen.sca.annotation.Reference;
+import org.oasisopen.sca.annotation.Service;
+
+public class BeanA {
+
+ private String field1;
+ private int field2;
+
+ public String getField1() {
+ return field1;
+ }
+
+ public void setField1(String field1) {
+ this.field1 = field1;
+ }
+
+ public int getField2() {
+ return field2;
+ }
+
+ public void setField2(int field2) {
+ this.field2 = field2;
+ }
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/Helloworld.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/Helloworld.java new file mode 100644 index 0000000000..1186bdbe12 --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/Helloworld.java @@ -0,0 +1,28 @@ +/*
+ * 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.tuscany.sca.test.performance;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+@Remotable
+public interface Helloworld {
+
+ String sayHello(String name, BeanA beanA);
+
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldClientImpl.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldClientImpl.java new file mode 100644 index 0000000000..878811b6fc --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldClientImpl.java @@ -0,0 +1,36 @@ +/*
+ * 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.tuscany.sca.test.performance.impl;
+
+import org.apache.tuscany.sca.test.performance.BeanA;
+import org.apache.tuscany.sca.test.performance.Helloworld;
+import org.oasisopen.sca.annotation.Reference;
+import org.oasisopen.sca.annotation.Service;
+
+@Service(Helloworld.class)
+public class HelloworldClientImpl implements Helloworld {
+
+ @Reference
+ public Helloworld helloWorld;
+
+ public String sayHello(String name, BeanA beanA) {
+ return "Hello " + helloWorld.sayHello(name, beanA);
+ }
+
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldServiceImpl.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldServiceImpl.java new file mode 100644 index 0000000000..ea748d0d46 --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldServiceImpl.java @@ -0,0 +1,34 @@ +/*
+ * 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.tuscany.sca.test.performance.impl;
+
+import org.apache.tuscany.sca.test.performance.BeanA;
+import org.apache.tuscany.sca.test.performance.Helloworld;
+import org.oasisopen.sca.annotation.Requires;
+
+@Requires("{http://tuscany.apache.org/xmlns/sca/1.1}logging")
+public class HelloworldServiceImpl implements Helloworld {
+
+ public String sayHello(String name, BeanA beanA) {
+ String returnStrng = "Hello " + name + " " + beanA.getField1();
+ System.out.println("At HelloworldServiceImpl - " + returnStrng);
+ return returnStrng;
+ }
+
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/LoggingMessages.properties b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/LoggingMessages.properties new file mode 100644 index 0000000000..09c0e7565d --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/LoggingMessages.properties @@ -0,0 +1,16 @@ +# 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.
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/META-INF/definitions.xml b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/META-INF/definitions.xml new file mode 100644 index 0000000000..e5ad11087b --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/META-INF/definitions.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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.
+-->
+<definitions xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ targetNamespace="http://tuscany.apache.org/xmlns/sca/1.1"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1">
+
+ <intent name="mediation" constrains="sca:binding"/>
+
+ <policySet name="Mediation1"
+ provides="tuscany:mediation"
+ appliesTo="//sca:service"
+ attachTo="//sca:component[@name='BusinessLogicComponent']">
+ <tuscany:mediation name="mediation1.med"/>
+ </policySet>
+
+ <policySet name="Mediation2"
+ provides="tuscany:mediation"
+ appliesTo="//sca:reference"
+ attachTo="//sca:component[@name='BusinessLogicComponent']">
+ <tuscany:mediation name="mediation2.med"/>
+ </policySet>
+
+</definitions>
\ No newline at end of file diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite new file mode 100644 index 0000000000..a631baf8c5 --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:foo="http://foo"
+ targetNamespace="http://foo"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
+ name="PerformanceTest">
+
+ <component name="HelloWorldClientComponent">
+ <implementation.java class="org.apache.tuscany.sca.test.performance.impl.HelloworldClientImpl" />
+ <reference name="helloWorld" target="HelloWorldServiceComponent" />
+ </component>
+
+ <component name="HelloWorldServiceComponent">
+ <implementation.java class="org.apache.tuscany.sca.test.performance.impl.HelloworldServiceImpl"/>
+ <service name="Helloworld">
+ <binding.ws/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/pom.xml b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/pom.xml new file mode 100644 index 0000000000..6d57de7786 --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/pom.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-itest</artifactId>
+ <version>2.0</version>
+ </parent>
+ <artifactId>itest-performance-test</artifactId>
+ <name>Apache Tuscany SCA iTest Performance Test</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-base-runtime-pom</artifactId>
+ <type>pom</type>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-runtime-axis2</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-jetty</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-policy-logging</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ </dependencies>
+</project>
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/BeanA.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/BeanA.java new file mode 100644 index 0000000000..ec2a80e5ce --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/BeanA.java @@ -0,0 +1,41 @@ +/*
+ * 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.tuscany.sca.test.performance.client;
+
+public class BeanA {
+
+ private String field1;
+ private int field2;
+
+ public String getField1() {
+ return field1;
+ }
+
+ public void setField1(String field1) {
+ this.field1 = field1;
+ }
+
+ public int getField2() {
+ return field2;
+ }
+
+ public void setField2(int field2) {
+ this.field2 = field2;
+ }
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/Helloworld.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/Helloworld.java new file mode 100644 index 0000000000..6b5e9f2a5d --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/Helloworld.java @@ -0,0 +1,28 @@ +/*
+ * 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.tuscany.sca.test.performance.client;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+@Remotable
+public interface Helloworld {
+
+ String sayHello(String name, BeanA beanA);
+
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/test/java/org/apache/tuscany/sca/test/performance/PerformanceTestCase.java b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/test/java/org/apache/tuscany/sca/test/performance/PerformanceTestCase.java new file mode 100644 index 0000000000..d05ed1fd74 --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/performance-test/src/test/java/org/apache/tuscany/sca/test/performance/PerformanceTestCase.java @@ -0,0 +1,471 @@ +/*
+ * 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.tuscany.sca.test.performance;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+import java.lang.management.OperatingSystemMXBean;
+import java.lang.ref.WeakReference;
+
+import javax.management.MBeanServer;
+
+import org.apache.tuscany.sca.Node;
+import org.apache.tuscany.sca.TuscanyRuntime;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper;
+import org.apache.tuscany.sca.impl.NodeImpl;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceFactoryImpl;
+import org.apache.tuscany.sca.test.performance.client.BeanA;
+import org.apache.tuscany.sca.test.performance.client.Helloworld;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.sun.management.HotSpotDiagnosticMXBean;
+
+/*
+ * A test looking at memory and runtime performance.
+ * TODO - only a couple of memory tests to start with
+ */
+public class PerformanceTestCase {
+
+ public boolean writeHeapDump = true;
+
+ private static BufferedWriter resultsFile = null;
+
+ private TuscanyRuntime runtime;
+ private Node node;
+ private ExtensionPointRegistry extensionPointRegistry;
+ private long lastTotal = 0;
+ private long lastFree = 0;
+ private long lastUsed = 0;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ FileWriter fileWriter = new FileWriter("out.txt");
+ resultsFile = new BufferedWriter(fileWriter);
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ resultsFile.flush();
+ resultsFile.close();
+ }
+
+ @Test
+ public void testNodeStartStop() {
+ dumpHeapStart("testInstallUninstall");
+
+ printRuntimeStats("createRuntime");
+
+ createRuntime();
+
+ callNodeStartStopRepeatedly(100);
+
+ waitForInput();
+
+ dumpHeapEnd("testInstallUninstall_postNodeStop");
+
+ printRuntimeStats("stopRuntime");
+
+ stopRuntime();
+
+ printRuntimeStats("destroyRuntime");
+
+ destroyRuntime();
+
+ printRuntimeStats("End");
+
+ dumpHeapEnd("testInstallUninstall_postStop");
+ }
+
+ @Test
+ public void testInstallUninstall() {
+ dumpHeapStart("testInstallUninstall");
+
+ printRuntimeStats("createRuntime");
+
+ createRuntime();
+
+ printRuntimeStats("createNode");
+
+ createNode();
+
+ callInstallUninstallRepeatedly(100);
+
+ dumpHeapEnd("testInstallUninstall_postUninstall");
+
+ checkCacheStatus();
+
+ printRuntimeStats("stopNode");
+
+ stopNode();
+
+ printRuntimeStats("destroyNode");
+
+ destroyNode();
+
+ printRuntimeStats("stopRuntime");
+
+ stopRuntime();
+
+ printRuntimeStats("destroyRuntime");
+
+ destroyRuntime();
+
+ printRuntimeStats("End");
+
+ dumpHeapEnd("testInstallUninstall_postStop");
+ }
+
+
+ @Test
+ public void testCall() {
+ dumpHeapStart("TestCall");
+
+ printRuntimeStats("createRuntime");
+
+ createRuntime();
+
+ printRuntimeStats("createNode");
+
+ createNode();
+
+ printRuntimeStats("installContribution");
+
+ installContribution();
+
+ printRuntimeStats("startNode");
+
+ startComposite();
+
+ printRuntimeStats("callServiceRepeatedly 10000 times");
+
+ callServiceRepeatedly(10000);
+
+ printRuntimeStats("stopCompositeAndUninstallUnused");
+
+ stopCompositeAndUninstallUnused();
+
+ //printRuntimeStats("uninstallContribution");
+
+ //uninstallContribution();
+ dumpHeapEnd("TestCall_postUninstall");
+
+ printRuntimeStats("stopNode");
+
+ stopNode();
+
+ printRuntimeStats("destroyNode");
+
+ destroyNode();
+
+ printRuntimeStats("stopRuntime");
+
+ stopRuntime();
+
+ printRuntimeStats("destroyRuntime");
+
+ destroyRuntime();
+
+ printRuntimeStats("End");
+
+ dumpHeapEnd("TestCall_postStop");
+ }
+
+ public void checkCacheStatus(){
+ UtilityExtensionPoint utilityExtensionPoint = extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class);
+ JAXBContextHelper jaxbContextHelper = utilityExtensionPoint.getUtility(JAXBContextHelper.class);
+
+ Assert.assertEquals("JAXBContextCache > 1", 1, jaxbContextHelper.getJAXBContextCache().getCache().keySet().size());
+
+ FactoryExtensionPoint factoryExtensionPoint = extensionPointRegistry.getExtensionPoint(FactoryExtensionPoint.class);
+ JavaInterfaceFactory javaInterfaceFactory = factoryExtensionPoint.getFactory(JavaInterfaceFactory.class);
+ Assert.assertEquals("JavaInterfaceFactoryImpl.normalCache > 1", 1, ((JavaInterfaceFactoryImpl)javaInterfaceFactory).getNormalCache().keySet().size());
+
+ }
+
+ // ============================================================
+
+ public void callNodeStartStopRepeatedly(int repeatCount) {
+ for (int i =0; i < repeatCount; i++){
+ printRuntimeStats("createNode");
+
+ createNode();
+
+ callInstallUninstallRepeatedly(1);
+
+ printRuntimeStats("stopNode");
+
+ stopNode();
+
+ printRuntimeStats("destroyNode");
+
+ destroyNode();
+ }
+ }
+
+ public void callInstallUninstallRepeatedly(int repeatCount) {
+ for (int i =0; i < repeatCount; i++){
+ printRuntimeStats("install/unistall contribution");
+
+ installContribution();
+
+ startComposite();
+
+ callService();
+
+ stopCompositeAndUninstallUnused();
+
+ //uninstallContribution();
+ }
+ }
+
+ public void callServiceRepeatedly(int repeatCount) {
+ for (int i =0; i < repeatCount; i++){
+ callService();
+ }
+ }
+
+ // ============================================================
+
+ public void dumpHeapStart(String name){
+ if (writeHeapDump){
+ dumpHeap("heap_start_" + name + ".bin");
+ }
+ }
+
+ public void dumpHeapEnd(String name){
+ if (writeHeapDump){
+ dumpHeap("heap_stop_" + name + ".bin");
+
+ System.out.println("You can watch a JVM run using \n" +
+ " jconsole \n" +
+ "You can manually dump the heap using \n" +
+ " jmap -dump:file=heap_stop_" + name + ".bin 345" +
+ "Where 345 is the process id from jconsole \n" +
+ "The program dumps the heap at the start and end. You can look at them using \n" +
+ " jhat -J-Xmx512m heap_start.bin\n" +
+ " jhat -J-Xmx512m heap_stop_" + name + ".bin\n" +
+ "Then point your browser at\n" +
+ " http://localhost:7000/");
+ } else {
+ System.out.println("NO HEAP DUMPS WRITTEN");
+ }
+ }
+
+ public void createRuntime() {
+ runtime = TuscanyRuntime.newInstance();
+ }
+
+ public void createNode() {
+ node = runtime.createNode("default");
+ extensionPointRegistry = ((NodeImpl)node).getExtensionPointRegistry();
+ }
+
+ public void installContribution() {
+ try {
+ node.installContribution("performance", "../performance-contribution1/target/itest-performance-contribution1-2.0-SNAPSHOT.jar", null, null);
+ } catch (Exception ex){
+ ex.printStackTrace();
+ }
+ }
+
+ public void startComposite() {
+ try {
+ node.startComposite("performance", "PerformanceTest.composite");
+ } catch (Exception ex){
+ ex.printStackTrace();
+ }
+ }
+
+ public void stopCompositeAndUninstallUnused(){
+ try {
+ node.stopCompositeAndUninstallUnused("performance", "PerformanceTest.composite");
+ } catch (Exception ex){
+ ex.printStackTrace();
+ }
+ }
+
+ public void uninstallContribution(){
+ try {
+ node.installContribution("performance");
+ } catch (Exception ex){
+ ex.printStackTrace();
+ }
+ }
+
+ public void stopNode(){
+ node.stop();
+ }
+
+ public void destroyNode() {
+ node = null;
+ }
+
+ public void stopRuntime() {
+ runtime.stop();
+ }
+
+ public void destroyRuntime() {
+ runtime = null;
+ }
+
+ public void callService() {
+ try {
+ Helloworld helloWorldClient = node.getService(Helloworld.class, "HelloWorldClientComponent");
+
+ assertNotNull(helloWorldClient);
+
+ BeanA beanA = new BeanA();
+ beanA.setField1("Smith");
+ beanA.setField2(13);
+
+ assertEquals("Hello Hello Jane Smith", helloWorldClient.sayHello("Jane", beanA));
+ } catch (Exception ex) {
+ fail(ex.toString());
+ }
+ }
+
+ public void printRuntimeStats(String step){
+ tryToGC();
+
+ Runtime runtime = Runtime.getRuntime();
+
+ long used = runtime.totalMemory() - runtime.freeMemory();
+ long free = runtime.freeMemory();
+ long total = runtime.totalMemory();
+
+ String stats = "U " + used + "[" + (used - lastUsed ) + "] \t" +
+ "F " + free + "[" + (free - lastFree ) + "] \t" +
+ "T " + total + "[" + (total - lastTotal) + "] \t" +
+ step + "\n";
+
+ try {
+ resultsFile.write(stats);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ System.out.print(stats);
+
+ lastTotal = total;
+ lastFree = free;
+ lastUsed = used;
+ }
+
+ /**
+ * We can't rely on GC doing anything sensible
+ * but I'm just playing here to see if I can
+ * force it to GC
+ */
+ public void tryToGC(){
+
+ Runtime runtime = Runtime.getRuntime();
+
+/*
+ // force OOME
+ StringBuffer sb = new StringBuffer();
+ try {
+ while(true)
+ {
+ sb.append("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+ }
+ } catch (OutOfMemoryError ex){
+ // we are going to GC now
+ System.out.println("OOME");
+ }
+ sb = null;
+
+
+ for (int i = 0; i < 10; i++){
+ Object obj = new Object();
+ WeakReference ref = new WeakReference<Object>(obj);
+ obj = null;
+ while(ref.get() != null) {
+ runtime.runFinalization();
+ runtime.gc();
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // Do nothing
+ }
+ }
+ }
+*/
+ }
+
+ public void dumpHeap(String heapName){
+ String vendor = System.getProperty("java.vendor");
+ if (vendor.contains("Sun")){
+ dumpHeapSun(heapName);
+ }
+ }
+
+
+ public void dumpHeapSun(String heapName){
+ final MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
+ final OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
+ final MBeanServer platformBean = ManagementFactory.getPlatformMBeanServer();
+
+ HotSpotDiagnosticMXBean bean = null;
+
+ try {
+ bean = ManagementFactory.newPlatformMXBeanProxy(platformBean,
+ "com.sun.management:type=HotSpotDiagnostic",
+ HotSpotDiagnosticMXBean.class);
+ deleteFile(heapName);
+ bean.dumpHeap(heapName, false);
+ } catch(Exception ex){
+ ex.printStackTrace();
+ }
+ }
+
+ public void dumpHeapIBM(){
+
+ }
+
+ public void deleteFile(String filename){
+ File theFile = new File(filename);
+ theFile.delete();
+ }
+
+ public void waitForInput() {
+ System.out.println("Press a key to end");
+ try {
+ System.in.read();
+ } catch (Exception ex) {
+ }
+ System.out.println("Continuing");
+ }
+
+ // final MemoryMXBean mb = ManagementFactory.getMemoryMXBean();
+ // com.sun.management.OperatingSystemMXBean if java.lang.management.OperationSystemMXBean
+}
diff --git a/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/pom.xml b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/pom.xml new file mode 100644 index 0000000000..4844ec1a2e --- /dev/null +++ b/sca-java-2.x/tags/2.0-RC1/testing/itest/performance/pom.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-itest</artifactId>
+ <version>2.0</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>itest-performance</artifactId>
+ <name>Apache Tuscany SCA iTest Performance</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>performance-contribution1</module>
+ <module>performance-test</module>
+ </modules>
+</project>
|