Return-Path: Delivered-To: apmail-openwebbeans-commits-archive@www.apache.org Received: (qmail 31700 invoked from network); 22 Feb 2010 02:19:49 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 22 Feb 2010 02:19:49 -0000 Received: (qmail 608 invoked by uid 500); 22 Feb 2010 02:19:49 -0000 Delivered-To: apmail-openwebbeans-commits-archive@openwebbeans.apache.org Received: (qmail 578 invoked by uid 500); 22 Feb 2010 02:19:49 -0000 Mailing-List: contact commits-help@openwebbeans.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openwebbeans.apache.org Delivered-To: mailing list commits@openwebbeans.apache.org Received: (qmail 568 invoked by uid 99); 22 Feb 2010 02:19:49 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 22 Feb 2010 02:19:49 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 22 Feb 2010 02:19:48 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 8301223888C2; Mon, 22 Feb 2010 02:19:28 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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... Date: Mon, 22 Feb 2010 02:19:28 -0000 To: commits@openwebbeans.apache.org From: struberg@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100222021928.8301223888C2@eris.apache.org> 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 true 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> additionalAnnotatedTypes = new CopyOnWriteArrayList>(); /** - * 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> passivationCapableBeans = new ConcurrentHashMap>(); + private ConcurrentHashMap> passivationBeans = new ConcurrentHashMap>(); /** * 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() {