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/08/12 00:51:26 UTC
svn commit: r984612 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
AbstractContext.java creational/BeanInstanceBag.java
Author: struberg
Date: Wed Aug 11 22:51:26 2010
New Revision: 984612
URL: http://svn.apache.org/viewvc?rev=984612&view=rev
Log:
OWB-437 improve synchronization block for creating new contextual instances
by moving it to the ContextualBeanBag. This way only the beanbag will get
locked and not the whole container anymore
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=984612&r1=984611&r2=984612&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java Wed Aug 11 22:51:26 2010
@@ -195,7 +195,7 @@ public abstract class AbstractContext im
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
- protected synchronized <T> T getInstance(Contextual<T> contextual, CreationalContext<T> creationalContext)
+ protected <T> T getInstance(Contextual<T> contextual, CreationalContext<T> creationalContext)
{
T instance = null;
@@ -205,9 +205,11 @@ public abstract class AbstractContext im
{
createContextualBag(contextual, creationalContext);
}
-
+
+ bag = (BeanInstanceBag<T>)componentInstanceMap.get(contextual);
+
//Look for instance
- instance = (T)componentInstanceMap.get(contextual).getBeanInstance();
+ instance = bag.getBeanInstance();
if (instance != null)
{
return instance;
@@ -225,16 +227,8 @@ public abstract class AbstractContext im
//No instance
if(instance == null)
{
- instance = contextual.create(creationalContext);
- }
-
- //If succesfull creation
- if (instance != null)
- {
- bag = (BeanInstanceBag<T>)this.componentInstanceMap.get(contextual);
- bag.setBeanInstance(instance);
+ instance = bag.create(contextual);
}
-
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java?rev=984612&r1=984611&r2=984612&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java Wed Aug 11 22:51:26 2010
@@ -18,6 +18,7 @@
*/
package org.apache.webbeans.context.creational;
+import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
import java.io.Serializable;
@@ -25,7 +26,7 @@ public class BeanInstanceBag<T> implemen
{
private final CreationalContext<T> beanCreationalContext;
- private volatile T beanInstance;
+ private T beanInstance;
public BeanInstanceBag(CreationalContext<T> beanCreationalContext)
{
@@ -58,4 +59,19 @@ public class BeanInstanceBag<T> implemen
return beanInstance;
}
+ /**
+ * Create the contextual instance in a thread safe fashion
+ * @param contextual
+ * @return the single contextual instance for the context
+ */
+ public synchronized T create(Contextual<T> contextual)
+ {
+ // we need to check again, maybe we got blocked by a previous invocation
+ if (beanInstance == null)
+ {
+ beanInstance = contextual.create(beanCreationalContext);
+ }
+
+ return beanInstance;
+ }
}
Re: svn commit: r984612 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context: AbstractContext.java creational/BeanInstanceBag.java
Posted by Mark Struberg <st...@yahoo.de>.
Thanks Gurkan,
looks even better now ;)
This was in fact the most pressing gut feeling which I needed to check for
before we can release 1.0.
I hope that all the random errors I got occasionally under heavy load finally
vanished now!
LieGrue,
strub
----- Original Message ----
> From: Gurkan Erdogdu <gu...@yahoo.com>
> To: dev@openwebbeans.apache.org
> Sent: Thu, August 12, 2010 8:53:32 AM
> Subject: Re: svn commit: r984612 - in
>/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
>AbstractContext.java creational/BeanInstanceBag.java
>
> Hello Mark
>
>
> It seems that your observation is correct! Instead of using synchronized,I
>have
>
> changed with Java 5 style locking
>
> Thanks;
>
> --Gurkan
>
>
> ________________________________
> From: Mark Struberg <st...@yahoo.de>
> To: dev@openwebbeans.apache.org
> Sent: Thu, August 12, 2010 1:55:52 AM
> Subject: Re: svn commit: r984612 - in
> /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
> AbstractContext.java creational/BeanInstanceBag.java
>
> Hi folks!
>
> since this is pretty heavy stuff, I'd be happy if someone could review my
> changes.
>
> txs and LieGrue,
> strub
>
>
>
>
> ----- Original Message ----
> > From: "struberg@apache.org" <st...@apache.org>
> > To: commits@openwebbeans.apache.org
> > Sent: Thu, August 12, 2010 12:51:26 AM
> > Subject: svn commit: r984612 - in
> >/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
> >AbstractContext.java creational/BeanInstanceBag.java
> >
> > Author: struberg
> > Date: Wed Aug 11 22:51:26 2010
> > New Revision: 984612
> >
> > URL: http://svn.apache.org/viewvc?rev=984612&view=rev
> > Log:
> > OWB-437 improve synchronization block for creating new contextual
>instances
> >
> > by moving it to the ContextualBeanBag. This way only the beanbag will get
> > locked and not the whole container anymore
> >
> > Modified:
> >
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>a
> >
> >
> >
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>a
> >
> >
> >
> > Modified:
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>a
> >
> >
> > URL: :
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=984612&r1=984611&r2=984612&view=diff
>f
> >
> >
> >
>==============================================================================
> > ; ---
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>a
> >
> > a (original)
> > +++
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>a
> >
> > Wed Aug 11 22:51:26 2010
> > @@ -195,7 +195,7 @@ public abstract class AbstractContext im
> > * {@inheritDoc}
> > */
> > @SuppressWarnings("unchecked")
> > - protected synchronized <T> T getInstance(Contextual<T> contextual,
> >CreationalContext<T> creationalContext)
> > + protected <T> T getInstance(Contextual<T> contextual,
> >CreationalContext<T> creationalContext)
> > {
> > T instance = null;
> >
> > @@ -205,9 +205,11 @@ public abstract class AbstractContext im
> > {
> > createContextualBag(contextual, creationalContext);
> > }
> > -
> > +
> > + bag = (BeanInstanceBag<T>)componentInstanceMap.get(contextual);
> > +
> > //Look for instance
> > - instance =
> >(T)componentInstanceMap.get(contextual).getBeanInstance();
> >
> > + instance = bag.getBeanInstance();
> > if (instance != null)
> > {
> > return instance;
> > @@ -225,16 +227,8 @@ public abstract class AbstractContext im
> > //No instance
> > if(instance == null)
> > {
> > - instance = contextual.create(creationalContext);
> > - }
> > -
> > - //If succesfull creation
> > - if (instance != null)
> > - {
> > - bag =
> >(BeanInstanceBag<T>)this.componentInstanceMap.get(contextual);
> > - bag.setBeanInstance(instance);
> > + instance = bag.create(contextual);
> > }
> > -
> > }
> > }
> >
> >
> > Modified:
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>a
> >
> >
> > URL:
>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java?rev=984612&r1=984611&r2=984612&view=diff
>f
> >
> >
> >
>==============================================================================
> > ; --- -
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>a
> >
> > (original)
> > +++
>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>a
> >
> > Wed Aug 11 22:51:26 2010
> > @@ -18,6 +18,7 @@
> > */
> > package org.apache.webbeans.context.creational;
> >
> > +import javax.enterprise.context.spi.Contextual;
> > import javax.enterprise.context.spi.CreationalContext;
> > import java.io.Serializable;
> >
> > @@ -25,7 +26,7 @@ public class BeanInstanceBag<T> implemen
> > {
> > private final CreationalContext<T> beanCreationalContext;
> >
> > - private volatile T beanInstance;
> > + private T beanInstance;
> >
> > public BeanInstanceBag(CreationalContext<T> beanCreationalContext)
> > {
> > @@ -58,4 +59,19 @@ public class BeanInstanceBag<T> implemen
> > return beanInstance;
> > }
> >
> > + /**
> > + * Create the contextual instance in a thread safe fashion
> > + * @param contextual
> > + * @return the single contextual instance for the context
> > + */
> > + public synchronized T create(Contextual<T> contextual)
> > + {
> > + // we need to check again, maybe we got blocked by a previous
> >invocation
> > + if (beanInstance == null)
> > + {
> > + beanInstance = contextual.create(beanCreationalContext);
> > + }
> > +
> > + return beanInstance;
> > + }
> > }
> >
> >
> >
>
>
Re: svn commit: r984612 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context: AbstractContext.java creational/BeanInstanceBag.java
Posted by Gurkan Erdogdu <gu...@yahoo.com>.
Hello Mark
It seems that your observation is correct! Instead of using synchronized,I have
changed with Java 5 style locking
Thanks;
--Gurkan
________________________________
From: Mark Struberg <st...@yahoo.de>
To: dev@openwebbeans.apache.org
Sent: Thu, August 12, 2010 1:55:52 AM
Subject: Re: svn commit: r984612 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
AbstractContext.java creational/BeanInstanceBag.java
Hi folks!
since this is pretty heavy stuff, I'd be happy if someone could review my
changes.
txs and LieGrue,
strub
----- Original Message ----
> From: "struberg@apache.org" <st...@apache.org>
> To: commits@openwebbeans.apache.org
> Sent: Thu, August 12, 2010 12:51:26 AM
> Subject: svn commit: r984612 - in
>/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
>AbstractContext.java creational/BeanInstanceBag.java
>
> Author: struberg
> Date: Wed Aug 11 22:51:26 2010
> New Revision: 984612
>
> URL: http://svn.apache.org/viewvc?rev=984612&view=rev
> Log:
> OWB-437 improve synchronization block for creating new contextual instances
>
> by moving it to the ContextualBeanBag. This way only the beanbag will get
> locked and not the whole container anymore
>
> Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
>
>
> Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
>
> URL: :
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=984612&r1=984611&r2=984612&view=diff
>
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
> a (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
> Wed Aug 11 22:51:26 2010
> @@ -195,7 +195,7 @@ public abstract class AbstractContext im
> * {@inheritDoc}
> */
> @SuppressWarnings("unchecked")
> - protected synchronized <T> T getInstance(Contextual<T> contextual,
>CreationalContext<T> creationalContext)
> + protected <T> T getInstance(Contextual<T> contextual,
>CreationalContext<T> creationalContext)
> {
> T instance = null;
>
> @@ -205,9 +205,11 @@ public abstract class AbstractContext im
> {
> createContextualBag(contextual, creationalContext);
> }
> -
> +
> + bag = (BeanInstanceBag<T>)componentInstanceMap.get(contextual);
> +
> //Look for instance
> - instance =
>(T)componentInstanceMap.get(contextual).getBeanInstance();
>
> + instance = bag.getBeanInstance();
> if (instance != null)
> {
> return instance;
> @@ -225,16 +227,8 @@ public abstract class AbstractContext im
> //No instance
> if(instance == null)
> {
> - instance = contextual.create(creationalContext);
> - }
> -
> - //If succesfull creation
> - if (instance != null)
> - {
> - bag =
>(BeanInstanceBag<T>)this.componentInstanceMap.get(contextual);
> - bag.setBeanInstance(instance);
> + instance = bag.create(contextual);
> }
> -
> }
> }
>
>
> Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
>
> URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java?rev=984612&r1=984611&r2=984612&view=diff
>
>
> ==============================================================================
> --- -
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
> (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
> Wed Aug 11 22:51:26 2010
> @@ -18,6 +18,7 @@
> */
> package org.apache.webbeans.context.creational;
>
> +import javax.enterprise.context.spi.Contextual;
> import javax.enterprise.context.spi.CreationalContext;
> import java.io.Serializable;
>
> @@ -25,7 +26,7 @@ public class BeanInstanceBag<T> implemen
> {
> private final CreationalContext<T> beanCreationalContext;
>
> - private volatile T beanInstance;
> + private T beanInstance;
>
> public BeanInstanceBag(CreationalContext<T> beanCreationalContext)
> {
> @@ -58,4 +59,19 @@ public class BeanInstanceBag<T> implemen
> return beanInstance;
> }
>
> + /**
> + * Create the contextual instance in a thread safe fashion
> + * @param contextual
> + * @return the single contextual instance for the context
> + */
> + public synchronized T create(Contextual<T> contextual)
> + {
> + // we need to check again, maybe we got blocked by a previous
>invocation
> + if (beanInstance == null)
> + {
> + beanInstance = contextual.create(beanCreationalContext);
> + }
> +
> + return beanInstance;
> + }
> }
>
>
>
Re: svn commit: r984612 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context: AbstractContext.java creational/BeanInstanceBag.java
Posted by Mark Struberg <st...@yahoo.de>.
Hi folks!
since this is pretty heavy stuff, I'd be happy if someone could review my
changes.
txs and LieGrue,
strub
----- Original Message ----
> From: "struberg@apache.org" <st...@apache.org>
> To: commits@openwebbeans.apache.org
> Sent: Thu, August 12, 2010 12:51:26 AM
> Subject: svn commit: r984612 - in
>/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context:
>AbstractContext.java creational/BeanInstanceBag.java
>
> Author: struberg
> Date: Wed Aug 11 22:51:26 2010
> New Revision: 984612
>
> URL: http://svn.apache.org/viewvc?rev=984612&view=rev
> Log:
> OWB-437 improve synchronization block for creating new contextual instances
>
> by moving it to the ContextualBeanBag. This way only the beanbag will get
> locked and not the whole container anymore
>
> Modified:
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
>
> Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
> URL: :
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=984612&r1=984611&r2=984612&view=diff
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
> a (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
> Wed Aug 11 22:51:26 2010
> @@ -195,7 +195,7 @@ public abstract class AbstractContext im
> * {@inheritDoc}
> */
> @SuppressWarnings("unchecked")
> - protected synchronized <T> T getInstance(Contextual<T> contextual,
>CreationalContext<T> creationalContext)
> + protected <T> T getInstance(Contextual<T> contextual,
>CreationalContext<T> creationalContext)
> {
> T instance = null;
>
> @@ -205,9 +205,11 @@ public abstract class AbstractContext im
> {
> createContextualBag(contextual, creationalContext);
> }
> -
> +
> + bag = (BeanInstanceBag<T>)componentInstanceMap.get(contextual);
> +
> //Look for instance
> - instance =
>(T)componentInstanceMap.get(contextual).getBeanInstance();
>
> + instance = bag.getBeanInstance();
> if (instance != null)
> {
> return instance;
> @@ -225,16 +227,8 @@ public abstract class AbstractContext im
> //No instance
> if(instance == null)
> {
> - instance = contextual.create(creationalContext);
> - }
> -
> - //If succesfull creation
> - if (instance != null)
> - {
> - bag =
>(BeanInstanceBag<T>)this.componentInstanceMap.get(contextual);
> - bag.setBeanInstance(instance);
> + instance = bag.create(contextual);
> }
> -
> }
> }
>
>
> Modified:
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
> URL:
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java?rev=984612&r1=984611&r2=984612&view=diff
>
> ==============================================================================
> --- -
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
> (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
> Wed Aug 11 22:51:26 2010
> @@ -18,6 +18,7 @@
> */
> package org.apache.webbeans.context.creational;
>
> +import javax.enterprise.context.spi.Contextual;
> import javax.enterprise.context.spi.CreationalContext;
> import java.io.Serializable;
>
> @@ -25,7 +26,7 @@ public class BeanInstanceBag<T> implemen
> {
> private final CreationalContext<T> beanCreationalContext;
>
> - private volatile T beanInstance;
> + private T beanInstance;
>
> public BeanInstanceBag(CreationalContext<T> beanCreationalContext)
> {
> @@ -58,4 +59,19 @@ public class BeanInstanceBag<T> implemen
> return beanInstance;
> }
>
> + /**
> + * Create the contextual instance in a thread safe fashion
> + * @param contextual
> + * @return the single contextual instance for the context
> + */
> + public synchronized T create(Contextual<T> contextual)
> + {
> + // we need to check again, maybe we got blocked by a previous
>invocation
> + if (beanInstance == null)
> + {
> + beanInstance = contextual.create(beanCreationalContext);
> + }
> +
> + return beanInstance;
> + }
> }
>
>
>