Author: dblevins
Date: Sat Mar 1 22:12:29 2014
New Revision: 1573233
URL: http://svn.apache.org/r1573233
Log:
OPENEJB-2080: EJB @LocalBean reference serialization issue
Added:
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalReferenceSerializationTest.java
- copied, changed from r1573209,
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java
Removed:
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java
Modified:
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
Modified:
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?rev=1573233&r1=1573232&r2=1573233&view=diff
==============================================================================
---
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
(original)
+++
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
Sat Mar 1 22:12:29 2014
@@ -364,6 +364,9 @@ public abstract class EjbHomeProxyHandle
* If the proxy is serialized outside the core container system,
* we allow the application server to handle it.
*/
+ } else if (!interfaceType.isRemote()) {
+ return proxy;
+
} else {
final ApplicationServer applicationServer =
ServerFederation.getApplicationServer();
return applicationServer.getEJBHome(this.getProxyInfo());
Modified:
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java?rev=1573233&r1=1573232&r2=1573233&view=diff
==============================================================================
---
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
(original)
+++
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
Sat Mar 1 22:12:29 2014
@@ -210,6 +210,10 @@ public abstract class EjbObjectProxyHand
* If the proxy is serialized outside the core container system,
* we allow the application server to handle it.
*/
+ } else if (!interfaceType.isRemote()) {
+
+ return proxy;
+
} else {
final ApplicationServer applicationServer =
ServerFederation.getApplicationServer();
if (interfaceType.isBusiness()) {
Copied:
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalReferenceSerializationTest.java
(from r1573209,
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java)
URL:
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalReferenceSerializationTest.java?p2=tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalReferenceSerializationTest.java&p1=tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java&r1=1573209&r2=1573233&rev=1573233&view=diff
==============================================================================
---
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java
(original)
+++
tomee/tomee/branches/tomee-1.5.x/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalReferenceSerializationTest.java
Sat Mar 1 22:12:29 2014
@@ -17,44 +17,161 @@
package org.apache.openejb.util.proxy;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import javax.ejb.EJB;
-import org.apache.openejb.jee.Empty;
+import org.apache.openejb.ProxyInfo;
+import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatelessBean;
import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.spi.ApplicationServer;
import org.apache.openejb.testing.Module;
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.ejb.CreateException;
+import javax.ejb.EJB;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBMetaData;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.HomeHandle;
+import javax.ejb.Local;
+import javax.ejb.LocalBean;
+import javax.ejb.LocalHome;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(ApplicationComposer.class)
-public class LocalBeanProxySerializationTest {
+public class LocalReferenceSerializationTest {
+
+
+ @EJB
+ private RedLocal red;
+
@EJB
- private SampleLocalBean bean;
+ private OrangeLocalBean orange;
+
+ @EJB
+ private GreenLocalHome greenHome;
@Module
- public StatelessBean app() {
- final StatelessBean bean = new StatelessBean(SampleLocalBean.class);
- bean.setLocalBean(new Empty());
- return bean;
+ public EjbJar app() {
+ final EjbJar ejbJar = new EjbJar();
+
+ ejbJar.addEnterpriseBean(new StatelessBean(OrangeLocalBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(RedBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(GreenBean.class));
+
+ return ejbJar;
+ }
+
+ @Test
+ public void testLocalBean() throws Exception {
+ assertEquals(5, copy(orange).add(2, 3));
+ }
+
+ @Test
+ public void testLocal() throws Exception {
+ assertEquals(5, copy(red).add(2, 3));
+ }
+
+ @Test
+ public void testLocalObject() throws Exception {
+ assertEquals(5, greenHome.create().add(2, 3));
+
+
+ final GreenLocal greenLocal = copy(greenHome).create();
+
+ assertEquals(5, copy(greenLocal).add(2, 3));
}
- @Test
- public void testSerialization() throws Exception {
+ private static <T> T copy(T bean) throws IOException,
ClassNotFoundException {
assertNotNull(bean);
+ ServerFederation.setApplicationServer(new TestApplicationServer());
+
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final ObjectOutputStream oos = new ObjectOutputStream(baos);
+ final ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(bean);
final ByteArrayInputStream bis = new
ByteArrayInputStream(baos.toByteArray());
final ObjectInputStream ois = new ObjectInputStream(bis);
- final SampleLocalBean deserialized = (SampleLocalBean)
ois.readObject();
- assertEquals(5, deserialized.add(2, 3));
- }
+ return (T) ois.readObject();
+ }
+
+ @LocalBean
+ public static class OrangeLocalBean {
+
+ public int add(int a, int b) {
+ return a + b;
+ }
+ }
+
+ @Local
+ public static class RedBean implements RedLocal {
+
+ public int add(int a, int b) {
+ return a + b;
+ }
+ }
+
+ public static interface RedLocal {
+ public int add(int a, int b);
+ }
+
+ @LocalHome(GreenLocalHome.class)
+ public static class GreenBean {
+
+ public int add(int a, int b) {
+ return a + b;
+ }
+ }
+
+ public static interface GreenLocal extends EJBLocalObject {
+ public int add(int a, int b);
+ }
+
+ public static interface GreenLocalHome extends EJBLocalHome {
+ public GreenLocal create() throws CreateException;
+ }
+
+
+ private static class TestApplicationServer implements ApplicationServer {
+ @Override
+ public EJBMetaData getEJBMetaData(ProxyInfo proxyInfo) {
+ throw new AssertionError("Should never be called");
+ }
+
+ @Override
+ public Handle getHandle(ProxyInfo proxyInfo) {
+ throw new AssertionError("Should never be called");
+ }
+
+ @Override
+ public HomeHandle getHomeHandle(ProxyInfo proxyInfo) {
+ throw new AssertionError("Should never be called");
+ }
+
+ @Override
+ public EJBObject getEJBObject(ProxyInfo proxyInfo) {
+ throw new AssertionError("Should never be called");
+ }
+
+ @Override
+ public Object getBusinessObject(ProxyInfo proxyInfo) {
+ throw new AssertionError("Should never be called");
+ }
+
+ @Override
+ public EJBHome getEJBHome(ProxyInfo proxyInfo) {
+ throw new AssertionError("Should never be called");
+ }
+ }
}