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);


Reply via email to