You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2010/07/01 11:54:03 UTC
svn commit: r959579 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/intercept/
test/java/org/apache/webbeans/newtests/interceptors/beans/
test/java/org/apache/webbeans/newtests/interceptors/business/tests/
Author: struberg
Date: Thu Jul 1 09:54:03 2010
New Revision: 959579
URL: http://svn.apache.org/viewvc?rev=959579&view=rev
Log:
OWB-398 add a InterceptorPerformanceTest
A first performance test does pretty well: ~3ms for
100 Interceptor calls.
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/business/tests/InterceptorPerformanceTest.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/beans/RequestScopedBean.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=959579&r1=959578&r2=959579&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java Thu Jul 1 09:54:03 2010
@@ -200,7 +200,6 @@ public abstract class InterceptorHandler
if (InterceptorUtil.isWebBeansBusinessMethod(method))
{
List<Object> decorators = null;
- logger.debug("Decorator stack for target {0}", injectionTarget.getDecoratorStack());
if (injectionTarget.getDecoratorStack().size() > 0)
{
Class<?> proxyClass = JavassistProxyFactory.getInterceptorProxyClasses().get(bean);
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/beans/RequestScopedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/beans/RequestScopedBean.java?rev=959579&r1=959578&r2=959579&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/beans/RequestScopedBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/beans/RequestScopedBean.java Thu Jul 1 09:54:03 2010
@@ -23,29 +23,29 @@ import javax.inject.Inject;
@RequestScoped
public class RequestScopedBean {
- private int i=0;
- private @Inject ApplicationScopedBean myService;
+ private int i=0;
+ private @Inject ApplicationScopedBean myService;
+
+ /** we need this trick, since the injected beans itself are only proxies... */
+ public RequestScopedBean getInstance() {
+ return this;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ public void setI(int i) {
+ this.i = i;
+ }
+
+ public ApplicationScopedBean getMyService() {
+ return myService;
+ }
+
+ public void setMyService(ApplicationScopedBean myService) {
+ this.myService = myService;
+ }
+
- /** we need this trick, since the injected beans itself are only proxies... */
- public RequestScopedBean getInstance() {
- return this;
- }
-
- public int getI() {
- return i;
- }
-
- public void setI(int i) {
- this.i = i;
- }
-
- public ApplicationScopedBean getMyService() {
- return myService;
- }
-
- public void setMyService(ApplicationScopedBean myService) {
- this.myService = myService;
- }
-
-
}
Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/business/tests/InterceptorPerformanceTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/business/tests/InterceptorPerformanceTest.java?rev=959579&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/business/tests/InterceptorPerformanceTest.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/business/tests/InterceptorPerformanceTest.java Thu Jul 1 09:54:03 2010
@@ -0,0 +1,107 @@
+/*
+ * 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.webbeans.newtests.interceptors.business.tests;
+
+import junit.framework.Assert;
+import org.apache.webbeans.context.ContextFactory;
+import org.apache.webbeans.logger.WebBeansLogger;
+import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.apache.webbeans.newtests.interceptors.beans.ApplicationScopedBean;
+import org.apache.webbeans.newtests.interceptors.beans.RequestScopedBean;
+import org.apache.webbeans.newtests.interceptors.common.TransactionInterceptor;
+import org.junit.Test;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * This test checks the performance of simple interceptor invocations.
+ * It is usually enabled with only a few iteration cycles.
+ */
+@SuppressWarnings("unchecked")
+public class InterceptorPerformanceTest extends AbstractUnitTest
+{
+ private static final String PACKAGE_NAME = DependingInterceptorTest.class.getPackage().getName();
+
+ private static final int ITERATIONS = 10000;
+
+ private static WebBeansLogger logger = WebBeansLogger.getLogger(InterceptorPerformanceTest.class);
+
+
+ @Test
+ public void testInterceptorPerformance()
+ {
+ Collection<URL> beanXmls = new ArrayList<URL>();
+ beanXmls.add(getXMLUrl(PACKAGE_NAME, "DependingInterceptorTest"));
+
+ Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+ beanClasses.add(TransactionInterceptor.class);
+ beanClasses.add(ApplicationScopedBean.class);
+ beanClasses.add(RequestScopedBean.class);
+
+ TransactionInterceptor.count = 0;
+
+ startContainer(beanClasses, beanXmls);
+
+ Set<Bean<?>> beans = getBeanManager().getBeans(RequestScopedBean.class);
+ Assert.assertNotNull(beans);
+ Bean<RequestScopedBean> bean = (Bean<RequestScopedBean>)beans.iterator().next();
+
+ CreationalContext<RequestScopedBean> ctx = getBeanManager().createCreationalContext(bean);
+
+ Object reference1 = getBeanManager().getReference(bean, RequestScopedBean.class, ctx);
+ Assert.assertNotNull(reference1);
+
+ Assert.assertTrue(reference1 instanceof RequestScopedBean);
+
+ RequestScopedBean beanInstance1 = (RequestScopedBean)reference1;
+
+ TransactionInterceptor.count = 0;
+
+ long start = System.nanoTime();
+ long startDek = start;
+ for (int i= 1; i < ITERATIONS; i++)
+ {
+ beanInstance1.getMyService().getJ();
+ if (i % 100 == 0)
+ {
+ long endDek = System.nanoTime();
+ logger.info("Executing 100 iterations took {0} ns", endDek - startDek);
+ startDek = endDek;
+ }
+ }
+ long end = System.nanoTime();
+
+ logger.info("Executing {0} iterations took {1} ns", ITERATIONS, end - start);
+
+ shutDownContainer();
+
+ if ((end - start) / 1e6 > ITERATIONS)
+ {
+ // if it takes longer than 1ms for each iteration, then this is really a performance blocker!
+ Assert.fail("Performance test took more than 20 times longer than it should");
+ }
+
+ }
+
+}
\ No newline at end of file