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