From e5b7380c874745c989d1816b8f552504f038e1bc Mon Sep 17 00:00:00 2001 From: lresende Date: Thu, 26 Sep 2013 20:33:20 +0000 Subject: 2.0 branch for possible maintenance release git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1526672 13f79535-47bb-0310-9956-ffa450edef68 --- .../performance/performance-contribution1/pom.xml | 50 +++ .../apache/tuscany/sca/test/performance/BeanA.java | 44 ++ .../tuscany/sca/test/performance/Helloworld.java | 28 ++ .../performance/impl/HelloworldClientImpl.java | 36 ++ .../performance/impl/HelloworldServiceImpl.java | 34 ++ .../src/main/resources/LoggingMessages.properties | 16 + .../src/main/resources/META-INF/definitions.xml | 41 ++ .../src/main/resources/PerformanceTest.composite | 38 ++ .../itest/performance/performance-test/pom.xml | 57 +++ .../tuscany/sca/test/performance/client/BeanA.java | 41 ++ .../sca/test/performance/client/Helloworld.java | 28 ++ .../sca/test/performance/PerformanceTestCase.java | 471 +++++++++++++++++++++ .../branches/2.0/testing/itest/performance/pom.xml | 36 ++ 13 files changed, 920 insertions(+) create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/pom.xml create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/BeanA.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/Helloworld.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldClientImpl.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldServiceImpl.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/LoggingMessages.properties create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/META-INF/definitions.xml create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/pom.xml create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/BeanA.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/Helloworld.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/src/test/java/org/apache/tuscany/sca/test/performance/PerformanceTestCase.java create mode 100644 sca-java-2.x/branches/2.0/testing/itest/performance/pom.xml (limited to 'sca-java-2.x/branches/2.0/testing/itest/performance') diff --git a/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/pom.xml b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/pom.xml new file mode 100644 index 0000000000..e281bca037 --- /dev/null +++ b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 2.0 + + itest-performance-contribution1 + Apache Tuscany SCA iTest Performance Contribution1 + + + + org.apache.tuscany.sca + tuscany-base-runtime-pom + pom + 2.0 + + + + org.apache.tuscany.sca + tuscany-binding-ws-runtime-axis2 + 2.0 + + + + org.apache.tuscany.sca + tuscany-host-jetty + 2.0 + + + diff --git a/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/BeanA.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/Helloworld.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldClientImpl.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/testing/itest/performance/performance-contribution1/src/main/java/org/apache/tuscany/sca/test/performance/impl/HelloworldServiceImpl.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/LoggingMessages.properties b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/LoggingMessages.properties new file mode 100644 index 0000000000..09c0e7565d --- /dev/null +++ b/sca-java-2.x/branches/2.0/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/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/META-INF/definitions.xml b/sca-java-2.x/branches/2.0/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/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/META-INF/definitions.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite new file mode 100644 index 0000000000..a631baf8c5 --- /dev/null +++ b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-contribution1/src/main/resources/PerformanceTest.composite @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + diff --git a/sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/pom.xml b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/pom.xml new file mode 100644 index 0000000000..6d57de7786 --- /dev/null +++ b/sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/pom.xml @@ -0,0 +1,57 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 2.0 + + itest-performance-test + Apache Tuscany SCA iTest Performance Test + + + + org.apache.tuscany.sca + tuscany-base-runtime-pom + pom + 2.0 + + + + org.apache.tuscany.sca + tuscany-binding-ws-runtime-axis2 + 2.0 + + + + org.apache.tuscany.sca + tuscany-host-jetty + 2.0 + + + + org.apache.tuscany.sca + tuscany-policy-logging + 2.0 + + + + diff --git a/sca-java-2.x/branches/2.0/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/BeanA.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/testing/itest/performance/performance-test/src/main/java/org/apache/tuscany/sca/test/performance/client/Helloworld.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/testing/itest/performance/performance-test/src/test/java/org/apache/tuscany/sca/test/performance/PerformanceTestCase.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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(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/branches/2.0/testing/itest/performance/pom.xml b/sca-java-2.x/branches/2.0/testing/itest/performance/pom.xml new file mode 100644 index 0000000000..4844ec1a2e --- /dev/null +++ b/sca-java-2.x/branches/2.0/testing/itest/performance/pom.xml @@ -0,0 +1,36 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-itest + 2.0 + ../pom.xml + + itest-performance + Apache Tuscany SCA iTest Performance + pom + + + performance-contribution1 + performance-test + + -- cgit v1.2.3