DELTASPIKE-882 api for the proxy-module (first draft)

Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/4d6aadc5
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/4d6aadc5
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/4d6aadc5

Branch: refs/heads/master
Commit: 4d6aadc54ee24d045679ae922215808aa3bf5230
Parents: 0b5c027
Author: Thomas Andraschko <tandrasc...@apache.org>
Authored: Tue May 5 16:45:01 2015 +0200
Committer: gpetracek <gpetra...@apache.org>
Committed: Tue May 5 21:40:32 2015 +0200

----------------------------------------------------------------------
 deltaspike/dist/bom/pom.xml                     |   6 +
 .../src/main/distribution/modules-module.xml    |   1 +
 deltaspike/dist/pom.xml                         |  21 +-
 deltaspike/modules/jsf/impl-ee6/pom.xml         |   4 +
 deltaspike/modules/jsf/impl/pom.xml             |   4 +
 .../InjectionAwareApplicationWrapper.java       |   3 +-
 .../ConverterAndValidatorProxyExtension.java    |   3 +-
 .../ConverterAndValidatorProxyFactory.java      |   4 +-
 deltaspike/modules/partial-bean/impl/pom.xml    |   4 +
 .../impl/PartialBeanBindingExtension.java       |   2 +-
 .../impl/PartialBeanProxyFactory.java           |   4 +-
 deltaspike/modules/pom.xml                      |   2 +-
 deltaspike/modules/proxy-utils/api/pom.xml      |  94 ----
 .../AbstractManualInvocationHandler.java        | 114 -----
 .../DelegateManualInvocationHandler.java        |  48 --
 .../InterceptManualInvocationHandler.java       |  55 ---
 .../invocation/ManualInvocationContext.java     | 191 --------
 ...nualInvocationThrowableWrapperException.java |  31 --
 .../proxy/util/AsmProxyClassGenerator.java      | 470 -------------------
 .../deltaspike/proxy/util/DeltaSpikeProxy.java  |  31 --
 .../DeltaSpikeProxyContextualLifecycle.java     | 160 -------
 .../proxy/util/DeltaSpikeProxyFactory.java      | 276 -----------
 .../api/src/main/resources/META-INF/beans.xml   |  23 -
 deltaspike/modules/proxy-utils/pom.xml          |  39 --
 deltaspike/modules/proxy/api/pom.xml            |  40 ++
 .../api/DeltaSpikeProxyContextualLifecycle.java | 162 +++++++
 .../proxy/api/DeltaSpikeProxyFactory.java       | 288 ++++++++++++
 .../deltaspike/proxy/spi/DeltaSpikeProxy.java   |  31 ++
 .../proxy/spi/ProxyClassGenerator.java          |  33 ++
 .../api/src/main/resources/META-INF/beans.xml   |  23 +
 deltaspike/modules/proxy/impl-asm5/pom.xml      | 100 ++++
 .../proxy/impl/AsmProxyClassGenerator.java      | 467 ++++++++++++++++++
 .../AbstractManualInvocationHandler.java        | 114 +++++
 .../DelegateManualInvocationHandler.java        |  48 ++
 .../InterceptManualInvocationHandler.java       |  55 +++
 .../invocation/ManualInvocationContext.java     | 191 ++++++++
 ...nualInvocationThrowableWrapperException.java |  31 ++
 .../src/main/resources/META-INF/beans.xml       |  23 +
 ...che.deltaspike.proxy.spi.ProxyClassGenerator |  20 +
 deltaspike/modules/proxy/pom.xml                |  40 ++
 deltaspike/parent/pom.xml                       |   6 +
 41 files changed, 1713 insertions(+), 1549 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/dist/bom/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/dist/bom/pom.xml b/deltaspike/dist/bom/pom.xml
index 41d6af6..45fdbd4 100644
--- a/deltaspike/dist/bom/pom.xml
+++ b/deltaspike/dist/bom/pom.xml
@@ -193,6 +193,12 @@
             <artifactId>deltaspike-proxy-module-api</artifactId>
             <scope>compile</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.deltaspike.modules</groupId>
+            <artifactId>deltaspike-proxy-module-impl-asm5</artifactId>
+            <scope>runtime</scope>
+        </dependency>
     </dependencies>
 
 </project>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/dist/full/src/main/distribution/modules-module.xml
----------------------------------------------------------------------
diff --git a/deltaspike/dist/full/src/main/distribution/modules-module.xml 
b/deltaspike/dist/full/src/main/distribution/modules-module.xml
index 5e0841f..ca98524 100644
--- a/deltaspike/dist/full/src/main/distribution/modules-module.xml
+++ b/deltaspike/dist/full/src/main/distribution/modules-module.xml
@@ -32,6 +32,7 @@
         <resource-root 
path="deltaspike-partial-bean-module-api-${project.version}.jar"/>
         <resource-root 
path="deltaspike-partial-bean-module-impl-${project.version}.jar"/>
         <resource-root 
path="deltaspike-proxy-module-api-${project.version}.jar"/>
+        <resource-root 
path="deltaspike-proxy-module-impl-asm5-${project.version}.jar"/>
         <resource-root 
path="deltaspike-security-module-api-${project.version}.jar"/>
         <resource-root 
path="deltaspike-security-module-impl-${project.version}.jar"/>
         <resource-root 
path="deltaspike-servlet-module-api-${project.version}.jar"/>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/dist/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/dist/pom.xml b/deltaspike/dist/pom.xml
index 8796589..fb4d082 100644
--- a/deltaspike/dist/pom.xml
+++ b/deltaspike/dist/pom.xml
@@ -216,14 +216,21 @@
                 <version>${project.version}</version>
                 <scope>runtime</scope>
             </dependency>
-        </dependencies>
 
-        <dependency>
-            <groupId>org.apache.deltaspike.modules</groupId>
-            <artifactId>deltaspike-proxy-module-api</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-        </dependency>
+            <dependency>
+                <groupId>org.apache.deltaspike.modules</groupId>
+                <artifactId>deltaspike-proxy-module-api</artifactId>
+                <version>${project.version}</version>
+                <scope>compile</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.deltaspike.modules</groupId>
+                <artifactId>deltaspike-proxy-module-impl-asm5</artifactId>
+                <version>${project.version}</version>
+                <scope>runtime</scope>
+            </dependency>
+        </dependencies>
     </dependencyManagement>
 
     <modules>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/jsf/impl-ee6/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl-ee6/pom.xml 
b/deltaspike/modules/jsf/impl-ee6/pom.xml
index 4dbf669..3e81fb8 100644
--- a/deltaspike/modules/jsf/impl-ee6/pom.xml
+++ b/deltaspike/modules/jsf/impl-ee6/pom.xml
@@ -132,6 +132,10 @@
             <groupId>org.apache.deltaspike.modules</groupId>
             <artifactId>deltaspike-proxy-module-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.deltaspike.modules</groupId>
+            <artifactId>deltaspike-proxy-module-impl-asm5</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/jsf/impl/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/pom.xml 
b/deltaspike/modules/jsf/impl/pom.xml
index 219033e..acf9277 100644
--- a/deltaspike/modules/jsf/impl/pom.xml
+++ b/deltaspike/modules/jsf/impl/pom.xml
@@ -114,6 +114,10 @@
             <groupId>org.apache.deltaspike.modules</groupId>
             <artifactId>deltaspike-proxy-module-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.deltaspike.modules</groupId>
+            <artifactId>deltaspike-proxy-module-impl-asm5</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
index 1f5f8af..5665739 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
@@ -21,6 +21,7 @@ package org.apache.deltaspike.jsf.impl.injection;
 import org.apache.deltaspike.core.util.ProxyUtils;
 import org.apache.deltaspike.jsf.api.config.JsfModuleConfig;
 import org.apache.deltaspike.jsf.impl.security.SecurityAwareViewHandler;
