You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2009/01/18 08:30:04 UTC

svn commit: r735395 - /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java

Author: dblevins
Date: Sat Jan 17 23:30:03 2009
New Revision: 735395

URL: http://svn.apache.org/viewvc?rev=735395&view=rev
Log:
Sort of functional interceptor for debugging.  Not wired in.

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java?rev=735395&r1=735394&r2=735395&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorStack.java Sat Jan 17 23:30:03 2009
@@ -18,12 +18,18 @@
 package org.apache.openejb.core.interceptor;
 
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.util.Join;
+import org.apache.openejb.util.Classes;
+import static org.apache.openejb.util.Join.join;
 
 import javax.interceptor.InvocationContext;
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.Stack;
 
 /**
  * @version $Rev$ $Date$
@@ -42,6 +48,11 @@
         this.operation = operation;
 
         interceptors = new ArrayList<Interceptor>(interceptorDatas.size());
+//        try {
+//            interceptors.add(new Interceptor(new Debug(), Debug.class.getMethod("invoke", InvocationContext.class)));
+//        } catch (Throwable e) {
+//        }
+        
         for (InterceptorData interceptorData : interceptorDatas) {
             Class interceptorClass = interceptorData.getInterceptorClass();
             Object interceptorInstance = interceptorInstances.get(interceptorClass.getName());
@@ -57,6 +68,50 @@
         }
     }
 
+    private static final ThreadLocal<Stack> stack = new ThreadLocal<Stack>();
+    private class Debug {
+
+        private Stack stack() {
+            Stack s = stack.get();
+            if (s == null){
+                s = new Stack();
+                stack.set(s);
+            }
+            return s;
+        }
+
+        public Object invoke(InvocationContext context) throws Exception {
+            try {
+                StringBuilder sb = new StringBuilder();
+                ThreadContext threadContext = ThreadContext.getThreadContext();
+                String txPolicy = threadContext.getTransactionPolicy().getClass().getSimpleName();
+                String ejbName = threadContext.getDeploymentInfo().getEjbName();
+                String methodName = targetMethod.getName() + "(" + join(", ", Classes.getSimpleNames(targetMethod.getParameterTypes())) + ")";
+                sb.append(join("", stack()));
+                sb.append(ejbName).append(".");
+                sb.append(methodName).append(" <").append(txPolicy).append("> {");
+                synchronized (System.out){
+                    System.out.println(sb.toString());
+                }
+            } catch (Throwable e) {
+            }
+
+            try {
+
+                stack().push("  ");
+                return context.proceed();
+            } finally {
+                stack().pop();
+                StringBuilder sb = new StringBuilder();
+                sb.append(join("", stack()));
+                sb.append("}");
+                synchronized (System.out){
+                    System.out.println(sb.toString());
+                }
+            }
+        }
+    }
+
     public InvocationContext createInvocationContext(Object... parameters) {
         InvocationContext invocationContext = new ReflectionInvocationContext(operation, interceptors, beanInstance, targetMethod, parameters);
         return invocationContext;