please note that you use the patched javassist version [1] to make the serialisation work.
The patch has already been submitted to JBoss [2]. LieGrue, strub [1] http://github.com/struberg/javassist [2] https://jira.jboss.org/jira/browse/JASSIST-97 --- [email protected] <[email protected]> schrieb am So, 21.2.2010: > Von: [email protected] <[email protected]> > Betreff: svn commit: r912404 - in > /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: > component/ container/ context/creational/ intercept/ intercept/webbeans/ > proxy/ util/ > An: [email protected] > Datum: Sonntag, 21. Februar, 2010 22:10 Uhr > Author: struberg > Date: Sun Feb 21 21:10:44 2010 > New Revision: 912404 > > URL: http://svn.apache.org/viewvc?rev=912404&view=rev > Log: > OWB-6 further passiation and CreationalContext fixes > > Added: > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java > Modified: > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java > Sun Feb 21 21:10:44 2010 > @@ -16,6 +16,7 @@ > import javax.enterprise.context.spi.CreationalContext; > import javax.enterprise.inject.spi.BeanManager; > > +import > org.apache.webbeans.annotation.ApplicationScopeLiteral; > import org.apache.webbeans.container.BeanManagerImpl; > > public class BeanManagerBean extends > AbstractOwbBean<BeanManager> > @@ -34,6 +35,7 @@ > { > > manager = BeanManagerImpl.getManager(); > } > + setImplScopeType(new > ApplicationScopeLiteral()); > > return manager; > } > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java > Sun Feb 21 21:10:44 2010 > @@ -16,6 +16,7 @@ > import javax.enterprise.context.Conversation; > import javax.enterprise.context.spi.CreationalContext; > > +import > org.apache.webbeans.annotation.ApplicationScopeLiteral; > import org.apache.webbeans.conversation.ConversationImpl; > import > org.apache.webbeans.conversation.ConversationManager; > import org.apache.webbeans.spi.ConversationService; > @@ -34,6 +35,7 @@ > public ConversationBean() > { > > super(WebBeansType.CONVERSATION, > Conversation.class); > + setImplScopeType(new > ApplicationScopeLiteral()); > } > > /** > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java > Sun Feb 21 21:10:44 2010 > @@ -15,6 +15,7 @@ > > import javax.enterprise.context.spi.CreationalContext; > > +import > org.apache.webbeans.annotation.ApplicationScopeLiteral; > import > org.apache.webbeans.portable.events.ExtensionLoader; > > /** > @@ -34,6 +35,7 @@ > public > ExtensionBean(Class<T> returnType) > { > > super(WebBeansType.EXTENSION,returnType); > + setImplScopeType(new > ApplicationScopeLiteral()); > } > > /** > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > Sun Feb 21 21:10:44 2010 > @@ -650,19 +650,23 @@ > { > > ownerCreationalContextImpl = > (CreationalContextImpl<?>)ownerCreationalContext; > } > - > > + > //Find the injection > point Bean > Bean<Object> > injectedBean = > (Bean<Object>)injectionResolver.getInjectionPointBean(injectionPoint); > > CreationalContextImpl<Object> > injectedCreational = > (CreationalContextImpl<Object>)createCreationalContext(injectedBean); > > > if(WebBeansUtil.isDependent(injectedBean)) > { > > - > injectedCreational.setOwnerCreational(ownerCreationalContextImpl); > > + > injectedCreational.setOwnerCreational(ownerCreationalContextImpl); > > //Creating a new creational context for > target bean instance > > instance = getReference(injectedBean, > injectionPoint.getType(), injectedCreational); > > - //Add this > dependent into bean dependent list > - > ownerCreationalContextImpl.addDependent(injectedBean, > instance, injectedCreational); > + // add this > dependent into bean dependent list > + // only if the > member is not static and not already a proxy > + if > (!WebBeansUtil.isStaticInjection(injectionPoint) && > !JavassistProxyFactory.isProxyInstance(instance)) > + { > + > ownerCreationalContextImpl.addDependent(injectedBean, > instance, injectedCreational); > + } > } > > else > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java > Sun Feb 21 21:10:44 2010 > @@ -42,54 +42,6 @@ > > private > CreationalContextImpl<?> ownerCreational = null; > > - private static class > DependentCreationalContext<S> implements Serializable > - { > - private static final long > serialVersionUID = 7107949019995422165L; > - > - private > CreationalContext<S> creationalContext; > - > - private Contextual<S> > contextual; > - > - /** > - * @return the > creationalContext > - */ > - public > CreationalContext<S> getCreationalContext() > - { > - return > creationalContext; > - } > - > - /** > - * @param > creationalContext the creationalContext to set > - */ > - public void > setCreationalContext(CreationalContext<S> > creationalContext) > - { > - > this.creationalContext = creationalContext; > - } > - > - /** > - * @return the > contextual > - */ > - public Contextual<S> > getContextual() > - { > - return > contextual; > - } > - > - /** > - * @param contextual > the contextual to set > - */ > - public void > setContextual(Contextual<S> contextual) > - { > - this.contextual > = contextual; > - } > - > - public > DependentCreationalContext(CreationalContext<S> cc, > Contextual<S> contextual) > - { > - this.contextual > = contextual; > - > this.creationalContext = cc; > - } > - } > - > - > /** > * Package private > */ > @@ -168,7 +120,7 @@ > { > T > instance = (T)iterator.next(); > > DependentCreationalContext<T> > dependent = > (DependentCreationalContext<T>)this.dependentObjects.get(instance); > - > dependent.getContextual().destroy(instance, > (CreationalContext<T>)dependent.getCreationalContext()); > > + > dependent.getContextual().destroy(instance, > dependent.getCreationalContext()); > } > > > this.dependentObjects.clear(); > @@ -180,7 +132,7 @@ > �...@override > public void release() > { > - removeDependents(); > > + removeDependents(); > > } > > > Added: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java?rev=912404&view=auto > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java > (added) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java > Sun Feb 21 21:10:44 2010 > @@ -0,0 +1,124 @@ > +/* > + * 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.webbeans.context.creational; > + > +import java.io.IOException; > +import java.io.InvalidClassException; > +import java.io.NotSerializableException; > +import java.io.ObjectInputStream; > +import java.io.ObjectOutputStream; > +import java.io.Serializable; > + > +import javax.enterprise.context.spi.Contextual; > +import javax.enterprise.context.spi.CreationalContext; > + > +import org.apache.webbeans.container.BeanManagerImpl; > +import org.apache.webbeans.util.WebBeansUtil; > + > +class DependentCreationalContext<S> implements > Serializable > +{ > + private static final long serialVersionUID = > 7107949019995422165L; > + > + private CreationalContext<S> > creationalContext; > + > + private Contextual<S> contextual; > + > + /** > + * @return the creationalContext > + */ > + public CreationalContext<S> > getCreationalContext() > + { > + return creationalContext; > + } > + > + /** > + * @param creationalContext the > creationalContext to set > + */ > + public void > setCreationalContext(CreationalContext<S> > creationalContext) > + { > + this.creationalContext = > creationalContext; > + } > + > + /** > + * @return the contextual > + */ > + public Contextual<S> getContextual() > + { > + return contextual; > + } > + > + /** > + * @param contextual the > contextual to set > + */ > + public void > setContextual(Contextual<S> contextual) > + { > + this.contextual = contextual; > + } > + > + public > DependentCreationalContext(CreationalContext<S> cc, > Contextual<S> contextual) > + { > + this.contextual = contextual; > + this.creationalContext = cc; > + } > + > + private synchronized void > writeObject(ObjectOutputStream s) > + throws IOException > + { > + > s.writeLong(serialVersionUID); > + > + > s.writeObject(creationalContext); > + > + String id = null; > + if (contextual != null) > + { > + if ((id = > WebBeansUtil.isPassivationCapable(contextual)) != null) > + { > + > s.writeObject(id); > + } > + else > + { > + > throw new NotSerializableException("cannot serialize " + > contextual.toString()); > + } > + > + } > + else > + { > + > s.writeObject(null); > + } > + } > + > + > + @SuppressWarnings("unchecked") > + private synchronized void > readObject(ObjectInputStream s) > + throws IOException, ClassNotFoundException > + { > + long svId = s.readLong(); > + if (svId != serialVersionUID) > + { > + throw new > InvalidClassException(this.getClass().getSimpleName()); > + } > + > + creationalContext = > (CreationalContext<S>) s.readObject(); > + > + String id = (String) > s.readObject(); > + if (id != null) > + { > + contextual = > (Contextual<S>) > BeanManagerImpl.getManager().getPassivationCapableBean(id); > + } > + } > + > +} > \ No newline at end of file > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java > Sun Feb 21 21:10:44 2010 > @@ -372,23 +372,26 @@ > > private void > writeObject(ObjectOutputStream s) throws IOException > { > + > s.writeLong(serialVersionUID); > > if(WebBeansUtil.isPassivationCapable(this.bean) > != null) > { > - s.writeByte(1); > > s.writeUTF(this.bean.getId()); > } > else > { > > logger.warn("Trying to serialize not > passivated capable bean proxy : " + this.bean); > - s.writeByte(0); > } > } > > private void > readObject(ObjectInputStream s) throws IOException, > ClassNotFoundException > { > - if( s.readByte() == 1) > + if( s.readLong() == > serialVersionUID) > { > - this.bean = > (OwbBean<?>)BeanManagerImpl.getManager().getPassivationCapableBean(s.readUTF()); > + String > passivationId = s.readUTF(); > + if > (passivationId != null) > + { > + > this.bean = > (OwbBean<?>)BeanManagerImpl.getManager().getPassivationCapableBean(passivationId); > + } > } > else > { > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java > Sun Feb 21 21:10:44 2010 > @@ -456,5 +456,10 @@ > { > return > this.delegateBean.isAlternative(); > } > - > + > + @Override > + public boolean isPassivationCapable() > + { > + return true; > + } > } > \ No newline at end of file > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java > Sun Feb 21 21:10:44 2010 > @@ -205,5 +205,14 @@ > > return result; > } > + > + /** > + * @param o the object to check > + * @return > <code>true</code> if the given object is a > proxy > + */ > + public static boolean isProxyInstance(Object > o) > + { > + return o instanceof > ProxyObject; > + } > > } > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=912404&r1=912403&r2=912404&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java > Sun Feb 21 21:10:44 2010 > @@ -22,6 +22,7 @@ > import java.lang.reflect.InvocationTargetException; > import java.lang.reflect.Member; > import java.lang.reflect.Method; > +import java.lang.reflect.Modifier; > import java.lang.reflect.ParameterizedType; > import java.lang.reflect.Type; > import java.lang.reflect.TypeVariable; > @@ -2731,5 +2732,25 @@ > > return managedBean; > } > + > + /** > + * Determines if the injection is > to be performed into a static field. > + * > + * @param injectionPoint > + * @return > <code>true</code> if the injection is into a > static field > + */ > + public static boolean > isStaticInjection(InjectionPoint injectionPoint) > + { > + if (injectionPoint != null) > + { > + Member member = > injectionPoint.getMember(); > + if (member != > null && Modifier.isStatic(member.getModifiers())) > + { > + > return true; > + } > + } > + > + return false; > + } > > } > \ No newline at end of file > > > __________________________________________________ Do You Yahoo!? Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails. http://mail.yahoo.com