+import org.apache.deltaspike.proxy.spi.DeltaSpikeProxy;
 
 import javax.faces.FacesException;
 import javax.faces.application.Application;
@@ -31,8 +32,6 @@ import javax.faces.event.PreDestroyViewMapEvent;
 import javax.faces.event.SystemEvent;
 import javax.faces.validator.Validator;
 
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxy;
-
 public class InjectionAwareApplicationWrapper extends ApplicationWrapper
 {
     private final Application wrapped;

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyExtension.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyExtension.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyExtension.java
index e119869..5828982 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyExtension.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyExtension.java
@@ -22,6 +22,7 @@ import 
org.apache.deltaspike.core.spi.activation.Deactivatable;
 import org.apache.deltaspike.core.util.ClassDeactivationUtils;
 import org.apache.deltaspike.core.util.bean.BeanBuilder;
 import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder;
+import org.apache.deltaspike.proxy.api.DeltaSpikeProxyContextualLifecycle;
 
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
@@ -42,8 +43,6 @@ import java.util.HashSet;
 import java.util.Set;
 import java.util.logging.Logger;
 
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxyContextualLifecycle;
-
 public class ConverterAndValidatorProxyExtension implements Extension, 
Deactivatable
 {
     private static final Logger LOG = 
Logger.getLogger(ConverterAndValidatorProxyExtension.class.getName());

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyFactory.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyFactory.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyFactory.java
index 922ebae..055bb7c 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyFactory.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/proxy/ConverterAndValidatorProxyFactory.java
@@ -18,6 +18,8 @@
  */
 package org.apache.deltaspike.jsf.impl.injection.proxy;
 
+import org.apache.deltaspike.proxy.api.DeltaSpikeProxyFactory;
+
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -27,8 +29,6 @@ import javax.enterprise.inject.Typed;
 import javax.faces.component.PartialStateHolder;
 import javax.faces.component.StateHolder;
 
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxyFactory;
-
 @Typed
 public class ConverterAndValidatorProxyFactory extends DeltaSpikeProxyFactory
 {

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/partial-bean/impl/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/partial-bean/impl/pom.xml 
b/deltaspike/modules/partial-bean/impl/pom.xml
index 1d067a6..2560d65 100644
--- a/deltaspike/modules/partial-bean/impl/pom.xml
+++ b/deltaspike/modules/partial-bean/impl/pom.xml
@@ -67,5 +67,9 @@
             <artifactId>deltaspike-proxy-module-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.deltaspike.modules</groupId>
+            <artifactId>deltaspike-proxy-module-impl-asm5</artifactId>
+        </dependency>
     </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java
 
b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java
index 5245b90..916a068 100644
--- 
a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java
+++ 
b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanBindingExtension.java
@@ -37,8 +37,8 @@ import 
org.apache.deltaspike.core.spi.activation.Deactivatable;
 import org.apache.deltaspike.core.util.ClassDeactivationUtils;
 import org.apache.deltaspike.core.util.bean.BeanBuilder;
 import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder;
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxyContextualLifecycle;
 import org.apache.deltaspike.partialbean.api.PartialBeanBinding;
+import org.apache.deltaspike.proxy.api.DeltaSpikeProxyContextualLifecycle;
 
 public class PartialBeanBindingExtension implements Extension, Deactivatable
 {

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanProxyFactory.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanProxyFactory.java
 
b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanProxyFactory.java
index 431e6ee..03514da 100644
--- 
a/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanProxyFactory.java
+++ 
b/deltaspike/modules/partial-bean/impl/src/main/java/org/apache/deltaspike/partialbean/impl/PartialBeanProxyFactory.java
@@ -18,6 +18,8 @@
  */
 package org.apache.deltaspike.partialbean.impl;
 
+import org.apache.deltaspike.proxy.api.DeltaSpikeProxyFactory;
+
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -25,8 +27,6 @@ import java.util.Iterator;
 
 import javax.enterprise.inject.Typed;
 
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxyFactory;
-
 /**
  * {@link DeltaSpikeProxyFactory} which delegates all abstract methods to the 
  * partial bean binding {@link java.lang.reflect.InvocationHandler}.

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/pom.xml b/deltaspike/modules/pom.xml
index 396291f..af5c979 100644
--- a/deltaspike/modules/pom.xml
+++ b/deltaspike/modules/pom.xml
@@ -35,7 +35,7 @@
     <name>Apache DeltaSpike Modules</name>
 
     <modules>
-        <module>proxy-utils</module>
+        <module>proxy</module>
         <module>security</module>
         <module>jpa</module>
         <module>servlet</module>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/proxy-utils/api/pom.xml 
b/deltaspike/modules/proxy-utils/api/pom.xml
deleted file mode 100644
index 8c30e1b..0000000
--- a/deltaspike/modules/proxy-utils/api/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?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 xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-
-       <parent>
-               <groupId>org.apache.deltaspike.modules</groupId>
-               <artifactId>proxy-utils-module-project</artifactId>
-               <version>1.3.1-SNAPSHOT</version>
-       </parent>
-
-       <artifactId>deltaspike-proxy-module-api</artifactId>
-
-       <name>Apache DeltaSpike Proxy-Module API</name>
-    
-        <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <version>2.3</version>
-                <configuration>
-                    <shadedArtifactAttached>false</shadedArtifactAttached>
-                    
<createDependencyReducedPom>false</createDependencyReducedPom>
-                    
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-                    <relocations>
-                        <relocation>
-                            <pattern>org.objectweb.asm</pattern>
-                            
<shadedPattern>org.apache.deltaspike.proxyutils.asm5</shadedPattern>
-                        </relocation>
-                    </relocations>
-                    <artifactSet>
-                        <includes>
-                            <include>org.ow2.asm:asm</include>
-                            <include>org.ow2.asm:asm-commons</include>
-                            <include>org.ow2.asm:asm-tree</include>
-                        </includes>
-                    </artifactSet>
-                </configuration>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.deltaspike.core</groupId>
-                       <artifactId>deltaspike-core-api</artifactId>
-               </dependency>
-        <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm</artifactId>
-            <version>5.0.3</version>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm-commons</artifactId>
-            <version>5.0.3</version>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm-tree</artifactId>
-            <version>5.0.3</version>
-            <optional>true</optional>
-        </dependency>
-       </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/AbstractManualInvocationHandler.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/AbstractManualInvocationHandler.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/AbstractManualInvocationHandler.java
deleted file mode 100644
index 3c49bb4..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/AbstractManualInvocationHandler.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.deltaspike.proxy.invocation;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import javax.enterprise.inject.Typed;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InterceptionType;
-import javax.enterprise.inject.spi.Interceptor;
-import javax.interceptor.InterceptorBinding;
-import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
-
-@Typed
-public abstract class AbstractManualInvocationHandler implements 
InvocationHandler
-{
-    @Override
-    public Object invoke(Object proxy, Method method, Object[] parameters) 
throws Throwable
-    {
-        // check if interceptors are defined, otherwise just call the original 
logik
-        List<Interceptor<?>> interceptors = resolveInterceptors(proxy, method);
-        if (interceptors != null && interceptors.size() > 0)
-        {
-            try
-            {
-                ManualInvocationContext invocationContext =
-                        new ManualInvocationContext(this, interceptors, proxy, 
method, parameters, null);
-
-                Object returnValue = invocationContext.proceed();
-
-                if (invocationContext.isProceedOriginal())
-                {
-                    return invocationContext.getProceedOriginalReturnValue();
-                }
-
-                return returnValue;
-            }
-            catch (ManualInvocationThrowableWrapperException e)
-            {
-                throw e.getCause();
-            }
-        }
-
-        return proceedOriginal(proxy, method, parameters);
-    }
-
-    /**
-     * Calls the original logic after invoking the interceptor chain.
-     * 
-     * @param proxy The current proxy instance.
-     * @param method The current invoked method.
-     * @param parameters The method parameter.
-     * @return The original value from the original method.
-     * @throws Throwable 
-     */
-    protected abstract Object proceedOriginal(Object proxy, Method method, 
Object[] parameters) throws Throwable;
-
-    protected List<Interceptor<?>> resolveInterceptors(Object instance, Method 
method)
-    {
-        Annotation[] interceptorBindings = 
extractInterceptorBindings(instance, method);
-        if (interceptorBindings.length > 0)
-        {
-            BeanManager beanManager = 
BeanManagerProvider.getInstance().getBeanManager();
-            return 
beanManager.resolveInterceptors(InterceptionType.AROUND_INVOKE, 
interceptorBindings);
-        }
-
-        return null;
-    }
-
-    // TODO stereotypes
-    protected Annotation[] extractInterceptorBindings(Object instance, Method 
method)
-    {
-        ArrayList<Annotation> bindings = new ArrayList<Annotation>();
-
-        for (Annotation annotation : 
instance.getClass().getDeclaredAnnotations())
-        {
-            if 
(annotation.annotationType().isAnnotationPresent(InterceptorBinding.class)
-                    && !bindings.contains(annotation))
-            {
-                bindings.add(annotation);
-            }
-        }
-
-        for (Annotation annotation : method.getDeclaredAnnotations())
-        {
-            if 
(annotation.annotationType().isAnnotationPresent(InterceptorBinding.class)
-                    && !bindings.contains(annotation))
-            {
-                bindings.add(annotation);
-            }
-        }
-
-        return bindings.toArray(new Annotation[bindings.size()]);
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/DelegateManualInvocationHandler.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/DelegateManualInvocationHandler.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/DelegateManualInvocationHandler.java
deleted file mode 100644
index 10da64d..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/DelegateManualInvocationHandler.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.deltaspike.proxy.invocation;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-
-import javax.enterprise.inject.Typed;
-
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxy;
-
-/**
- * {@link AbstractManualInvocationHandler} which delegates the method call to 
the defined {@link InvocationHandler}
- * in {@link DeltaSpikeProxy#getDelegateInvocationHandler()}.
- */
-@Typed
-public class DelegateManualInvocationHandler extends 
AbstractManualInvocationHandler
-{
-    private static final DelegateManualInvocationHandler INSTANCE = new 
DelegateManualInvocationHandler();
-    
-    public static Object staticInvoke(Object proxy, Method method, Object[] 
parameters) throws Throwable
-    {
-        return INSTANCE.invoke(proxy, method, parameters);
-    }
-    
-    @Override
-    protected Object proceedOriginal(Object proxy, Method method, Object[] 
parameters) throws Throwable
-    {
-        InvocationHandler delegateInvocationHandler = ((DeltaSpikeProxy) 
proxy).getDelegateInvocationHandler();
-        return delegateInvocationHandler.invoke(proxy, method, parameters);
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/InterceptManualInvocationHandler.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/InterceptManualInvocationHandler.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/InterceptManualInvocationHandler.java
deleted file mode 100644
index 8eb6b90..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/InterceptManualInvocationHandler.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.deltaspike.proxy.invocation;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.enterprise.inject.Typed;
-
-import org.apache.deltaspike.proxy.util.DeltaSpikeProxyFactory;
-
-/**
- * {@link AbstractManualInvocationHandler} which just delegates to the 
original method after invoking interceptors.
- */
-@Typed
-public class InterceptManualInvocationHandler extends 
AbstractManualInvocationHandler
-{
-    private static final InterceptManualInvocationHandler INSTANCE = new 
InterceptManualInvocationHandler();
-    
-    public static Object staticInvoke(Object proxy, Method method, Object[] 
parameters) throws Throwable
-    {
-        return INSTANCE.invoke(proxy, method, parameters);
-    }
-    
-    @Override
-    protected Object proceedOriginal(Object proxy, Method method, Object[] 
parameters) throws Throwable
-    {
-        try
-        {
-            Method superAccessorMethod = 
DeltaSpikeProxyFactory.getSuperAccessorMethod(proxy, method);
-            return superAccessorMethod.invoke(proxy, parameters);
-        }
-        catch (InvocationTargetException e)
-        {
-            // rethrow original exception
-            throw e.getCause();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationContext.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationContext.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationContext.java
deleted file mode 100644
index 4761c2f..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationContext.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * 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.deltaspike.proxy.invocation;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.Typed;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InterceptionType;
-import javax.enterprise.inject.spi.Interceptor;
-import javax.interceptor.InvocationContext;
-import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
-
-/**
- * {@link InvocationContext} implementation to support manual interceptor 
invocation before invoking the
- * original logic via the given {@link AbstractManualInvocationHandler}.
- */
-@Typed
-public class ManualInvocationContext<T, H> implements InvocationContext
-{
-    protected List<Interceptor<H>> interceptors;
-    protected int interceptorIndex;
-    protected T target;
-    protected Method method;
-    protected Object[] parameters;
-    protected Map<String, Object> contextData;
-    protected Object timer;
-    protected AbstractManualInvocationHandler manualInvocationHandler;
-
-    protected BeanManager beanManager;
-
-    protected boolean proceedOriginal;
-    protected Object proceedOriginalReturnValue;
-
-    public ManualInvocationContext(AbstractManualInvocationHandler 
manualInvocationHandler,
-            List<Interceptor<H>> interceptors, T target, Method method, 
Object[] parameters, Object timer)
-    {
-        this.manualInvocationHandler = manualInvocationHandler;
-        this.interceptors = interceptors;
-        this.target = target;
-        this.method = method;
-        this.parameters = parameters;
-        this.timer = timer;
-
-        this.interceptorIndex = 0;
-    }
-
-    @Override
-    public Object getTarget()
-    {
-        return target;
-    }
-
-    @Override
-    public Method getMethod()
-    {
-        return method;
-    }
-
-    @Override
-    public Object[] getParameters()
-    {
-        return parameters;
-    }
-
-    @Override
-    public void setParameters(Object[] os)
-    {
-        parameters = os;
-    }
-
-    @Override
-    public Map<String, Object> getContextData()
-    {
-        if (contextData == null)
-        {
-            contextData = new HashMap<String, Object>();
-        }
-        return contextData;
-    }
-
-    @Override
-    public Object proceed() throws Exception
-    {
-        if (proceedOriginal)
-        {
-            return null;
-        }
-
-        if (interceptors.size() > interceptorIndex)
-        {
-            Interceptor<H> interceptor = null;
-            CreationalContext<H> creationalContext = null;
-            H interceptorInstance = null;
-
-            try
-            {
-                // lazy init beanManager
-                if (beanManager == null)
-                {
-                    beanManager = 
BeanManagerProvider.getInstance().getBeanManager();
-                }
-
-                interceptor = interceptors.get(interceptorIndex++);
-                creationalContext = 
beanManager.createCreationalContext(interceptor);
-                interceptorInstance = interceptor.create(creationalContext);
-
-                return interceptor.intercept(InterceptionType.AROUND_INVOKE, 
interceptorInstance, this);
-            }
-            finally
-            {
-                if (creationalContext != null)
-                {
-                    if (interceptorInstance != null && interceptor != null)
-                    {
-                        interceptor.destroy(interceptorInstance, 
creationalContext);
-                    }
-
-                    creationalContext.release();
-                }
-            }
-        }
-
-
-        // workaround for OWB 1.1, otherwise we could just return the 
proceedOriginalReturnValue here
-        try
-        {
-            proceedOriginal = true;
-            proceedOriginalReturnValue = 
manualInvocationHandler.proceedOriginal(target, method, parameters);
-        }
-        catch (Exception e)
-        {
-            throw e;
-        }
-        catch (Throwable e)
-        {
-            // wrap the Throwable here as interceptors declared only "throws 
Exception"
-            throw new ManualInvocationThrowableWrapperException(e);
-        }
-
-        return null;
-    }
-
-    @Override
-    public Object getTimer()
-    {
-        return timer;
-    }
-
-    // @Override
-    // CDI 1.1 compatibility
-    public Constructor getConstructor()
-    {
-        return null;
-    }
-
-    public boolean isProceedOriginal()
-    {
-        return proceedOriginal;
-    }
-
-    public Object getProceedOriginalReturnValue()
-    {
-        return proceedOriginalReturnValue;
-    }
-
-    public void setProceedOriginalReturnValue(Object 
proceedOriginalReturnValue)
-    {
-        this.proceedOriginalReturnValue = proceedOriginalReturnValue;
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationThrowableWrapperException.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationThrowableWrapperException.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationThrowableWrapperException.java
deleted file mode 100644
index 259b493..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/invocation/ManualInvocationThrowableWrapperException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.deltaspike.proxy.invocation;
-
-/**
- * Wrapper exception to wrap and pass trough the original {@link Throwable} 
because
- * the {@link javax.interceptor.InvocationContext#proceed()} method only 
declares "throws Exception".
- */
-public class ManualInvocationThrowableWrapperException extends Exception
-{
-    public ManualInvocationThrowableWrapperException(Throwable e)
-    {
-        super(e);
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/AsmProxyClassGenerator.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/AsmProxyClassGenerator.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/AsmProxyClassGenerator.java
deleted file mode 100644
index d7c8671..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/AsmProxyClassGenerator.java
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * 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.deltaspike.proxy.util;
-
-import org.apache.deltaspike.proxy.invocation.DelegateManualInvocationHandler;
-import org.apache.deltaspike.proxy.invocation.InterceptManualInvocationHandler;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.UndeclaredThrowableException;
-import java.security.ProtectionDomain;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.enterprise.inject.Typed;
-
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.GeneratorAdapter;
-import org.objectweb.asm.commons.Method;
-
-@Typed
-public abstract class AsmProxyClassGenerator
-{
-    private static final String FIELDNAME_DELEGATE_INVOCATION_HANDLER = 
"delegateInvocationHandler";
-
-    private static final Type TYPE_CLASS = Type.getType(Class.class);
-    private static final Type TYPE_OBJECT = Type.getType(Object.class);
-
-    private AsmProxyClassGenerator()
-    {
-        // prevent instantiation
-    }
-
-    public static <T> Class<T> generateProxyClass(ClassLoader classLoader,
-            Class<T> targetClass,
-            Class<? extends InvocationHandler> delegateInvocationHandlerClass,
-            String suffix,
-            String superAccessorMethodSuffix,
-            Class<?>[] additionalInterfaces,
-            java.lang.reflect.Method[] delegateMethods,
-            java.lang.reflect.Method[] interceptMethods)
-    {
-        String proxyName = targetClass.getCanonicalName() + suffix;
-        String classFileName = proxyName.replace('.', '/');
-
-        byte[] proxyBytes = generateProxyClassBytes(targetClass, 
delegateInvocationHandlerClass,
-                classFileName, superAccessorMethodSuffix, 
additionalInterfaces, delegateMethods, interceptMethods);
-
-        Class<T> proxyClass = (Class<T>) loadClass(classLoader, proxyName, 
proxyBytes,
-                targetClass.getProtectionDomain());
-
-        return proxyClass;
-    }
-
-    private static byte[] generateProxyClassBytes(Class<?> targetClass,
-            Class<? extends InvocationHandler> delegateInvocationHandlerClass,
-            String proxyName,
-            String superAccessorMethodSuffix,
-            Class<?>[] additionalInterfaces,
-            java.lang.reflect.Method[] delegateMethods,
-            java.lang.reflect.Method[] interceptMethods)
-    {
-        Class<?> superClass = targetClass;
-        String[] interfaces = new String[] { };
-
-        if (targetClass.isInterface())
-        {
-            superClass = Object.class;
-            interfaces = new String[] { Type.getInternalName(targetClass) };
-        }
-
-        // add DeltaSpikeProxy as interface
-        interfaces = Arrays.copyOf(interfaces, interfaces.length + 1);
-        interfaces[interfaces.length - 1] = 
Type.getInternalName(DeltaSpikeProxy.class);
-
-        if (additionalInterfaces != null && additionalInterfaces.length > 0)
-        {
-            interfaces = Arrays.copyOf(interfaces, interfaces.length + 
additionalInterfaces.length);
-            for (int i = 0; i < additionalInterfaces.length; i++)
-            {
-                interfaces[(interfaces.length - 1) + i] = 
Type.getInternalName(additionalInterfaces[i]);
-            }
-        }
-
-        Type superType = Type.getType(superClass);
-        Type proxyType = Type.getObjectType(proxyName);
-        Type delegateInvocationHandlerType = 
Type.getType(delegateInvocationHandlerClass);
-
-        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, 
proxyType.getInternalName(), null,
-                superType.getInternalName(), interfaces);
-
-        // copy annotations
-        for (Annotation annotation : targetClass.getDeclaredAnnotations())
-        {
-            
cw.visitAnnotation(Type.getDescriptor(annotation.annotationType()), 
true).visitEnd();
-        }
-
-        defineInvocationHandlerField(cw, delegateInvocationHandlerType);
-        defineDefaultConstructor(cw, proxyType, superType);
-        defineDelegateInvocationHandlerConstructor(cw, proxyType, superType, 
delegateInvocationHandlerType);
-        defineDeltaSpikeProxyMethods(cw, proxyType, 
delegateInvocationHandlerType);
-
-        for (java.lang.reflect.Method method : delegateMethods)
-        {
-            defineMethod(cw, method, DelegateManualInvocationHandler.class);
-        }
-
-        for (java.lang.reflect.Method method : interceptMethods)
-        {
-            defineSuperAccessorMethod(cw, method, superType, 
superAccessorMethodSuffix);
-            defineMethod(cw, method, InterceptManualInvocationHandler.class);
-        }
-
-        return cw.toByteArray();
-    }
-
-    private static void defineInvocationHandlerField(ClassWriter cw, Type 
delegateInvocationHandlerType)
-    {
-        // generates
-        // private MyInvocationHandler delegateInvocationHandler;
-        cw.visitField(Opcodes.ACC_PRIVATE, 
FIELDNAME_DELEGATE_INVOCATION_HANDLER,
-                delegateInvocationHandlerType.getDescriptor(), null, 
null).visitEnd();
-    }
-
-    private static void defineDefaultConstructor(ClassWriter cw, Type 
proxyType, Type superType)
-    {
-        GeneratorAdapter mg = new GeneratorAdapter(Opcodes.ACC_PUBLIC,
-                new Method("<init>", Type.VOID_TYPE, new Type[]{ }),
-                null,
-                null,
-                cw);
-
-        mg.visitCode();
-
-        // invoke super constructor
-        mg.loadThis();
-        mg.invokeConstructor(superType, Method.getMethod("void <init> ()"));
-        mg.returnValue();
-        mg.endMethod();
-
-        mg.visitEnd();
-    }
-    
-    private static void defineDelegateInvocationHandlerConstructor(ClassWriter 
cw, Type proxyType, Type superType,
-            Type delegateInvocationHandlerType)
-    {
-        GeneratorAdapter mg = new GeneratorAdapter(Opcodes.ACC_PUBLIC,
-                new Method("<init>", Type.VOID_TYPE, new Type[] { 
delegateInvocationHandlerType }),
-                null,
-                null,
-                cw);
-
-        mg.visitCode();
-
-        // invoke super constructor
-        mg.loadThis();
-        mg.invokeConstructor(superType, Method.getMethod("void <init> ()"));
-        
-        // set invocation handler
-        mg.loadThis();
-        mg.loadArg(0);
-        mg.putField(proxyType, FIELDNAME_DELEGATE_INVOCATION_HANDLER, 
delegateInvocationHandlerType);
-        
-        mg.returnValue();
-        mg.endMethod();
-
-        mg.visitEnd();
-    }
-
-    private static void defineDeltaSpikeProxyMethods(ClassWriter cw, Type 
proxyType, Type delegateInvocationHandlerType)
-    {
-        try
-        {
-            // implement #setDelegateInvocationHandler
-            Method asmMethod = 
Method.getMethod(DeltaSpikeProxy.class.getDeclaredMethod(
-                    "setDelegateInvocationHandler", InvocationHandler.class));
-            GeneratorAdapter mg = new GeneratorAdapter(Opcodes.ACC_PUBLIC, 
asmMethod, null, null, cw);
-
-            mg.visitCode();
-
-            mg.loadThis();
-            mg.loadArg(0);
-            mg.checkCast(delegateInvocationHandlerType);
-            mg.putField(proxyType, FIELDNAME_DELEGATE_INVOCATION_HANDLER, 
delegateInvocationHandlerType);
-            mg.returnValue();
-
-            mg.visitMaxs(2, 1);
-            mg.visitEnd();
-
-
-            // implement #getDelegateInvocationHandler
-            asmMethod = 
Method.getMethod(DeltaSpikeProxy.class.getDeclaredMethod("getDelegateInvocationHandler"));
-            mg = new GeneratorAdapter(Opcodes.ACC_PUBLIC, asmMethod, null, 
null, cw);
-
-            mg.visitCode();
-
-            mg.loadThis();
-            mg.getField(proxyType, FIELDNAME_DELEGATE_INVOCATION_HANDLER, 
delegateInvocationHandlerType);
-            mg.returnValue();
-
-            mg.visitMaxs(2, 1);
-            mg.visitEnd();
-        }
-        catch (NoSuchMethodException e)
-        {
-            throw new IllegalStateException("Unable to implement " + 
DeltaSpikeProxy.class.getName(), e);
-        }
-    }
-
-    private static void defineSuperAccessorMethod(ClassWriter cw, 
java.lang.reflect.Method method, Type superType,
-            String superAccessorMethodSuffix) 
-    {
-        Method originalAsmMethod = Method.getMethod(method);
-        Method newAsmMethod = new Method(method.getName() + 
superAccessorMethodSuffix,
-                originalAsmMethod.getReturnType(),
-                originalAsmMethod.getArgumentTypes());
-        GeneratorAdapter mg = new GeneratorAdapter(Opcodes.ACC_PUBLIC, 
newAsmMethod, null, null, cw);
-        
-        mg.visitCode();
-        
-        // call super method
-        mg.loadThis();
-        mg.loadArgs();
-        mg.visitMethodInsn(Opcodes.INVOKESPECIAL,
-                superType.getInternalName(),
-                method.getName(),
-                Type.getMethodDescriptor(method),
-                false);
-        mg.returnValue();
-        
-        // finish the method
-        mg.endMethod();
-        mg.visitMaxs(10, 10);
-        mg.visitEnd();
-    }
-    
-    private static void defineMethod(ClassWriter cw, java.lang.reflect.Method 
method,
-            Class manualInvocationHandlerClass)
-    {
-        Type methodType = Type.getType(method);
-        
-        ArrayList<Type> exceptionsToCatch = new ArrayList<Type>();
-        for (Class<?> exception : method.getExceptionTypes())
-        {
-            if (!RuntimeException.class.isAssignableFrom(exception))
-            {
-                exceptionsToCatch.add(Type.getType(exception));
-            }
-        }
-        
-        // push the method definition
-        int modifiers = (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED) & 
method.getModifiers();
-        Method asmMethod = Method.getMethod(method);
-        GeneratorAdapter mg = new GeneratorAdapter(modifiers,
-                asmMethod,
-                null,
-                getTypes(method.getExceptionTypes()),
-                cw);
-
-        // copy annotations
-        for (Annotation annotation : method.getDeclaredAnnotations())
-        {
-            
mg.visitAnnotation(Type.getDescriptor(annotation.annotationType()), 
true).visitEnd();
-        }
-
-        mg.visitCode();
-
-        Label tryBlockStart = mg.mark();
-
-        mg.loadThis();
-        loadCurrentMethod(mg, method, methodType);
-        loadArguments(mg, method, methodType);
-        
-        // invoke our ProxyInvocationHandler
-        mg.invokeStatic(Type.getType(manualInvocationHandlerClass),
-                Method.getMethod("Object staticInvoke(Object, 
java.lang.reflect.Method, Object[])"));
-
-        // cast the result
-        mg.unbox(methodType.getReturnType());
-
-        // build try catch
-        Label tryBlockEnd = mg.mark();
-        
-        // push return
-        mg.returnValue();
-
-        // catch runtime exceptions and rethrow it
-        Label rethrow = mg.mark();
-        mg.visitVarInsn(Opcodes.ASTORE, 1);
-        mg.visitVarInsn(Opcodes.ALOAD, 1);
-        mg.throwException();
-        mg.visitTryCatchBlock(tryBlockStart, tryBlockEnd, rethrow, 
Type.getInternalName(RuntimeException.class));
-
-        // catch checked exceptions and rethrow it
-        boolean throwableCatched = false;
-        if (exceptionsToCatch.size() > 0)
-        {
-            rethrow = mg.mark();
-            mg.visitVarInsn(Opcodes.ASTORE, 1);
-            mg.visitVarInsn(Opcodes.ALOAD, 1);
-            mg.throwException();
-
-            // catch declared exceptions and rethrow it...
-            for (Type exceptionType : exceptionsToCatch)
-            {
-                if 
(exceptionType.getClassName().equals(Throwable.class.getName()))
-                {
-                    throwableCatched = true;
-                }
-                mg.visitTryCatchBlock(tryBlockStart, tryBlockEnd, rethrow, 
exceptionType.getInternalName());
-            }
-        }
-
-        // if throwable isn't alreached cachted, catch it and wrap it with an 
UndeclaredThrowableException and throw it
-        if (!throwableCatched)
-        {
-            Type uteType = Type.getType(UndeclaredThrowableException.class);
-            Label wrapAndRethrow = mg.mark();
-
-            mg.visitVarInsn(Opcodes.ASTORE, 1);
-            mg.newInstance(uteType);
-            mg.dup();
-            mg.visitVarInsn(Opcodes.ALOAD, 1);
-            mg.invokeConstructor(uteType,
-                    Method.getMethod("void <init>(java.lang.Throwable)"));
-            mg.throwException();
-
-            mg.visitTryCatchBlock(tryBlockStart, tryBlockEnd, wrapAndRethrow, 
Type.getInternalName(Throwable.class));
-        }
-
-        // finish the method
-        mg.endMethod();
-        mg.visitMaxs(10, 10);
-        mg.visitEnd();
-    }
-
-    /**
-     * Generates:
-     * <pre>
-     * Method method =
-     *      method.getDeclaringClass().getMethod("methodName", new Class[] { 
args... });
-     * </pre>
-     * @param mg
-     * @param method
-     * @param methodType
-     */
-    private static void loadCurrentMethod(GeneratorAdapter mg, 
java.lang.reflect.Method method, Type methodType)
-    {
-        mg.push(Type.getType(method.getDeclaringClass()));
-        mg.push(method.getName());
-
-        // create the Class[]
-        mg.push(methodType.getArgumentTypes().length);
-        mg.newArray(TYPE_CLASS);
-
-        // push parameters into array
-        for (int i = 0; i < methodType.getArgumentTypes().length; i++)
-        {
-            // keep copy of array on stack
-            mg.dup();
-
-            // push index onto stack
-            mg.push(i);
-            mg.push(methodType.getArgumentTypes()[i]);
-            mg.arrayStore(TYPE_CLASS);
-        }
-
-        // invoke getMethod() with the method name and the array of types
-        mg.invokeVirtual(TYPE_CLASS, 
Method.getMethod("java.lang.reflect.Method getDeclaredMethod(String, 
Class[])"));
-    }
-
-    /**
-     * Defines a new Object[] and push all method argmuments into the array.
-     *
-     * @param mg
-     * @param method
-     * @param methodType
-     */
-    private static void loadArguments(GeneratorAdapter mg, 
java.lang.reflect.Method method, Type methodType)
-    {
-        // create the Object[]
-        mg.push(methodType.getArgumentTypes().length);
-        mg.newArray(TYPE_OBJECT);
-
-        // push parameters into array
-        for (int i = 0; i < methodType.getArgumentTypes().length; i++)
-        {
-            // keep copy of array on stack
-            mg.dup();
-
-            // push index onto stack
-            mg.push(i);
-
-            mg.loadArg(i);
-            mg.valueOf(methodType.getArgumentTypes()[i]);
-            mg.arrayStore(TYPE_OBJECT);
-        }
-    }
-
-    private static Type[] getTypes(Class<?>... src)
-    {
-        Type[] result = new Type[src.length];
-        for (int i = 0; i < result.length; i++)
-        {
-            result[i] = Type.getType(src[i]);
-        }
-        return result;
-    }
-
-    /**
-     * Adapted from http://asm.ow2.org/doc/faq.html#Q5
-     *
-     * @param b
-     *
-     * @return Class<?>
-     */
-    private static Class<?> loadClass(ClassLoader loader, String className, 
byte[] b,
-            ProtectionDomain protectionDomain)
-    {
-        // override classDefine (as it is protected) and define the class.
-        try
-        {
-            java.lang.reflect.Method method = 
ClassLoader.class.getDeclaredMethod(
-                    "defineClass", String.class, byte[].class, int.class, 
int.class, ProtectionDomain.class);
-
-            // protected method invocation
-            boolean accessible = method.isAccessible();
-            if (!accessible)
-            {
-                method.setAccessible(true);
-            }
-            try
-            {
-                return (Class<?>) method.invoke(loader, className, b, 
Integer.valueOf(0), Integer.valueOf(b.length),
-                        protectionDomain);
-            }
-            finally
-            {
-                if (!accessible)
-                {
-                    method.setAccessible(false);
-                }
-            }
-        }
-        catch (Exception e)
-        {
-            throw e instanceof RuntimeException ? ((RuntimeException) e) : new 
RuntimeException(e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxy.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxy.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxy.java
deleted file mode 100644
index e4830e7..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxy.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.deltaspike.proxy.util;
-
-import java.lang.reflect.InvocationHandler;
-
-/**
- * Interface which will automatically be implemented by the proxy instance.
- */
-public interface DeltaSpikeProxy
-{
-    void setDelegateInvocationHandler(InvocationHandler 
delegateInvocationHandler);
-
-    InvocationHandler getDelegateInvocationHandler();
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyContextualLifecycle.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyContextualLifecycle.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyContextualLifecycle.java
deleted file mode 100644
index c8fefc8..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyContextualLifecycle.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * 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.deltaspike.proxy.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.util.Set;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionTarget;
-import javax.enterprise.inject.spi.PassivationCapable;
-import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
-import org.apache.deltaspike.core.api.provider.BeanProvider;
-import org.apache.deltaspike.core.util.ExceptionUtils;
-import org.apache.deltaspike.core.util.metadata.builder.ContextualLifecycle;
-
-/**
- * {@link ContextualLifecycle} which handles a complete lifecycle of a proxy:
- * - creates a proxy via a {@link DeltaSpikeProxyFactory}
- * - handles the instantiation and injection of the proxy
- * - handles the instantiation via CDI of the delegate {@link 
InvocationHandler} and assign it to the proxy
- * - handles the release/destruction of both proxy and delegate {@link 
InvocationHandler}
- *
- * @param <T> The class of the original class.
- * @param <H> The class of the delegate {@link InvocationHandler}.
- */
-public class DeltaSpikeProxyContextualLifecycle<T, H extends 
InvocationHandler> implements ContextualLifecycle<T>
-{
-    private final Class<T> proxyClass;
-    private final Class<H> delegateInvocationHandlerClass;
-    private final Class<T> targetClass;
-    
-    private InjectionTarget<T> injectionTarget;
-    private CreationalContext<?> creationalContextOfDependentHandler;
-
-    public DeltaSpikeProxyContextualLifecycle(Class<T> targetClass, Class<H> 
delegateInvocationHandlerClass,
-            DeltaSpikeProxyFactory proxyFactory, BeanManager beanManager)
-    {
-        this.targetClass = targetClass;
-        this.delegateInvocationHandlerClass = delegateInvocationHandlerClass;
-        this.proxyClass = proxyFactory.getProxyClass(targetClass, 
delegateInvocationHandlerClass);
-
-        if (!targetClass.isInterface())
-        {
-            AnnotatedType<T> annotatedType = 
beanManager.createAnnotatedType(this.targetClass);
-            this.injectionTarget = 
beanManager.createInjectionTarget(annotatedType);
-        }
-    }
-
-    @Override
-    public T create(Bean bean, CreationalContext creationalContext)
-    {
-        try
-        {
-            T instance;
-
-            if (delegateInvocationHandlerClass == null)
-            {
-                instance = proxyClass.newInstance();
-            }
-            else
-            {
-                H delegateInvocationHandler = 
instantiateDelegateInvocationHandler();
-                Constructor<T> constructor = 
proxyClass.getConstructor(delegateInvocationHandlerClass);
-                instance = constructor.newInstance(delegateInvocationHandler);
-            }
-
-            if (this.injectionTarget != null)
-            {
-                this.injectionTarget.inject(instance, creationalContext);
-                this.injectionTarget.postConstruct(instance);
-            }
-
-            return instance;
-        }
-        catch (Exception e)
-        {
-            ExceptionUtils.throwAsRuntimeException(e);
-        }
-
-        // can't happen
-        return null;
-    }
-
-    @Override
-    public void destroy(Bean<T> bean, T instance, CreationalContext<T> 
creationalContext)
-    {
-        if (this.injectionTarget != null)
-        {
-            this.injectionTarget.preDestroy(instance);
-        }
-        
-        if (this.creationalContextOfDependentHandler != null)
-        {
-            this.creationalContextOfDependentHandler.release();
-        }
-
-        creationalContext.release();
-    }
-    
-    protected H instantiateDelegateInvocationHandler()
-    {
-        Set<Bean<H>> handlerBeans = 
BeanProvider.getBeanDefinitions(this.delegateInvocationHandlerClass, false, 
true);
-        
-        if (handlerBeans.size() != 1)
-        {
-            StringBuilder beanInfo = new StringBuilder();
-            for (Bean<H> bean : handlerBeans)
-            {
-                if (beanInfo.length() != 0)
-                {
-                    beanInfo.append(", ");
-                }
-                beanInfo.append(bean);
-
-                if (bean instanceof PassivationCapable)
-                {
-                    beanInfo.append(" bean-id: 
").append(((PassivationCapable)bean).getId());
-                }
-            }
-
-            throw new IllegalStateException(handlerBeans.size() + " beans 
found for "
-                    + this.delegateInvocationHandlerClass + " found beans: " + 
beanInfo.toString());
-        }
-
-        Bean<H> handlerBean = handlerBeans.iterator().next();
-        
-        BeanManager beanManager = 
BeanManagerProvider.getInstance().getBeanManager();
-        CreationalContext<?> creationalContext = 
beanManager.createCreationalContext(handlerBean);
-        
-        H handlerInstance = (H) beanManager.getReference(handlerBean,
-                this.delegateInvocationHandlerClass, creationalContext);
-        
-        if (handlerBean.getScope().equals(Dependent.class))
-        {
-            this.creationalContextOfDependentHandler = creationalContext;
-        }
-
-        return handlerInstance;
-    }
-}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyFactory.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyFactory.java
 
b/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyFactory.java
deleted file mode 100644
index 73d966b..0000000
--- 
a/deltaspike/modules/proxy-utils/api/src/main/java/org/apache/deltaspike/proxy/util/DeltaSpikeProxyFactory.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * 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.deltaspike.proxy.util;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import javax.interceptor.InterceptorBinding;
-import org.apache.deltaspike.core.util.ClassUtils;
-
-public abstract class DeltaSpikeProxyFactory
-{
-    private static final String SUPER_ACCESSOR_METHOD_SUFFIX = "$super";
-    
-    public <T> Class<T> getProxyClass(Class<T> targetClass,
-            Class<? extends InvocationHandler> delegateInvocationHandlerClass)
-    {
-        // check if a proxy is already defined for this class
-        Class<T> proxyClass = 
ClassUtils.tryToLoadClassForName(constructProxyClassName(targetClass), 
targetClass);
-        if (proxyClass == null)
-        {
-            proxyClass = createProxyClass(targetClass.getClassLoader(), 
targetClass, delegateInvocationHandlerClass);
-        }
-
-        return proxyClass;
-    }
-
-    private synchronized <T> Class<T> createProxyClass(ClassLoader 
classLoader, Class<T> targetClass,
-            Class<? extends InvocationHandler> delegateInvocationHandlerClass)
-    {
-        Class<T> proxyClass = 
ClassUtils.tryToLoadClassForName(constructProxyClassName(targetClass), 
targetClass);
-        if (proxyClass == null)
-        {
-            ArrayList<Method> allMethods = collectAllMethods(targetClass);
-            ArrayList<Method> interceptMethods = 
filterInterceptMethods(targetClass, allMethods);
-            ArrayList<Method> delegateMethods = 
getDelegateMethods(targetClass, allMethods);
-
-            // check if a interceptor is defined on class level. if not, skip 
interceptor methods
-            if (delegateMethods != null
-                    && interceptMethods.size() > 0
-                    && 
!containsInterceptorBinding(targetClass.getDeclaredAnnotations()))
-            {
-                // loop every method and check if a interceptor is defined on 
the method -> otherwise don't overwrite
-                // interceptMethods
-                Iterator<Method> iterator = interceptMethods.iterator();
-                while (iterator.hasNext())
-                {
-                    Method method = iterator.next();
-                    if 
(!containsInterceptorBinding(method.getDeclaredAnnotations()))
-                    {
-                        iterator.remove();
-                    }
-                }
-            }
-            
-            proxyClass = AsmProxyClassGenerator.generateProxyClass(classLoader,
-                    targetClass,
-                    delegateInvocationHandlerClass,
-                    getProxyClassSuffix(),
-                    SUPER_ACCESSOR_METHOD_SUFFIX,
-                    getAdditionalInterfacesToImplement(targetClass),
-                    delegateMethods == null ? new Method[0]
-                            : delegateMethods.toArray(new 
Method[delegateMethods.size()]),
-                    interceptMethods == null ? new Method[0]
-                            : interceptMethods.toArray(new 
Method[interceptMethods.size()]));
-        }
-
-        return proxyClass;
-    }
-    
-    // TODO stereotypes
-    protected boolean containsInterceptorBinding(Annotation[] annotations)
-    {
-        for (Annotation annotation : annotations)
-        {
-            if 
(annotation.annotationType().isAnnotationPresent(InterceptorBinding.class))
-            {
-                return true;
-            }
-        }
-        
-        return false;
-    }
-        
-    protected String constructProxyClassName(Class<?> clazz)
-    {
-        return clazz.getName() + getProxyClassSuffix();
-    }
-
-    protected static String constructSuperAccessorMethodName(Method method)
-    {
-        return method.getName() + SUPER_ACCESSOR_METHOD_SUFFIX;
-    }
-    
-    public static Method getSuperAccessorMethod(Object proxy, Method method) 
throws NoSuchMethodException
-    {
-        return proxy.getClass().getMethod(
-                constructSuperAccessorMethodName(method),
-                method.getParameterTypes());
-    }
-    
-    /**
-     * Checks if the given class is DS proxy class.
-     *
-     * @param clazz
-     * @return
-     */
-    public boolean isProxyClass(Class<?> clazz)
-    {
-        return clazz.getName().endsWith(getProxyClassSuffix());
-    }
-
-    protected boolean hasSameSignature(Method a, Method b)
-    {
-        return a.getName().equals(b.getName())
-                && a.getReturnType().equals(b.getReturnType())
-                && Arrays.equals(a.getParameterTypes(), b.getParameterTypes());
-    }
-
-    protected boolean ignoreMethod(Method method, List<Method> methods)
-    {
-        // we have no interest in generics bridge methods
-        if (method.isBridge())
-        {
-            return true;
-        }
-
-        // we do not proxy finalize()
-        if ("finalize".equals(method.getName()))
-        {
-            return true;
-        }
-
-        // same method...
-        if (methods.contains(method))
-        {
-            return true;
-        }
-
-        // check if a method with the same signature is already available
-        for (Method currentMethod : methods)
-        {
-            if (hasSameSignature(currentMethod, method))
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-    
-    protected ArrayList<Method> collectAllMethods(Class<?> clazz)
-    {
-        ArrayList<Method> methods = new ArrayList<Method>();
-        for (Method method : clazz.getDeclaredMethods())
-        {
-            if (!ignoreMethod(method, methods))
-            {
-                methods.add(method);
-            }
-        }
-        for (Method method : clazz.getMethods())
-        {
-            if (!ignoreMethod(method, methods))
-            {
-                methods.add(method);
-            }
-        }
-
-        // collect methods from abstract super classes...
-        Class currentSuperClass = clazz.getSuperclass();
-        while (currentSuperClass != null)
-        {
-            if (Modifier.isAbstract(currentSuperClass.getModifiers()))
-            {
-                for (Method method : currentSuperClass.getDeclaredMethods())
-                {
-                    if (!ignoreMethod(method, methods))
-                    {
-                        methods.add(method);
-                    }
-                }
-                for (Method method : currentSuperClass.getMethods())
-                {
-                    if (!ignoreMethod(method, methods))
-                    {
-                        methods.add(method);
-                    }
-                }
-            }
-            currentSuperClass = currentSuperClass.getSuperclass();
-        }
-
-        // sort out somewhere implemented abstract methods
-        Class currentClass = clazz;
-        while (currentClass != null)
-        {
-            Iterator<Method> methodIterator = methods.iterator();
-            while (methodIterator.hasNext())
-            {
-                Method method = methodIterator.next();
-                if (Modifier.isAbstract(method.getModifiers()))
-                {
-                    try
-                    {
-                        Method foundMethod = 
currentClass.getMethod(method.getName(), method.getParameterTypes());
-                        // if method is implementent in the current class -> 
remove it
-                        if (foundMethod != null && 
!Modifier.isAbstract(foundMethod.getModifiers()))
-                        {
-                            methodIterator.remove();
-                        }
-                    }
-                    catch (Exception e)
-                    {
-                        // ignore...
-                    }
-                }
-            }
-
-            currentClass = currentClass.getSuperclass();
-        }
-
-        return methods;
-    }
-    
-    protected ArrayList<Method> filterInterceptMethods(Class<?> targetClass, 
ArrayList<Method> allMethods)
-    {
-        ArrayList<Method> methods = new ArrayList<Method>();
-        
-        Iterator<Method> it = allMethods.iterator();
-        while (it.hasNext())
-        {
-            Method method = it.next();
-
-            if (Modifier.isPublic(method.getModifiers())
-                    && !Modifier.isFinal(method.getModifiers())
-                    && !Modifier.isAbstract(method.getModifiers()))
-            {
-                methods.add(method);
-            }
-        }
-        
-        return methods;
-    }
-    
-    protected Class<?>[] getAdditionalInterfacesToImplement(Class<?> 
targetClass)
-    {
-        return null;
-    }
-    
-    protected abstract ArrayList<Method> getDelegateMethods(Class<?> 
targetClass, ArrayList<Method> allMethods);
-    
-    protected abstract String getProxyClassSuffix();
-}
-

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/api/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy-utils/api/src/main/resources/META-INF/beans.xml 
b/deltaspike/modules/proxy-utils/api/src/main/resources/META-INF/beans.xml
deleted file mode 100644
index 4070730..0000000
--- a/deltaspike/modules/proxy-utils/api/src/main/resources/META-INF/beans.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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.
--->
-<beans xmlns="http://java.sun.com/xml/ns/javaee";
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd";>
-</beans>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy-utils/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/proxy-utils/pom.xml 
b/deltaspike/modules/proxy-utils/pom.xml
deleted file mode 100644
index 50e8e49..0000000
--- a/deltaspike/modules/proxy-utils/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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 xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.deltaspike.modules</groupId>
-        <artifactId>modules-project</artifactId>
-        <version>1.3.1-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.apache.deltaspike.modules</groupId>
-    <artifactId>proxy-utils-module-project</artifactId>
-    <version>1.3.1-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <name>Apache DeltaSpike Proxy-Module</name>
-
-    <modules>
-        <module>api</module>
-    </modules>
-</project>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy/api/pom.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/proxy/api/pom.xml 
b/deltaspike/modules/proxy/api/pom.xml
new file mode 100644
index 0000000..7c736d8
--- /dev/null
+++ b/deltaspike/modules/proxy/api/pom.xml
@@ -0,0 +1,40 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.apache.deltaspike.modules</groupId>
+               <artifactId>proxy-module-project</artifactId>
+               <version>1.3.1-SNAPSHOT</version>
+       </parent>
+
+       <artifactId>deltaspike-proxy-module-api</artifactId>
+
+       <name>Apache DeltaSpike Proxy-Module API</name>
+    
+       <dependencies>
+               <dependency>
+                       <groupId>org.apache.deltaspike.core</groupId>
+                       <artifactId>deltaspike-core-api</artifactId>
+               </dependency>
+       </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4d6aadc5/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyContextualLifecycle.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyContextualLifecycle.java
 
b/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyContextualLifecycle.java
new file mode 100644
index 0000000..2b57a2d
--- /dev/null
+++ 
b/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyContextualLifecycle.java
@@ -0,0 +1,162 @@
+/*
+ * 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.deltaspike.proxy.api;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.util.Set;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.enterprise.inject.spi.PassivationCapable;
+import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
+import org.apache.deltaspike.core.api.provider.BeanProvider;
+import org.apache.deltaspike.core.util.ExceptionUtils;
+import org.apache.deltaspike.core.util.metadata.builder.ContextualLifecycle;
+
+/**
+ * {@link ContextualLifecycle} which handles a complete lifecycle of a proxy:
+ * - creates a proxy via a {@link DeltaSpikeProxyFactory}
+ * - handles the instantiation and injection of the proxy
+ * - handles the instantiation via CDI of the delegate {@link 
InvocationHandler} and assign it to the proxy
+ * - handles the release/destruction of both proxy and delegate {@link 
InvocationHandler}
+ *
+ * @param <T> The class of the original class.
+ * @param <H> The class of the delegate {@link InvocationHandler}.
+ */
+public class DeltaSpikeProxyContextualLifecycle<T, H extends 
InvocationHandler> implements ContextualLifecycle<T>
+{
+    private final Class<T> proxyClass;
+    private final Class<H> delegateInvocationHandlerClass;
+    private final Class<T> targetClass;
+    
+    private InjectionTarget<T> injectionTarget;
+    private CreationalContext<?> creationalContextOfDependentHandler;
+
+    public DeltaSpikeProxyContextualLifecycle(Class<T> targetClass,
+                                              Class<H> 
delegateInvocationHandlerClass,
+                                              DeltaSpikeProxyFactory 
proxyFactory,
+                                              BeanManager beanManager)
+    {
+        this.targetClass = targetClass;
+        this.delegateInvocationHandlerClass = delegateInvocationHandlerClass;
+        this.proxyClass = proxyFactory.getProxyClass(targetClass, 
delegateInvocationHandlerClass);
+
+        if (!targetClass.isInterface())
+        {
+            AnnotatedType<T> annotatedType = 
beanManager.createAnnotatedType(this.targetClass);
+            this.injectionTarget = 
beanManager.createInjectionTarget(annotatedType);
+        }
+    }
+
+    @Override
+    public T create(Bean bean, CreationalContext creationalContext)
+    {
+        try
+        {
+            T instance;
+
+            if (delegateInvocationHandlerClass == null)
+            {
+                instance = proxyClass.newInstance();
+            }
+            else
+            {
+                H delegateInvocationHandler = 
instantiateDelegateInvocationHandler();
+                Constructor<T> constructor = 
proxyClass.getConstructor(delegateInvocationHandlerClass);
+                instance = constructor.newInstance(delegateInvocationHandler);
+            }
+
+            if (this.injectionTarget != null)
+            {
+                this.injectionTarget.inject(instance, creationalContext);
+                this.injectionTarget.postConstruct(instance);
+            }
+
+            return instance;
+        }
+        catch (Exception e)
+        {
+            ExceptionUtils.throwAsRuntimeException(e);
+        }
+
+        // can't happen
+        return null;
+    }
+
+    @Override
+    public void destroy(Bean<T> bean, T instance, CreationalContext<T> 
creationalContext)
+    {
+        if (this.injectionTarget != null)
+        {
+            this.injectionTarget.preDestroy(instance);
+        }
+        
+        if (this.creationalContextOfDependentHandler != null)
+        {
+            this.creationalContextOfDependentHandler.release();
+        }
+
+        creationalContext.release();
+    }
+    
+    protected H instantiateDelegateInvocationHandler()
+    {
+        Set<Bean<H>> handlerBeans = 
BeanProvider.getBeanDefinitions(this.delegateInvocationHandlerClass, false, 
true);
+        
+        if (handlerBeans.size() != 1)
+        {
+            StringBuilder beanInfo = new StringBuilder();
+            for (Bean<H> bean : handlerBeans)
+            {
+                if (beanInfo.length() != 0)
+                {
+                    beanInfo.append(", ");
+                }
+                beanInfo.append(bean);
+
+                if (bean instanceof PassivationCapable)
+                {
+                    beanInfo.append(" bean-id: 
").append(((PassivationCapable)bean).getId());
+                }
+            }
+
+            throw new IllegalStateException(handlerBeans.size() + " beans 
found for "
+                    + this.delegateInvocationHandlerClass + " found beans: " + 
beanInfo.toString());
+        }
+
+        Bean<H> handlerBean = handlerBeans.iterator().next();
+        
+        BeanManager beanManager = 
BeanManagerProvider.getInstance().getBeanManager();
+        CreationalContext<?> creationalContext = 
beanManager.createCreationalContext(handlerBean);
+        
+        H handlerInstance = (H) beanManager.getReference(handlerBean,
+                this.delegateInvocationHandlerClass, creationalContext);
+        
+        if (handlerBean.getScope().equals(Dependent.class))
+        {
+            this.creationalContextOfDependentHandler = creationalContext;
+        }
+
+        return handlerInstance;
+    }
+}

Reply via email to