You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2011/01/05 16:02:49 UTC
svn commit: r1055479 - in /openwebbeans/trunk:
webbeans-impl/src/main/java/org/apache/webbeans/config/
webbeans-impl/src/main/java/org/apache/webbeans/proxy/
webbeans-openejb/src/main/java/org/apache/webbeans/ejb/resource/
webbeans-resource/src/main/ja...
Author: gerdogdu
Date: Wed Jan 5 15:02:47 2011
New Revision: 1055479
URL: http://svn.apache.org/viewvc?rev=1055479&view=rev
Log:
[OWB-511] Delegate actualInstance serialization behavior in ResourceProxyHandler
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ResourceProxyHandler.java
openwebbeans/trunk/webbeans-openejb/src/main/java/org/apache/webbeans/ejb/resource/OpenEjbResourceInjectionService.java
openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java
openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java
openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ResourceInjectionService.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java?rev=1055479&r1=1055478&r2=1055479&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java Wed Jan 5 15:02:47 2011
@@ -21,6 +21,7 @@ package org.apache.webbeans.config;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.webbeans.container.BeanManagerImpl;
@@ -40,6 +41,7 @@ import org.apache.webbeans.plugins.Plugi
import org.apache.webbeans.portable.AnnotatedElementFactory;
import org.apache.webbeans.portable.events.ExtensionLoader;
import org.apache.webbeans.proxy.JavassistProxyFactory;
+import org.apache.webbeans.spi.plugins.OpenWebBeansPlugin;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.xml.WebBeansNameSpaceContainer;
import org.apache.webbeans.xml.XMLAnnotationTypeManager;
@@ -74,6 +76,8 @@ public class WebBeansContext
private final Map<String, Object> managerMap = new HashMap<String, Object>();
+ private final Map<Class<?>, Object> serviceMap = new HashMap<Class<?>, Object>();
+
public WebBeansContext()
{
// Allow the WebBeansContext itself to be looked up
@@ -110,6 +114,50 @@ public class WebBeansContext
return webBeansContext;
}
+ public <T> T getService(Class<T> clazz)
+ {
+ T t = (T) serviceMap.get(clazz);
+ if (t == null)
+ {
+ t = doServiceLoader(clazz);
+ registerService(clazz, t);
+ }
+ return t;
+ }
+
+ public <T> void registerService(Class<T> clazz, T t)
+ {
+ serviceMap.put(clazz, t);
+ }
+
+ private <T> T doServiceLoader(Class<T> serviceInterface)
+ {
+ String implName = getOpenWebBeansConfiguration().getProperty(serviceInterface.getName());
+
+ if (implName == null)
+ {
+ //Look for plugins
+ List<OpenWebBeansPlugin> plugins = getPluginLoader().getPlugins();
+ if(plugins != null && plugins.size() > 0)
+ {
+ for(OpenWebBeansPlugin plugin : plugins)
+ {
+ if(plugin.supportService(serviceInterface))
+ {
+ return plugin.getSupportedService(serviceInterface);
+ }
+ }
+ }
+
+// if (logger.wblWillLogWarn())
+// {
+// logger.warn(OWBLogConst.WARN_0009, serviceInterface.getName());
+// }
+ return null;
+ }
+ return (T) WebBeansFinder.getSingletonInstance(implName);
+ }
+
public ConversationManager getConversationManager()
{
return conversationManager;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ResourceProxyHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ResourceProxyHandler.java?rev=1055479&r1=1055478&r2=1055479&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ResourceProxyHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/ResourceProxyHandler.java Wed Jan 5 15:02:47 2011
@@ -29,25 +29,18 @@ import java.lang.reflect.Method;
import javassist.util.proxy.MethodHandler;
import org.apache.webbeans.component.ResourceBean;
import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.corespi.ServiceLoader;
-import org.apache.webbeans.spi.FailOverService;
+import org.apache.webbeans.spi.ResourceInjectionService;
public class ResourceProxyHandler implements MethodHandler, Serializable, Externalizable
{
/**
*
*/
- private static final long serialVersionUID = 4171212030439910547L;
-
- /**
- * When ResourceProxyHandler deserialized, this will instruct owb to create a new actual instance, if
- * the actual resource is not serializable.
- */
- private static final String DUMMY_STRING = "owb.actual.resource.dummy";
-
- private Object actualResource = null;
+ private static final long serialVersionUID = 2608686651845218158L;
+
+ private transient Object actualResource;
- private transient ResourceBean bean = null;
+ private transient ResourceBean bean;
//DO NOT REMOVE, used by failover and passivation.
public ResourceProxyHandler()
@@ -84,29 +77,9 @@ public class ResourceProxyHandler implem
{
// write bean id first
out.writeObject(bean.getId());
-
- // try fail over service to serialize the resource object
- FailOverService failoverService = ServiceLoader.getService(FailOverService.class);
- if (failoverService != null)
- {
- Object ret = failoverService.handleResource(bean, actualResource, null, out);
- if (ret != FailOverService.NOT_HANDLED)
- {
- return;
- }
- }
-
- // default behavior
- if (actualResource instanceof Serializable)
- {
- // for remote ejb stub and other serializable resources
- out.writeObject(actualResource);
- }
- else
- {
- // otherwise, write a dummy string.
- out.writeObject(DUMMY_STRING);
- }
+ WebBeansContext webBeansContext = WebBeansContext.getInstance();
+ ResourceInjectionService resourceInjectionService = webBeansContext.getService(ResourceInjectionService.class);
+ resourceInjectionService.writeExternal(bean, actualResource, out);
}
/**
@@ -121,30 +94,9 @@ public class ResourceProxyHandler implem
ClassNotFoundException
{
String id = (String)in.readObject();
- bean = (ResourceBean) WebBeansContext.getInstance().getBeanManagerImpl().getPassivationCapableBean(id);
-
- // try fail over service to serialize the resource object
- FailOverService failoverService = ServiceLoader.getService(FailOverService.class);
- if (failoverService != null)
- {
- actualResource = failoverService.handleResource(bean, actualResource, in, null);
- if (actualResource != FailOverService.NOT_HANDLED)
- {
- return;
- }
- }
-
- // default behavior
- actualResource = in.readObject();
- if (actualResource instanceof javax.rmi.CORBA.Stub)
- {
- // for remote ejb stub, reconnect after deserialization.
- org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(new String[0], null);
- ((javax.rmi.CORBA.Stub)actualResource).connect(orb);
- }
- else if (actualResource.equals(DUMMY_STRING))
- {
- actualResource = bean.getActualInstance();
- }
- }
+ WebBeansContext webBeansContext = WebBeansContext.getInstance();
+ bean = (ResourceBean) webBeansContext.getBeanManagerImpl().getPassivationCapableBean(id);
+ ResourceInjectionService resourceInjectionService = webBeansContext.getService(ResourceInjectionService.class);
+ actualResource = resourceInjectionService.readExternal(bean, in);
+ }
}
Modified: openwebbeans/trunk/webbeans-openejb/src/main/java/org/apache/webbeans/ejb/resource/OpenEjbResourceInjectionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-openejb/src/main/java/org/apache/webbeans/ejb/resource/OpenEjbResourceInjectionService.java?rev=1055479&r1=1055478&r2=1055479&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-openejb/src/main/java/org/apache/webbeans/ejb/resource/OpenEjbResourceInjectionService.java (original)
+++ openwebbeans/trunk/webbeans-openejb/src/main/java/org/apache/webbeans/ejb/resource/OpenEjbResourceInjectionService.java Wed Jan 5 15:02:47 2011
@@ -18,17 +18,25 @@
*/
package org.apache.webbeans.ejb.resource;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.text.MessageFormat;
import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.Bean;
+import org.apache.webbeans.component.ResourceBean;
import org.apache.webbeans.config.OWBLogConst;
+import org.apache.webbeans.corespi.ServiceLoader;
import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.logger.WebBeansLogger;
+import org.apache.webbeans.spi.FailOverService;
import org.apache.webbeans.spi.ResourceInjectionService;
import org.apache.webbeans.spi.api.ResourceReference;
import org.apache.webbeans.util.AnnotationUtil;
@@ -36,6 +44,12 @@ import org.apache.webbeans.util.Security
public class OpenEjbResourceInjectionService implements ResourceInjectionService
{
+ /**
+ * When ResourceProxyHandler deserialized, this will instruct owb to create a new actual instance, if
+ * the actual resource is not serializable.
+ */
+ private static final String DUMMY_STRING = "owb.actual.resource.dummy";
+
private static final WebBeansLogger logger = WebBeansLogger.getLogger(OpenEjbResourceInjectionService.class);
@Override
@@ -98,4 +112,66 @@ public class OpenEjbResourceInjectionSer
}
}
+ /**
+ * delegation of serialization behavior
+ */
+ public <T> void writeExternal(Bean<T> bean, T actualResource, ObjectOutput out) throws IOException
+ {
+ // try fail over service to serialize the resource object
+ FailOverService failoverService = ServiceLoader.getService(FailOverService.class);
+ if (failoverService != null)
+ {
+ Object ret = failoverService.handleResource(bean, actualResource, null, out);
+ if (ret != FailOverService.NOT_HANDLED)
+ {
+ return;
+ }
+ }
+
+ // default behavior
+ if (actualResource instanceof Serializable)
+ {
+ // for remote ejb stub and other serializable resources
+ out.writeObject(actualResource);
+ }
+ else
+ {
+ // otherwise, write a dummy string.
+ out.writeObject(DUMMY_STRING);
+ }
+
+ }
+
+ /**
+ * delegation of serialization behavior
+ */
+ public <T> T readExternal(Bean<T> bean, ObjectInput in) throws IOException,
+ ClassNotFoundException
+ {
+ T actualResource = null;
+ // try fail over service to serialize the resource object
+ FailOverService failoverService = ServiceLoader.getService(FailOverService.class);
+ if (failoverService != null)
+ {
+ actualResource = (T) failoverService.handleResource(bean, actualResource, in, null);
+ if (actualResource != FailOverService.NOT_HANDLED)
+ {
+ return actualResource;
+ }
+ }
+
+ // default behavior
+ actualResource = (T) in.readObject();
+ if (actualResource instanceof javax.rmi.CORBA.Stub)
+ {
+ // for remote ejb stub, reconnect after deserialization.
+ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(new String[0], null);
+ ((javax.rmi.CORBA.Stub)actualResource).connect(orb);
+ }
+ else if (actualResource.equals(DUMMY_STRING))
+ {
+ actualResource = (T) ((ResourceBean)bean).getActualInstance();
+ }
+ return actualResource;
+ }
}
Modified: openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java?rev=1055479&r1=1055478&r2=1055479&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java (original)
+++ openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceInjectionService.java Wed Jan 5 15:02:47 2011
@@ -18,6 +18,10 @@
*/
package org.apache.webbeans.resource.spi.se;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@@ -25,13 +29,17 @@ import java.text.MessageFormat;
import javax.annotation.Resource;
import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.Bean;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.xml.ws.WebServiceRef;
+import org.apache.webbeans.component.ResourceBean;
import org.apache.webbeans.config.OWBLogConst;
+import org.apache.webbeans.corespi.ServiceLoader;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.logger.WebBeansLogger;
+import org.apache.webbeans.spi.FailOverService;
import org.apache.webbeans.spi.ResourceInjectionService;
import org.apache.webbeans.spi.api.ResourceReference;
import org.apache.webbeans.util.AnnotationUtil;
@@ -39,6 +47,12 @@ import org.apache.webbeans.util.Security
public class StandaloneResourceInjectionService implements ResourceInjectionService
{
+ /**
+ * When ResourceProxyHandler deserialized, this will instruct owb to create a new actual instance, if
+ * the actual resource is not serializable.
+ */
+ private static final String DUMMY_STRING = "owb.actual.resource.dummy";
+
private final StandaloneResourceProcessor processor = StandaloneResourceProcessor.getProcessor();
private static final WebBeansLogger logger = WebBeansLogger.getLogger(StandaloneResourceInjectionService.class);
@@ -126,5 +140,68 @@ public class StandaloneResourceInjection
processor.clear();
}
+ /**
+ * delegation of serialization behavior
+ */
+ public <T> void writeExternal(Bean<T> bean, T actualResource, ObjectOutput out) throws IOException
+ {
+ // try fail over service to serialize the resource object
+ FailOverService failoverService = ServiceLoader.getService(FailOverService.class);
+ if (failoverService != null)
+ {
+ Object ret = failoverService.handleResource(bean, actualResource, null, out);
+ if (ret != FailOverService.NOT_HANDLED)
+ {
+ return;
+ }
+ }
+
+ // default behavior
+ if (actualResource instanceof Serializable)
+ {
+ // for remote ejb stub and other serializable resources
+ out.writeObject(actualResource);
+ }
+ else
+ {
+ // otherwise, write a dummy string.
+ out.writeObject(DUMMY_STRING);
+ }
+
+ }
+
+ /**
+ * delegation of serialization behavior
+ */
+ public <T> T readExternal(Bean<T> bean, ObjectInput in) throws IOException,
+ ClassNotFoundException
+ {
+ T actualResource = null;
+ // try fail over service to serialize the resource object
+ FailOverService failoverService = ServiceLoader.getService(FailOverService.class);
+ if (failoverService != null)
+ {
+ actualResource = (T) failoverService.handleResource(bean, actualResource, in, null);
+ if (actualResource != FailOverService.NOT_HANDLED)
+ {
+ return actualResource;
+ }
+ }
+
+ // default behavior
+ actualResource = (T) in.readObject();
+ if (actualResource instanceof javax.rmi.CORBA.Stub)
+ {
+ // for remote ejb stub, reconnect after deserialization.
+ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(new String[0], null);
+ ((javax.rmi.CORBA.Stub)actualResource).connect(orb);
+ }
+ else if (actualResource.equals(DUMMY_STRING))
+ {
+ actualResource = (T) ((ResourceBean)bean).getActualInstance();
+ }
+ return actualResource;
+ }
+
}
Modified: openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java?rev=1055479&r1=1055478&r2=1055479&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java (original)
+++ openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java Wed Jan 5 15:02:47 2011
@@ -30,7 +30,6 @@ import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.xml.ws.WebServiceRef;
-
import org.apache.webbeans.config.OWBLogConst;
import org.apache.webbeans.logger.WebBeansLogger;
Modified: openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ResourceInjectionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ResourceInjectionService.java?rev=1055479&r1=1055478&r2=1055479&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ResourceInjectionService.java (original)
+++ openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ResourceInjectionService.java Wed Jan 5 15:02:47 2011
@@ -18,9 +18,13 @@
*/
package org.apache.webbeans.spi;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
import java.lang.annotation.Annotation;
+import javax.enterprise.inject.spi.Bean;
import org.apache.webbeans.spi.api.ResourceReference;
/**
@@ -76,5 +80,16 @@ public interface ResourceInjectionServic
* </p>
*/
public void clear();
+
+ /**
+ * delegation of serialization behavior
+ */
+ public <T> void writeExternal(Bean<T> bean, T actualResource, ObjectOutput out) throws IOException;
+
+ /**
+ * delegation of serialization behavior
+ */
+ public <T> T readExternal(Bean<T> bean, ObjectInput out) throws IOException,
+ ClassNotFoundException;
}