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