You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2010/02/04 16:01:46 UTC
svn commit: r906512 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/component/
main/java/org/apache/webbeans/container/
test/java/org/apache/webbeans/newtests/contexts/
Author: struberg
Date: Thu Feb 4 15:01:45 2010
New Revision: 906512
URL: http://svn.apache.org/viewvc?rev=906512&view=rev
Log:
OWB-6 create a wrapper which makes all Bean<T> serializable + test
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/SerializableBean.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BaseBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BaseBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BaseBean.java?rev=906512&r1=906511&r2=906512&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BaseBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BaseBean.java Thu Feb 4 15:01:45 2010
@@ -32,7 +32,7 @@
* @version $Rev$Â $Date$
* <T> bean class
*/
-public abstract class BaseBean<T> implements Bean<T>, PassivationCapable, Serializable
+public abstract class BaseBean<T> implements Bean<T>, PassivationCapable
{
/**Bean Manager*/
private final BeanManager manager;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java?rev=906512&r1=906511&r2=906512&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java Thu Feb 4 15:01:45 2010
@@ -13,6 +13,8 @@
*/
package org.apache.webbeans.component;
+import java.io.IOException;
+import java.io.Serializable;
import java.lang.reflect.Constructor;
import javax.enterprise.context.spi.CreationalContext;
@@ -82,5 +84,6 @@
public void setConstructor(Constructor<T> constructor)
{
this.constructor = constructor;
- }
+ }
+
}
\ No newline at end of file
Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/SerializableBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/SerializableBean.java?rev=906512&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/SerializableBean.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/SerializableBean.java Thu Feb 4 15:01:45 2010
@@ -0,0 +1,162 @@
+package org.apache.webbeans.container;
+/*
+* 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.
+*/
+
+import org.apache.webbeans.exception.inject.DeploymentException;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.PassivationCapable;
+import java.io.*;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
+
+/**
+ * Wrapper to make all our Beans serializable.
+ * This is basically a delegate to an underlying Bean<T>.
+ *
+ * We use the {@link PassivationCapable#getId()} and
+ * {@link javax.enterprise.inject.spi.BeanManager#getPassivationCapableBean(String)}
+ * for serialisation and deserialisation.
+ *
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public final class SerializableBean<T> implements Bean<T>, PassivationCapable, Serializable {
+
+ /** the delegated bean */
+ private Bean<T> bean;
+
+ /**
+ * @return the deletaged internal Bean.
+ */
+ public Bean<T> getBean()
+ {
+ return bean;
+ }
+
+ public SerializableBean(Bean<T> bean)
+ {
+ this.bean = bean;
+ }
+
+ @Override
+ public Set<Type> getTypes()
+ {
+ return bean.getTypes();
+ }
+
+ @Override
+ public Set<Annotation> getQualifiers()
+ {
+ return bean.getQualifiers();
+ }
+
+ @Override
+ public Class<? extends Annotation> getScope()
+ {
+ return bean.getScope();
+ }
+
+ @Override
+ public String getName()
+ {
+ return bean.getName();
+ }
+
+ @Override
+ public boolean isNullable()
+ {
+ return bean.isNullable();
+ }
+
+ @Override
+ public Set<InjectionPoint> getInjectionPoints()
+ {
+ return bean.getInjectionPoints();
+ }
+
+ @Override
+ public Class<?> getBeanClass()
+ {
+ return bean.getBeanClass();
+ }
+
+ @Override
+ public Set<Class<? extends Annotation>> getStereotypes()
+ {
+ return bean.getStereotypes();
+ }
+
+ @Override
+ public boolean isAlternative()
+ {
+ return bean.isAlternative();
+ }
+
+ @Override
+ public T create(CreationalContext<T> tCreationalContext)
+ {
+ return bean.create(tCreationalContext);
+ }
+
+ @Override
+ public void destroy(T instance, CreationalContext<T> tCreationalContext)
+ {
+ bean.destroy(instance, tCreationalContext);
+ }
+
+ @Override
+ public String getId()
+ {
+ if (bean instanceof PassivationCapable)
+ {
+ return ((PassivationCapable)bean).getId();
+ }
+ return null;
+ }
+
+ private synchronized void writeObject(ObjectOutputStream s)
+ throws IOException
+ {
+ String id = getId();
+ if (id == null)
+ {
+ throw new NotSerializableException();
+ }
+
+ s.writeObject(id);
+ }
+
+
+ private synchronized void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ String id = (String) s.readObject();
+ Bean<T> b = (Bean<T>) BeanManagerImpl.getManager().getPassivationCapableBean(id);
+ if (b == null) {
+ throw new DeploymentException("cannot deserialize Bean with PassivationCapable id=" + id);
+ }
+ bean = b;
+ }
+
+
+}
Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java?rev=906512&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java Thu Feb 4 15:01:45 2010
@@ -0,0 +1,98 @@
+package org.apache.webbeans.newtests.contexts;
+/*
+* 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.
+*/
+
+import org.apache.webbeans.container.SerializableBean;
+import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.apache.webbeans.newtests.contexts.session.common.PersonalDataBean;
+import org.apache.webbeans.newtests.decorators.multiple.Decorator1;
+import org.apache.webbeans.newtests.decorators.multiple.OutputProvider;
+import org.apache.webbeans.newtests.decorators.multiple.RequestStringBuilder;
+import org.apache.webbeans.newtests.injection.circular.beans.CircularApplicationScopedBean;
+import org.apache.webbeans.newtests.injection.circular.beans.CircularConstructorOrProducerMethodParameterBean;
+import org.apache.webbeans.newtests.injection.circular.beans.CircularDependenScopeBean;
+import org.apache.webbeans.newtests.injection.circular.beans.CircularNormalInConstructor;
+import junit.framework.Assert;
+import org.junit.Test;
+
+import javax.enterprise.inject.spi.Bean;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
+
+/**
+ *
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class SerializationTest extends AbstractUnitTest
+{
+
+ @Test
+ public void testPersonalDataBean() throws ClassNotFoundException, IOException {
+ Collection<Class<?>> classes = new ArrayList<Class<?>>();
+
+ // add a few random classes
+ classes.add(PersonalDataBean.class);
+ classes.add(OutputProvider.class);
+ classes.add(Decorator1.class);
+ classes.add(CircularApplicationScopedBean.class);
+ classes.add(RequestStringBuilder.class);
+ classes.add(CircularConstructorOrProducerMethodParameterBean.class);
+ classes.add(CircularDependenScopeBean.class);
+ classes.add(CircularNormalInConstructor.class);
+
+ startContainer(classes);
+
+ Set<Bean<?>> beans = getLifecycle().getBeanManager().getBeans(Object.class);
+ Assert.assertNotNull(beans);
+ Assert.assertTrue(beans.size() > 7);
+
+ for (Bean<?> bean : beans)
+ {
+ if (! (bean instanceof SerializableBean))
+ {
+ bean = new SerializableBean(bean);
+ }
+
+ byte[] serial = serialize(bean);
+ Bean b2 = deSerialize(serial);
+
+ Assert.assertEquals(((SerializableBean)bean).getBean(), ((SerializableBean)b2).getBean());
+ }
+
+ }
+
+ private byte[] serialize(Bean<?> bean) throws IOException
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(bean);
+ return baos.toByteArray();
+ }
+
+ private Bean<?> deSerialize(byte[] serial) throws IOException, ClassNotFoundException {
+ ByteArrayInputStream baos = new ByteArrayInputStream(serial);
+ ObjectInputStream ois = new ObjectInputStream(baos);
+ return (Bean<?>) ois.readObject();
+ }
+
+
+}