You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/06/07 09:26:25 UTC

svn commit: r1347430 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/util/proxy/ test/java/org/apache/openejb/util/proxy/

Author: rmannibucau
Date: Thu Jun  7 07:26:25 2012
New Revision: 1347430

URL: http://svn.apache.org/viewvc?rev=1347430&view=rev
Log:
TOMEE-222 allow localbean beans to be serialized

Added:
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java?rev=1347430&r1=1347429&r2=1347430&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java Thu Jun  7 07:26:25 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.util.proxy;
 
+import java.io.Serializable;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -61,7 +62,7 @@ public class LocalBeanProxyFactory {
         }
     }
     
-    private static class NonBusinessHandler implements java.lang.reflect.InvocationHandler {
+    private static class NonBusinessHandler implements java.lang.reflect.InvocationHandler, Serializable {
 
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             throw new EJBException("Calling non-public methods of a local bean without any interfaces is not allowed");

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java?rev=1347430&r1=1347429&r2=1347430&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java Thu Jun  7 07:26:25 2012
@@ -36,6 +36,7 @@ import org.apache.xbean.asm.Opcodes;
 import org.apache.xbean.asm.Type;
 
 public class LocalBeanProxyGeneratorImpl implements LocalBeanProxyGenerator, Opcodes {
+    private static final String[] SERIALIZABLE = new String[] { "Ljava/io/Serializable;" };
 
     static final String BUSSINESS_HANDLER_NAME = "businessHandler";    
     static final String NON_BUSINESS_HANDLER_NAME = "nonBusinessHandler";
@@ -129,7 +130,7 @@ public class LocalBeanProxyGeneratorImpl
         String proxyClassName = proxyName.replaceAll("\\.", "/");
 
         // push class signature
-        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, proxyClassName, null, clsToOverride, null);
+        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, proxyClassName, null, clsToOverride, SERIALIZABLE);
 		cw.visitSource(clsToOverride + ".java", null);
 
 		// push InvocationHandler fields

Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java?rev=1347430&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxySerializationTest.java Thu Jun  7 07:26:25 2012
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+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.jee.StatelessBean;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Module;
+import org.apache.openejb.test.util.Asserts;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(ApplicationComposer.class)
+public class LocalBeanProxySerializationTest {
+    @EJB
+    private SampleLocalBean bean;
+
+    @Module
+    public StatelessBean app() {
+        final StatelessBean bean = new StatelessBean(SampleLocalBean.class);
+        bean.setLocalBean(new Empty());
+        return bean;
+    }
+
+	@Test
+	public void testSerialization() throws Exception {
+        assertNotNull(bean);
+
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+	    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));
+	}
+}