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 2013/01/15 13:15:54 UTC

svn commit: r1433368 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/component/ test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ test/java/org/apache/webbeans/newtests/interceptors/resolution/ test/java/org/a...

Author: struberg
Date: Tue Jan 15 12:15:54 2013
New Revision: 1433368

URL: http://svn.apache.org/viewvc?rev=1433368&view=rev
Log:
OWB-344 add performance benchmark

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/ActionInterceptor.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/TransactionalInterceptor.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java?rev=1433368&r1=1433367&r2=1433368&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java Tue Jan 15 12:15:54 2013
@@ -56,6 +56,11 @@ public abstract class InterceptorBean<T>
      */
     private Map<InterceptionType, Method[]> interceptionMethods;
 
+    /**
+     * This is for performance reasons
+     */
+    private Method aroundInvokeMethod = null;
+
     public InterceptorBean(WebBeansContext webBeansContext, 
                            AnnotatedType<T> annotatedType,
                            Set<Type> types,
@@ -71,6 +76,17 @@ public abstract class InterceptorBean<T>
               beanClass,
               Collections.<Class<? extends Annotation>>emptySet());
         this.interceptionMethods = Collections.unmodifiableMap(interceptionMethods);
+
+        // extract the aroundInvokeMethod if any
+        Method[] aroundInvokeMethods = interceptionMethods.get(InterceptionType.AROUND_INVOKE);
+        if (aroundInvokeMethods != null && aroundInvokeMethods.length == 1)
+        {
+            aroundInvokeMethod = aroundInvokeMethods[0];
+            if (!aroundInvokeMethod.isAccessible())
+            {
+                aroundInvokeMethod.setAccessible(true);
+            }
+        }
     }
 
     @Override
@@ -136,6 +152,11 @@ public abstract class InterceptorBean<T>
     {
         try
         {
+            if (InterceptionType.AROUND_INVOKE == interceptionType && aroundInvokeMethod != null)
+            {
+                return aroundInvokeMethod.invoke(instance, invocationContext);
+            }
+
             Method[] interceptorMethods = getInterceptorMethods(interceptionType);
             if (interceptorMethods.length == 1)
             {

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java?rev=1433368&r1=1433367&r2=1433368&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/beans/ClassMultiInterceptedClass.java Tue Jan 15 12:15:54 2013
@@ -20,6 +20,7 @@ package org.apache.webbeans.newtests.int
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
+import javax.enterprise.context.RequestScoped;
 
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Action;
 import org.apache.webbeans.test.component.intercept.webbeans.bindings.Secure;
@@ -31,6 +32,7 @@ import org.apache.webbeans.test.componen
 @Transactional
 @Action
 @Secure
+@RequestScoped
 public class ClassMultiInterceptedClass
 {
     private boolean defaultCtInvoked = false;
@@ -64,8 +66,8 @@ public class ClassMultiInterceptedClass
 
     public int getMeaningOfLife()
     {
-        System.out.println("answering the question about life, the universe and everything!");
-        System.out.println("and being in " + this.getClass());
+        //X System.out.println("answering the question about life, the universe and everything!");
+        //X System.out.println("and being in " + this.getClass());
         return meaningOfLife;
     }
 

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java?rev=1433368&r1=1433367&r2=1433368&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java Tue Jan 15 12:15:54 2013
@@ -127,8 +127,37 @@ public class InterceptorProxyChainTest e
         proxyInstance.setMeaningOfLife(42);
         Assert.assertEquals(42, proxyInstance.getMeaningOfLife());
 
+        // for testing with the old proxies
+        //X proxyInstance = getInstance(ClassMultiInterceptedClass.class);
+
+        //X performBenchmarkOn(proxyInstance);
+
         shutDownContainer();
     }
 
+    private void performBenchmarkOn(ClassMultiInterceptedClass proxyInstance)
+    {
+
+        // warmup
+        action(proxyInstance, 1000);
+
+        System.out.println("Starting the real bench");
+        long start = System.nanoTime();
+        action(proxyInstance, 10000000);
+        long end = System.nanoTime();
+        System.out.println("took: " + (end - start)/1000);
+    }
+
+    private void action(ClassMultiInterceptedClass proxyInstance, int counter)
+    {
+        for (int i=0; i < counter; i++) {
+            proxyInstance.getChar();
+            proxyInstance.getFloat();
+            proxyInstance.setMeaningOfLife(42);
+            proxyInstance.getMeaningOfLife();
+            proxyInstance.getSelf();
+        }
+    }
+
 
 }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/ActionInterceptor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/ActionInterceptor.java?rev=1433368&r1=1433367&r2=1433368&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/ActionInterceptor.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/ActionInterceptor.java Tue Jan 15 12:15:54 2013
@@ -36,7 +36,6 @@ public class ActionInterceptor
     @AroundInvoke
     public Object call(InvocationContext context) throws Exception
     {
-        System.out.println("Call Action ArondInvoke");
         WInterceptorComponent.sWithMeta = 10;
         WMetaInterceptorComponent.sWithMeta = 10;
         return context.proceed();

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/TransactionalInterceptor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/TransactionalInterceptor.java?rev=1433368&r1=1433367&r2=1433368&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/TransactionalInterceptor.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/intercept/webbeans/TransactionalInterceptor.java Tue Jan 15 12:15:54 2013
@@ -37,7 +37,8 @@ public class TransactionalInterceptor
             ShoppingCard.CALLED = true;
             return context.proceed();
             
-        }catch(Exception e)
+        }
+        catch(Exception e)
         {
             ShoppingCard.CALLED = false;
         }