Author: rmannibucau
Date: Thu Aug 21 19:40:16 2014
New Revision: 1619559
URL: http://svn.apache.org/r1619559
Log:
TOMEE-1325 suporting interfaces for synamic subclassing
Added:
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/LocalButDynamicSingletonTest.java
- copied, changed from r1618689,
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/DynamicSingletonTest.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java?rev=1619559&r1=1619558&r2=1619559&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java
Thu Aug 21 19:40:16 2014
@@ -39,11 +39,15 @@ import java.lang.reflect.Modifier;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
+import static java.util.Arrays.asList;
+
/**
* @version $Rev$ $Date$
*/
@@ -169,31 +173,38 @@ public class DynamicSubclass implements
return classToProxy.getName() + IMPL_SUFFIX;
}
- private static void getNonPrivateMethods(Class<?> clazz, final Map<String,
List<Method>> methodMap) {
- while (clazz != null) {
- for (final Method method : clazz.getDeclaredMethods()) {
- final int modifiers = method.getModifiers();
-
- if (Modifier.isFinal(modifiers)
- || Modifier.isPrivate(modifiers)
- || Modifier.isStatic(modifiers)) {
- continue;
- }
+ private static void getNonPrivateMethods(final Class<?> impl, final
Map<String, List<Method>> methodMap) {
+ final Class<?>[] interfaces = impl.getInterfaces();
+ final Collection<Class<?>> api = new ArrayList<>(interfaces.length +
1);
+ api.add(impl);
+ api.addAll(asList(interfaces));
+
+ for (Class<?> clazz : api) {
+ while (clazz != null && clazz != Object.class) {
+ for (final Method method : clazz.getDeclaredMethods()) {
+ final int modifiers = method.getModifiers();
+
+ if (Modifier.isFinal(modifiers)
+ || Modifier.isPrivate(modifiers)
+ || Modifier.isStatic(modifiers)) {
+ continue;
+ }
- List<Method> methods = methodMap.get(method.getName());
- if (methods == null) {
- methods = new ArrayList<>();
- methods.add(method);
- methodMap.put(method.getName(), methods);
- } else {
- if (!isOverridden(methods, method)) {
- // method is not overridden, so add it
+ List<Method> methods = methodMap.get(method.getName());
+ if (methods == null) {
+ methods = new ArrayList<>();
methods.add(method);
+ methodMap.put(method.getName(), methods);
+ } else {
+ if (!isOverridden(methods, method)) {
+ // method is not overridden, so add it
+ methods.add(method);
+ }
}
}
- }
- clazz = clazz.getSuperclass();
+ clazz = clazz.getSuperclass();
+ }
}
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1619559&r1=1619558&r2=1619559&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
Thu Aug 21 19:40:16 2014
@@ -123,7 +123,7 @@ public final class ApplicationComposers
WebApp.class, EjbJar.class, EnterpriseBean.class,
Persistence.class, PersistenceUnit.class,
Connector.class, Beans.class,
- Class[].class
+ Class[].class, Class.class
};
static {
Copied:
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/LocalButDynamicSingletonTest.java
(from r1618689,
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/DynamicSingletonTest.java)
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/LocalButDynamicSingletonTest.java?p2=tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/LocalButDynamicSingletonTest.java&p1=tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/DynamicSingletonTest.java&r1=1618689&r2=1619559&rev=1619559&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/DynamicSingletonTest.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/dyni/LocalButDynamicSingletonTest.java
Thu Aug 21 19:40:16 2014
@@ -29,41 +29,37 @@ import java.lang.reflect.InvocationHandl
import java.lang.reflect.Method;
-/**
- * @version $Rev$ $Date$
- */
@RunWith(ApplicationComposer.class)
-public class DynamicSingletonTest extends Assert {
-
+public class LocalButDynamicSingletonTest extends Assert {
@EJB
private Colors colors;
@Module
- public Class[] dynamic() {
- return new Class[]{Colors.class};
+ public Class<?> dynamic() {
+ return ColorsBean.class;
}
@Test
public void test() throws Exception {
-
assertNotNull(colors);
assertEquals("red", colors.red());
assertEquals("handle:blue(hello)", colors.blue("hello"));
assertEquals("handle:green()", colors.green());
}
+ public static interface Colors {
+ String green();
+ String blue(String s);
+ String red();
+ }
@Singleton
- public static abstract class Colors implements InvocationHandler {
-
+ public static abstract class ColorsBean implements InvocationHandler,
Colors {
+ @Override
public String red() {
return "red";
}
- public abstract String green();
-
- public abstract String blue(String s);
-
@Override
public Object invoke(final Object proxy, final Method method, final
Object[] args) throws Throwable {
return "handle:" + method.getName() + "(" + Join.join(",", args) +
")";