You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/09/22 04:25:19 UTC

svn commit: r578356 - /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java

Author: dblevins
Date: Fri Sep 21 19:25:18 2007
New Revision: 578356

URL: http://svn.apache.org/viewvc?rev=578356&view=rev
Log:
Added explicit message to when something a remote interfaces passes/returns/throws is not serializable.  

Message explicitly says that remote interfaces are only allowed to pass serializable objects per EJB specification and shows how to disable that behavior.  The hope is to avoid anyone thinking that this some sort of failure on OpenEJB's part.

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?rev=578356&r1=578355&r2=578356&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java Fri Sep 21 19:25:18 2007
@@ -23,6 +23,7 @@
 import java.io.ObjectOutputStream;
 import java.io.ObjectStreamException;
 import java.io.Serializable;
+import java.io.NotSerializableException;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
@@ -59,6 +60,7 @@
 import org.apache.openejb.util.proxy.ProxyManager;
 
 public abstract class BaseEjbProxyHandler implements InvocationHandler, Serializable {
+    private static final String OPENEJB_LOCALCOPY = "openejb.localcopy";
 
     private static class ProxyRegistry {
 
@@ -184,7 +186,7 @@
 
     private static boolean parseRemoteCopySetting() {
         Properties properties = SystemInstance.get().getProperties();
-        String value = properties.getProperty("openejb.localcopy");
+        String value = properties.getProperty(OPENEJB_LOCALCOPY);
         if (value == null) {
             value = properties.getProperty(org.apache.openejb.core.EnvProps.INTRA_VM_COPY);
         }
@@ -498,10 +500,15 @@
         }
 
 
-        ByteArrayOutputStream baos = new ByteArrayOutputStream(128);
-        ObjectOutputStream out = new ObjectOutputStream(baos);
-        out.writeObject(object);
-        out.close();
+        ByteArrayOutputStream baos = null;
+        try {
+            baos = new ByteArrayOutputStream(128);
+            ObjectOutputStream out = new ObjectOutputStream(baos);
+            out.writeObject(object);
+            out.close();
+        } catch (NotSerializableException e) {
+            throw (IOException) new NotSerializableException(e.getMessage()+" : The EJB specification restricts remote interfaces to only serializable data types.  This can be disabled for in-vm use with the "+OPENEJB_LOCALCOPY+"=false system property.").initCause(e);
+        }
 
         ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
         ObjectInputStream in = new EjbObjectInputStream(bais);