Author: nickarls
Date: 2008-11-12 09:21:14 -0500 (Wed, 12 Nov 2008)
New Revision: 293
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ClientProxy.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyMethodHandler.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyPool.java
Removed:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java
Log:
Minor. Moved proxy stuff to own package.
Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ClientProxy.java
(from rev 292,
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ClientProxy.java
(rev 0)
+++
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ClientProxy.java 2008-11-12
14:21:14 UTC (rev 293)
@@ -0,0 +1,40 @@
+package org.jboss.webbeans.bean.proxy;
+
+import org.jboss.webbeans.util.Reflections;
+
+
+
+public class ClientProxy
+{
+
+ public static boolean isProxyable(Class<?> rawType)
+ {
+ // TODO Add logging
+
+ if (Reflections.getConstructor(rawType) == null)
+ {
+ return false;
+ }
+ else if (Reflections.isTypeOrAnyMethodFinal(rawType))
+ {
+ return false;
+ }
+ else if (Reflections.isPrimitive(rawType))
+ {
+ return false;
+ }
+ else if (Reflections.isArrayType(rawType))
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+ public static boolean isProxy(Object instance) {
+ return instance.getClass().getName().indexOf("_$$_javassist_") > 0;
+ }
+
+}
Copied:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyMethodHandler.java
(from rev 292,
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java)
===================================================================
---
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyMethodHandler.java
(rev 0)
+++
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyMethodHandler.java 2008-11-12
14:21:14 UTC (rev 293)
@@ -0,0 +1,44 @@
+package org.jboss.webbeans.bean.proxy;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import javassist.util.proxy.MethodHandler;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Context;
+
+import org.jboss.webbeans.ManagerImpl;
+import org.jboss.webbeans.util.Reflections;
+
+public class ProxyMethodHandler implements MethodHandler, Serializable
+{
+ private static final long serialVersionUID = -5391564935097267888L;
+
+ private transient Bean<?> bean;
+ private int beanIndex;
+ private static ManagerImpl manager;
+
+ public ProxyMethodHandler(Bean<?> bean, int beanIndex, ManagerImpl manager)
+ {
+ this.bean = bean;
+ this.beanIndex = beanIndex;
+ ProxyMethodHandler.manager = manager;
+ }
+
+ public Object invoke(Object self, Method method, Method proceed,
+ Object[] args) throws Throwable
+ {
+ if (bean == null)
+ {
+ bean = manager.getBeans().get(beanIndex);
+ }
+ Context context = manager.getContext(bean.getScopeType());
+ Object proxiedInstance = context.get(bean, true);
+ Method proxiedMethod = Reflections.lookupMethod(method, proxiedInstance);
+ return proxiedMethod.invoke(proxiedInstance, args);
+ }
+
+
+
+}
Property changes on:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyMethodHandler.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyPool.java
(from rev 292, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyPool.java
(rev 0)
+++
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/proxy/ProxyPool.java 2008-11-12
14:21:14 UTC (rev 293)
@@ -0,0 +1,112 @@
+package org.jboss.webbeans.bean.proxy;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.ManagerImpl;
+
+import com.google.common.collect.ForwardingMap;
+
+public class ProxyPool
+{
+ private class Pool extends ForwardingMap<Bean<?>, Object>
+ {
+
+ Map<Bean<?>, Object> delegate;
+
+ public Pool()
+ {
+ delegate = new ConcurrentHashMap<Bean<?>, Object>();
+ }
+
+ public <T> T get(Bean<T> key)
+ {
+ return (T) super.get(key);
+ }
+
+ @Override
+ protected Map<Bean<?>, Object> delegate()
+ {
+ return delegate;
+ }
+
+ }
+
+ private ManagerImpl manager;
+ private Pool pool;
+
+ public ProxyPool(ManagerImpl manager) {
+ this.manager = manager;
+ this.pool = new Pool();
+ }
+
+ private class TypeInfo {
+ Class<?>[] interfaces;
+ Class<?> superclass;
+ }
+
+ private TypeInfo getTypeInfo(Set<Class<?>> types) {
+ TypeInfo typeInfo = new TypeInfo();
+ List<Class<?>> interfaces = new ArrayList<Class<?>>();
+ Class<?> superclass = null;
+ for (Class<?> type : types) {
+ if (type.isInterface()) {
+ interfaces.add(type);
+ } else if (superclass == null || (type != Object.class &&
superclass.isAssignableFrom(type))) {
+ superclass = type;
+ }
+ }
+ interfaces.add(Serializable.class);
+ typeInfo.interfaces = interfaces.toArray(new Class<?>[0]);
+ typeInfo.superclass = superclass;
+ return typeInfo;
+ }
+
+ private <T> T createClientProxy(Bean<T> bean, int beanIndex) throws
InstantiationException, IllegalAccessException {
+ ProxyFactory proxyFactory = new ProxyFactory();
+ TypeInfo typeInfo = getTypeInfo(bean.getTypes());
+ proxyFactory.setInterfaces(typeInfo.interfaces);
+ proxyFactory.setSuperclass(typeInfo.superclass);
+ T clientProxy = (T) proxyFactory.createClass().newInstance();
+ ProxyMethodHandler proxyMethodHandler = new ProxyMethodHandler(bean, beanIndex,
manager);
+ ((ProxyObject)clientProxy).setHandler(proxyMethodHandler);
+ return clientProxy;
+ }
+
+ public Object getClientProxy(Bean<?> bean)
+ {
+ Object clientProxy = pool.get(bean);
+ if (clientProxy == null)
+ {
+ try
+ {
+ int beanIndex = manager.getBeans().indexOf(bean);
+ // Implicit add required since it is looked up on activation with then index
+ if (beanIndex < 0) {
+ manager.addBean(bean);
+ beanIndex = manager.getBeans().size() - 1;
+ }
+ clientProxy = createClientProxy(bean, beanIndex);
+ }
+ catch (Exception e)
+ {
+ // TODO: What to *really* do here?
+ throw new UnproxyableDependencyException("Could not create client proxy
for " + bean.getName(), e);
+ }
+ pool.put(bean, clientProxy);
+ }
+ return clientProxy;
+ }
+
+
+}
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java 2008-11-12
10:25:43 UTC (rev 292)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxy.java 2008-11-12
14:21:14 UTC (rev 293)
@@ -1,38 +0,0 @@
-package org.jboss.webbeans.util;
-
-
-
-public class ClientProxy
-{
-
- public static boolean isProxyable(Class<?> rawType)
- {
- // TODO Add logging
-
- if (Reflections.getConstructor(rawType) == null)
- {
- return false;
- }
- else if (Reflections.isTypeOrAnyMethodFinal(rawType))
- {
- return false;
- }
- else if (Reflections.isPrimitive(rawType))
- {
- return false;
- }
- else if (Reflections.isArrayType(rawType))
- {
- return false;
- }
- else
- {
- return true;
- }
- }
-
- public static boolean isProxy(Object instance) {
- return instance.getClass().getName().indexOf("_$$_javassist_") > 0;
- }
-
-}
Deleted:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
===================================================================
---
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-12
10:25:43 UTC (rev 292)
+++
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-12
14:21:14 UTC (rev 293)
@@ -1,43 +0,0 @@
-package org.jboss.webbeans.util;
-
-import java.io.Serializable;
-import java.lang.reflect.Method;
-
-import javassist.util.proxy.MethodHandler;
-
-import javax.webbeans.manager.Bean;
-import javax.webbeans.manager.Context;
-
-import org.jboss.webbeans.ManagerImpl;
-
-public class ProxyMethodHandler implements MethodHandler, Serializable
-{
- private static final long serialVersionUID = -5391564935097267888L;
-
- private transient Bean<?> bean;
- private int beanIndex;
- private static ManagerImpl manager;
-
- public ProxyMethodHandler(Bean<?> bean, int beanIndex, ManagerImpl manager)
- {
- this.bean = bean;
- this.beanIndex = beanIndex;
- ProxyMethodHandler.manager = manager;
- }
-
- public Object invoke(Object self, Method method, Method proceed,
- Object[] args) throws Throwable
- {
- if (bean == null)
- {
- bean = manager.getBeans().get(beanIndex);
- }
- Context context = manager.getContext(bean.getScopeType());
- Object proxiedInstance = context.get(bean, true);
- Method proxiedMethod = Reflections.lookupMethod(method, proxiedInstance);
- return proxiedMethod.invoke(proxiedInstance, args);
- }
-
-
-
-}
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java 2008-11-12
10:25:43 UTC (rev 292)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java 2008-11-12
14:21:14 UTC (rev 293)
@@ -1,112 +0,0 @@
-package org.jboss.webbeans.util;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javassist.util.proxy.ProxyFactory;
-import javassist.util.proxy.ProxyObject;
-
-import javax.webbeans.UnproxyableDependencyException;
-import javax.webbeans.manager.Bean;
-
-import org.jboss.webbeans.ManagerImpl;
-
-import com.google.common.collect.ForwardingMap;
-
-public class ProxyPool
-{
- private class Pool extends ForwardingMap<Bean<?>, Object>
- {
-
- Map<Bean<?>, Object> delegate;
-
- public Pool()
- {
- delegate = new ConcurrentHashMap<Bean<?>, Object>();
- }
-
- public <T> T get(Bean<T> key)
- {
- return (T) super.get(key);
- }
-
- @Override
- protected Map<Bean<?>, Object> delegate()
- {
- return delegate;
- }
-
- }
-
- private ManagerImpl manager;
- private Pool pool;
-
- public ProxyPool(ManagerImpl manager) {
- this.manager = manager;
- this.pool = new Pool();
- }
-
- private class TypeInfo {
- Class<?>[] interfaces;
- Class<?> superclass;
- }
-
- private TypeInfo getTypeInfo(Set<Class<?>> types) {
- TypeInfo typeInfo = new TypeInfo();
- List<Class<?>> interfaces = new ArrayList<Class<?>>();
- Class<?> superclass = null;
- for (Class<?> type : types) {
- if (type.isInterface()) {
- interfaces.add(type);
- } else if (superclass == null || (type != Object.class &&
superclass.isAssignableFrom(type))) {
- superclass = type;
- }
- }
- interfaces.add(Serializable.class);
- typeInfo.interfaces = interfaces.toArray(new Class<?>[0]);
- typeInfo.superclass = superclass;
- return typeInfo;
- }
-
- private <T> T createClientProxy(Bean<T> bean, int beanIndex) throws
InstantiationException, IllegalAccessException {
- ProxyFactory proxyFactory = new ProxyFactory();
- TypeInfo typeInfo = getTypeInfo(bean.getTypes());
- proxyFactory.setInterfaces(typeInfo.interfaces);
- proxyFactory.setSuperclass(typeInfo.superclass);
- T clientProxy = (T) proxyFactory.createClass().newInstance();
- ProxyMethodHandler proxyMethodHandler = new ProxyMethodHandler(bean, beanIndex,
manager);
- ((ProxyObject)clientProxy).setHandler(proxyMethodHandler);
- return clientProxy;
- }
-
- public Object getClientProxy(Bean<?> bean)
- {
- Object clientProxy = pool.get(bean);
- if (clientProxy == null)
- {
- try
- {
- int beanIndex = manager.getBeans().indexOf(bean);
- // Implicit add required since it is looked up on activation with then index
- if (beanIndex < 0) {
- manager.addBean(bean);
- beanIndex = manager.getBeans().size() - 1;
- }
- clientProxy = createClientProxy(bean, beanIndex);
- }
- catch (Exception e)
- {
- // TODO: What to *really* do here?
- throw new UnproxyableDependencyException("Could not create client proxy
for " + bean.getName(), e);
- }
- pool.put(bean, clientProxy);
- }
- return clientProxy;
- }
-
-
-}