It was a long walk, but finally after this commit, the CODI @ViewScoped works in a real world application with lots of bean and interceptors :)
Of course only after patching javassist currently... LieGrue, strub --- [email protected] <[email protected]> schrieb am Mo, 22.2.2010: > Von: [email protected] <[email protected]> > Betreff: svn commit: r912465 - in /openwebbeans/trunk/webbeans-impl/src: > main/java/org/apache/webbeans/component/ > main/java/org/apache/webbeans/container/ > main/java/org/apache/webbeans/intercept/ main/java/org/apache/webbeans/util/ > test/java/org/apache/webbeans... > An: [email protected] > Datum: Montag, 22. Februar, 2010 03:19 Uhr > Author: struberg > Date: Mon Feb 22 02:19:27 2010 > New Revision: 912465 > > URL: http://svn.apache.org/viewvc?rev=912465&view=rev > Log: > OWB-6 store information for all Beans in the > passivationBeans list. > > This is needed since we also need to serialise proxies of > NormalScoped > Beans which are not passivating. Imagine an > @ApplicationScoped userService > gets injected into a @ViewScoped ListModel. > > > Modified: > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.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/ManagedBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java > > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java > > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/circular/beans/CircularDependenScopeBean.java > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java > Mon Feb 22 02:19:27 2010 > @@ -207,7 +207,7 @@ > > /** > * TODO there are probably other infos > which must get added to make the id unique! > - * If not, it will crash in {...@link > BeanManagerImpl#addPassivationCapableBean(javax.enterprise.inject.spi.Bean)} > + * If not, it will crash in {...@link > BeanManagerImpl#addPassivationInfo(javax.enterprise.inject.spi.Bean)} > * anyway. > * > * {...@inheritdoc} > @@ -579,4 +579,10 @@ > { > return this.logger; > } > + > + @Override > + public boolean isDependent() { > + return false; > + } > + > } > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java?rev=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java > Mon Feb 22 02:19:27 2010 > @@ -17,6 +17,7 @@ > import java.lang.annotation.Annotation; > import java.util.Set; > > +import javax.enterprise.context.Dependent; > import javax.enterprise.context.spi.CreationalContext; > import javax.enterprise.inject.spi.Bean; > import javax.enterprise.inject.spi.InjectionPoint; > @@ -218,5 +219,13 @@ > return false; > } > > + /** > + * look at a Dependent scope > annotation. > + */ > + @Override > + public boolean isDependent() { > + return > getScope().equals(Dependent.class); > + } > + > > } > \ No newline at end of file > > 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=912465&r1=912464&r2=912465&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 > Mon Feb 22 02:19:27 2010 > @@ -85,4 +85,5 @@ > > instance = null; > } > } > + > } > > 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=912465&r1=912464&r2=912465&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 > Mon Feb 22 02:19:27 2010 > @@ -16,6 +16,7 @@ > import java.io.Serializable; > import java.lang.reflect.Constructor; > > +import javax.enterprise.context.Dependent; > import javax.enterprise.context.spi.CreationalContext; > import javax.enterprise.inject.spi.Bean; > import javax.enterprise.inject.spi.Decorator; > @@ -114,5 +115,12 @@ > return false; > } > > + /** > + * look at a Dependent scope > annotation. > + */ > + @Override > + public boolean isDependent() { > + return > getScope().equals(Dependent.class); > + } > > } > \ No newline at end of file > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewBean.java?rev=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/NewBean.java > Mon Feb 22 02:19:27 2010 > @@ -54,4 +54,12 @@ > return definedType; > } > > + /** > + * always true for New qualifier > + */ > + @Override > + public boolean isDependent() { > + return true; > + } > + > } > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java?rev=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java > Mon Feb 22 02:19:27 2010 > @@ -172,4 +172,11 @@ > */ > public boolean > isPassivationCapable(); > > + /** > + * This determines if this bean is > really a dependent bean, > + * and as such always creats a > freshl instance for each > + * InjectionPoint. A > BeanManagerBean is e.g. not a dependent bean. > + * @return > <code>true</code> if this is a dependent bean > + */ > + public boolean isDependent(); > } > \ No newline at end of file > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java > Mon Feb 22 02:19:27 2010 > @@ -42,6 +42,13 @@ > protected Method disposalMethod; > > /** > + * This string will be used for > passivating the Bean. > + * It will be created on the first > use. > + * @see #getId() > + */ > + private String passivatingId = null; > + > + /** > * Creates a new instance. > * > * @param parent parent bean > @@ -96,6 +103,16 @@ > this.disposalMethod > = disposalMethod; > } > > + public String getId() > + { > + if (passivatingId == null) > + { > + String id = > super.getId(); > + > + passivatingId = > id + "#" + creatorMethod.toGenericString(); > + } > + return passivatingId; > + } > /** > * Gets actual type arguments. > * > > 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=912465&r1=912464&r2=912465&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 > Mon Feb 22 02:19:27 2010 > @@ -56,6 +56,7 @@ > import > org.apache.webbeans.component.EnterpriseBeanMarker; > import org.apache.webbeans.component.InjectionTargetBean; > import org.apache.webbeans.component.JmsBeanMarker; > +import org.apache.webbeans.component.OwbBean; > import > org.apache.webbeans.component.third.ThirdpartyBeanImpl; > import org.apache.webbeans.config.WebBeansFinder; > import org.apache.webbeans.context.ContextFactory; > @@ -137,10 +138,10 @@ > private > List<AnnotatedType<?>> additionalAnnotatedTypes > = new CopyOnWriteArrayList<AnnotatedType<?>>(); > > /** > - * This map stores all {...@link > PassivationCapable} beans along with their unique id. > - * This is used for > serialization. > + * This map stores all beans along > with their unique {...@link PassivationCapable} id. > + * This is used as a reference for > serialization. > */ > - private ConcurrentHashMap<String, > Bean<?>> passivationCapableBeans = new > ConcurrentHashMap<String, Bean<?>>(); > + private ConcurrentHashMap<String, > Bean<?>> passivationBeans = new > ConcurrentHashMap<String, Bean<?>>(); > > /** > * The parent Manager this child is > depending from. > @@ -287,13 +288,13 @@ > if(newBean > instanceof AbstractOwbBean) > { > > this.deploymentBeans.add(newBean); > - > addPassivationCapableBean(newBean); > + > addPassivationInfo((OwbBean)newBean); > } > else > { > > ThirdpartyBeanImpl<?> bean = new > ThirdpartyBeanImpl(newBean); > > this.deploymentBeans.add(bean); > - > addPassivationCapableBean(bean); > + > addPassivationInfo(bean); > } > > > @@ -301,20 +302,20 @@ > } > > /** > - * Check if the bean is > PassivationCapable and add it to the id store. > + * Check if the bean is has a > passivation id and add it to the id store. > * > * @param bean > * @throws DefinitionException if the > id is not unique. > */ > - protected void > addPassivationCapableBean(Bean<?> bean) throws > DefinitionException > + protected void > addPassivationInfo(OwbBean<?> bean) throws > DefinitionException > { > - String id = null; > - > if((id=WebBeansUtil.isPassivationCapable(bean)) != null) > + String id = bean.getId(); > + if(id != null) > { > - Bean<?> > oldBean = passivationCapableBeans.putIfAbsent(id, bean); > + Bean<?> > oldBean = passivationBeans.putIfAbsent(id, bean); > if > (oldBean != null) > { > - > throw new DefinitionException("PassivationCapable bean id is > not unique: " + id); > + > throw new DefinitionException("PassivationCapable bean id is > not unique: " + id + " bean:" + bean); > } > > } > > @@ -662,8 +663,7 @@ > > instance = getReference(injectedBean, > injectionPoint.getType(), 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)) > + if > (!WebBeansUtil.isStaticInjection(injectionPoint)) > { > > ownerCreationalContextImpl.addDependent(injectedBean, > instance, injectedCreational); > } > @@ -710,7 +710,7 @@ > �...@override > public Bean<?> > getPassivationCapableBean(String id) > { > - return > passivationCapableBeans.get(id); > + return > passivationBeans.get(id); > } > > /** > > 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=912465&r1=912464&r2=912465&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 > Mon Feb 22 02:19:27 2010 > @@ -373,21 +373,25 @@ > private void > writeObject(ObjectOutputStream s) throws IOException > { > > s.writeLong(serialVersionUID); > - > if(WebBeansUtil.isPassivationCapable(this.bean) != null) > + // we have to write the ids > for all beans, not only PassivationCapable > + // since this gets serialized > along with the Bean proxy. > + String passivationId = > this.bean.getId(); > + if (passivationId!= null) > { > - > s.writeUTF(this.bean.getId()); > + > s.writeObject(passivationId); > } > else > { > + > s.writeObject(null); > > logger.warn("Trying to serialize not > passivated capable bean proxy : " + this.bean); > } > } > > private void > readObject(ObjectInputStream s) throws IOException, > ClassNotFoundException > { > - if( s.readLong() == > serialVersionUID) > + if(s.readLong() == > serialVersionUID) > { > - String > passivationId = s.readUTF(); > + String > passivationId = (String) s.readObject(); > if > (passivationId != null) > { > > this.bean = > (OwbBean<?>)BeanManagerImpl.getManager().getPassivationCapableBean(passivationId); > > 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=912465&r1=912464&r2=912465&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 > Mon Feb 22 02:19:27 2010 > @@ -2540,12 +2540,7 @@ > > public static boolean > isDependent(Bean<?> bean) > { > - > if(bean.getScope().equals(Dependent.class)) > - { > - return true; > - } > - > - return false; > + return ((OwbBean) > bean).isDependent(); > } > > public static void > inspectErrorStack(String logMessage) > > Modified: > 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=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/contexts/SerializationTest.java > Mon Feb 22 02:19:27 2010 > @@ -32,6 +32,13 @@ > 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 > org.apache.webbeans.test.component.CheckWithCheckPayment; > +import > org.apache.webbeans.test.component.CheckWithMoneyPayment; > +import org.apache.webbeans.test.component.IPayment; > +import > org.apache.webbeans.test.component.PaymentProcessorComponent; > +import > org.apache.webbeans.test.component.event.normal.ComponentWithObserves1; > +import > org.apache.webbeans.test.component.event.normal.ComponentWithObserves2; > +import > org.apache.webbeans.test.component.event.normal.TransactionalInterceptor; > import org.apache.webbeans.util.WebBeansUtil; > > import junit.framework.Assert; > @@ -91,6 +98,13 @@ > > classes.add(CircularConstructorOrProducerMethodParameterBean.class); > > classes.add(CircularDependenScopeBean.class); > > classes.add(CircularNormalInConstructor.class); > + > classes.add(TransactionalInterceptor.class); > + > classes.add(ComponentWithObserves1.class); > + > classes.add(ComponentWithObserves2.class); > + > classes.add(PaymentProcessorComponent.class); > + classes.add(IPayment.class); > + > classes.add(CheckWithCheckPayment.class); > + > classes.add(CheckWithMoneyPayment.class); > > > startContainer(classes); > > > Modified: > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/circular/beans/CircularDependenScopeBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/circular/beans/CircularDependenScopeBean.java?rev=912465&r1=912464&r2=912465&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/circular/beans/CircularDependenScopeBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/injection/circular/beans/CircularDependenScopeBean.java > Mon Feb 22 02:19:27 2010 > @@ -23,6 +23,8 @@ > import javax.inject.Inject; > import javax.inject.Named; > > +import > org.apache.webbeans.test.component.event.normal.Transactional; > + > @Dependent > > @Named(value="org.apache.webbeans.newtests.injection.circular.beans.CircularDependenScopeBean") > public class CircularDependenScopeBean > @@ -32,6 +34,7 @@ > public static boolean success = > false; > > > + @Transactional > public void hello() > { > > > > __________________________________________________ Do You Yahoo!? Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails. http://mail.yahoo.com
