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/07/01 12:45:05 UTC
svn commit: r959590 -
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Author: struberg
Date: Thu Jul 1 10:45:05 2010
New Revision: 959590
URL: http://svn.apache.org/viewvc?rev=959590&view=rev
Log:
OWB-369 improve ContextsService retrieval
Getting the ContextsService each time was very expensive.
We now cache it depending on the ClassLoader. This way
it is possible that different WebApps may configure
different ContextsServices.
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java?rev=959590&r1=959589&r2=959590&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java Thu Jul 1 10:45:05 2010
@@ -19,6 +19,7 @@
package org.apache.webbeans.context;
import java.lang.annotation.Annotation;
+import java.util.concurrent.ConcurrentHashMap;
import javax.enterprise.context.*;
import javax.enterprise.context.spi.Context;
@@ -29,6 +30,7 @@ import org.apache.webbeans.context.type.
import org.apache.webbeans.corespi.ServiceLoader;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.spi.ContextsService;
+import org.apache.webbeans.util.WebBeansUtil;
/**
* JSR-299 based standard context
@@ -38,7 +40,17 @@ public final class ContextFactory
{
/**Logger instance*/
private static final WebBeansLogger logger = WebBeansLogger.getLogger(ContextFactory.class);
-
+
+ /**
+ * Underlying context service per ClassLoader
+ * This distinction is necessary for application servers
+ * with multiple WAR deployments having different
+ * ContextsServices configured.
+ */
+ private static ConcurrentHashMap<ClassLoader, ContextsService> contextServices
+ = new ConcurrentHashMap<ClassLoader, ContextsService>();
+
+
/**
* Not-instantiate
*/
@@ -46,12 +58,29 @@ public final class ContextFactory
{
throw new UnsupportedOperationException();
}
+
+ /**
+ * @return the ContextService for the current ClassLoader
+ */
+ private static ContextsService getContextsService()
+ {
+ ClassLoader cl = WebBeansUtil.getCurrentClassLoader();
+ ContextsService cs = contextServices.get(cl);
+ if (cs == null)
+ {
+ cs = ServiceLoader.getService(ContextsService.class);
+ contextServices.put(cl, cs);
+ }
+
+ return cs;
+ }
+
public static void initRequestContext(Object request)
{
try
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(RequestScoped.class, request);
}
catch (Exception e)
@@ -72,7 +101,7 @@ public final class ContextFactory
public static void destroyRequestContext(Object request)
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(RequestScoped.class, request);
}
@@ -80,7 +109,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(SessionScoped.class, session);
}
catch (Exception e)
@@ -91,7 +120,7 @@ public final class ContextFactory
public static void destroySessionContext(Object session)
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(SessionScoped.class, session);
}
@@ -104,7 +133,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(ApplicationScoped.class, parameter);
}
catch (Exception e)
@@ -121,7 +150,7 @@ public final class ContextFactory
*/
public static void destroyApplicationContext(Object parameter)
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(ApplicationScoped.class, parameter);
}
@@ -129,7 +158,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(Singleton.class, parameter);
}
catch (Exception e)
@@ -140,7 +169,7 @@ public final class ContextFactory
public static void destroySingletonContext(Object parameter)
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(Singleton.class, parameter);
}
@@ -148,7 +177,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(ConversationScoped.class, context);
}
catch (Exception e)
@@ -159,7 +188,7 @@ public final class ContextFactory
public static void destroyConversationContext()
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(ConversationScoped.class, null);
}
@@ -173,7 +202,7 @@ public final class ContextFactory
public static Context getStandardContext(ContextTypes type) throws ContextNotActiveException
{
Context context = null;
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
switch (type.getCardinal())
{
case 0:
@@ -250,7 +279,7 @@ public final class ContextFactory
*/
public static void activateContext(Class<? extends Annotation> scopeType)
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.activateContext(scopeType);
}
@@ -259,7 +288,7 @@ public final class ContextFactory
*/
public static void deActivateContext(Class<? extends Annotation> scopeType)
{
- ContextsService contextService = ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.deActivateContext(scopeType);
}
Re: svn commit: r959590 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Posted by Mark Struberg <st...@yahoo.de>.
txs, I'll reopen the JIRA again!
LieGrue,
strub
----- Original Message ----
> From: Gurkan Erdogdu <gu...@yahoo.com>
> To: dev@openwebbeans.apache.org
> Sent: Thu, July 1, 2010 1:37:30 PM
> Subject: Re: svn commit: r959590 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
>
> Hello Mark;
When the application is removed, you have to remove also from
> ContextFactory
cache othewise create a
> leak
--thanks;
________________________________
From:
> "
> href="mailto:struberg@apache.org">struberg@apache.org" <
> ymailto="mailto:struberg@apache.org"
> href="mailto:struberg@apache.org">struberg@apache.org>
To:
> ymailto="mailto:commits@openwebbeans.apache.org"
> href="mailto:commits@openwebbeans.apache.org">commits@openwebbeans.apache.org
Sent:
> Thu, July 1, 2010 1:45:05 PM
Subject: svn commit: r959590 -
>
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Author:
> struberg
Date: Thu Jul 1 10:45:05 2010
New Revision:
> 959590
URL:
> http://svn.apache.org/viewvc?rev=959590&view=rev
Log:
OWB-369 improve
> ContextsService retrieval
Getting the ContextsService each time was very
> expensive.
We now cache it depending on the ClassLoader. This way
it is
> possible that different WebApps may configure
different
> ContextsServices.
Modified:
>
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Modified:
>
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
URL:
>
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java?rev=959590&r1=959589&r2=959590&view=diff
==============================================================================
---
>
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
> (original)
+++
>
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
> Thu Jul 1 10:45:05 2010
@@ -19,6 +19,7 @@
package
> org.apache.webbeans.context;
import
> java.lang.annotation.Annotation;
+import
> java.util.concurrent.ConcurrentHashMap;
import
> javax.enterprise.context.*;
import
> javax.enterprise.context.spi.Context;
@@ -29,6 +30,7 @@ import
> org.apache.webbeans.context.type.
import
> org.apache.webbeans.corespi.ServiceLoader;
import
> org.apache.webbeans.logger.WebBeansLogger;
import
> org.apache.webbeans.spi.ContextsService;
+import
> org.apache.webbeans.util.WebBeansUtil;
/**
* JSR-299 based
> standard context
@@ -38,7 +40,17 @@ public final class
> ContextFactory
{
/**Logger instance*/
> private static final WebBeansLogger logger =
>
WebBeansLogger.getLogger(ContextFactory.class);
-
>
+
+ /**
+ * Underlying context service per
> ClassLoader
+ * This distinction is necessary for application
> servers
+ * with multiple WAR deployments having
> different
+ * ContextsServices configured.
+
> */
+ private static ConcurrentHashMap<ClassLoader,
> ContextsService>
contextServices
+
> = new ConcurrentHashMap<ClassLoader,
> ContextsService>();
+
+
/**
*
> Not-instantiate
*/
@@ -46,12 +58,29 @@ public final
> class ContextFactory
{
throw
> new UnsupportedOperationException();
}
+
+
> /**
+ * @return the ContextService for the current
> ClassLoader
+ */
+ private static
> ContextsService getContextsService()
+ {
+
> ClassLoader cl = WebBeansUtil.getCurrentClassLoader();
+
> ContextsService cs = contextServices.get(cl);
+
> if (cs == null)
+
> {
+ cs =
> ServiceLoader.getService(ContextsService.class);
+
> contextServices.put(cl, cs);
+
> }
+
+ return
> cs;
+ }
+
> public static void initRequestContext(Object request)
> {
try
> {
- ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
> contextService.startContext(RequestScoped.class, request);
> }
catch (Exception e)
@@ -72,7
> +101,7 @@ public final class ContextFactory
> public static void destroyRequestContext(Object request)
> {
- ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService = getContextsService();
> contextService.endContext(RequestScoped.class,
> request);
}
@@ -80,7 +109,7 @@ public final class
> ContextFactory
{
try
> {
-
> ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
> contextService.startContext(SessionScoped.class, session);
> }
catch (Exception e)
@@ -91,7
> +120,7 @@ public final class ContextFactory
public static
> void destroySessionContext(Object session)
{
-
> ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService = getContextsService();
> contextService.endContext(SessionScoped.class,
> session);
}
@@ -104,7 +133,7 @@ public final class
> ContextFactory
{
try
> {
-
> ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
> contextService.startContext(ApplicationScoped.class, parameter);
> }
catch (Exception
> e)
@@ -121,7 +150,7 @@ public final class ContextFactory
> */
public static void destroyApplicationContext(Object
> parameter)
{
- ContextsService
> contextService =
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
> contextService.endContext(ApplicationScoped.class, parameter);
> }
@@ -129,7 +158,7 @@ public final class
> ContextFactory
{
try
> {
-
> ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
> contextService.startContext(Singleton.class, parameter);
> }
catch (Exception e)
@@ -140,7
> +169,7 @@ public final class ContextFactory
> public static void destroySingletonContext(Object parameter)
> {
- ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService = getContextsService();
> contextService.endContext(Singleton.class, parameter);
> }
@@ -148,7 +177,7 @@ public final class ContextFactory
> {
try
> {
- ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
> contextService.startContext(ConversationScoped.class, context);
> }
catch (Exception e)
@@
> -159,7 +188,7 @@ public final class ContextFactory
public
> static void destroyConversationContext()
{
-
> ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService = getContextsService();
> contextService.endContext(ConversationScoped.class,
> null);
}
@@ -173,7 +202,7 @@ public final class
> ContextFactory
public static Context
> getStandardContext(ContextTypes type) throws
>
ContextNotActiveException
{
> Context context = null;
- ContextsService
> contextService =
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService =
> getContextsService();
switch
> (type.getCardinal())
{
> case 0:
@@ -250,7 +279,7 @@ public final class
> ContextFactory
*/
public static void
> activateContext(Class<? extends Annotation> scopeType)
> {
- ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService = getContextsService();
> contextService.activateContext(scopeType);
> }
@@ -259,7 +288,7 @@ public final class
> ContextFactory
*/
public static void
> deActivateContext(Class<? extends Annotation> scopeType)
> {
- ContextsService contextService =
>
ServiceLoader.getService(ContextsService.class);
+
> ContextsService contextService = getContextsService();
> contextService.deActivateContext(scopeType);
> }
Re: svn commit: r959590 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Posted by Gurkan Erdogdu <gu...@yahoo.com>.
Hello Mark;
When the application is removed, you have to remove also from ContextFactory
cache othewise create a leak
--thanks;
________________________________
From: "struberg@apache.org" <st...@apache.org>
To: commits@openwebbeans.apache.org
Sent: Thu, July 1, 2010 1:45:05 PM
Subject: svn commit: r959590 -
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Author: struberg
Date: Thu Jul 1 10:45:05 2010
New Revision: 959590
URL: http://svn.apache.org/viewvc?rev=959590&view=rev
Log:
OWB-369 improve ContextsService retrieval
Getting the ContextsService each time was very expensive.
We now cache it depending on the ClassLoader. This way
it is possible that different WebApps may configure
different ContextsServices.
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java?rev=959590&r1=959589&r2=959590&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
Thu Jul 1 10:45:05 2010
@@ -19,6 +19,7 @@
package org.apache.webbeans.context;
import java.lang.annotation.Annotation;
+import java.util.concurrent.ConcurrentHashMap;
import javax.enterprise.context.*;
import javax.enterprise.context.spi.Context;
@@ -29,6 +30,7 @@ import org.apache.webbeans.context.type.
import org.apache.webbeans.corespi.ServiceLoader;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.spi.ContextsService;
+import org.apache.webbeans.util.WebBeansUtil;
/**
* JSR-299 based standard context
@@ -38,7 +40,17 @@ public final class ContextFactory
{
/**Logger instance*/
private static final WebBeansLogger logger =
WebBeansLogger.getLogger(ContextFactory.class);
-
+
+ /**
+ * Underlying context service per ClassLoader
+ * This distinction is necessary for application servers
+ * with multiple WAR deployments having different
+ * ContextsServices configured.
+ */
+ private static ConcurrentHashMap<ClassLoader, ContextsService>
contextServices
+ = new ConcurrentHashMap<ClassLoader, ContextsService>();
+
+
/**
* Not-instantiate
*/
@@ -46,12 +58,29 @@ public final class ContextFactory
{
throw new UnsupportedOperationException();
}
+
+ /**
+ * @return the ContextService for the current ClassLoader
+ */
+ private static ContextsService getContextsService()
+ {
+ ClassLoader cl = WebBeansUtil.getCurrentClassLoader();
+ ContextsService cs = contextServices.get(cl);
+ if (cs == null)
+ {
+ cs = ServiceLoader.getService(ContextsService.class);
+ contextServices.put(cl, cs);
+ }
+
+ return cs;
+ }
+
public static void initRequestContext(Object request)
{
try
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(RequestScoped.class, request);
}
catch (Exception e)
@@ -72,7 +101,7 @@ public final class ContextFactory
public static void destroyRequestContext(Object request)
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(RequestScoped.class, request);
}
@@ -80,7 +109,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(SessionScoped.class, session);
}
catch (Exception e)
@@ -91,7 +120,7 @@ public final class ContextFactory
public static void destroySessionContext(Object session)
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(SessionScoped.class, session);
}
@@ -104,7 +133,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(ApplicationScoped.class, parameter);
}
catch (Exception e)
@@ -121,7 +150,7 @@ public final class ContextFactory
*/
public static void destroyApplicationContext(Object parameter)
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(ApplicationScoped.class, parameter);
}
@@ -129,7 +158,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(Singleton.class, parameter);
}
catch (Exception e)
@@ -140,7 +169,7 @@ public final class ContextFactory
public static void destroySingletonContext(Object parameter)
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(Singleton.class, parameter);
}
@@ -148,7 +177,7 @@ public final class ContextFactory
{
try
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.startContext(ConversationScoped.class, context);
}
catch (Exception e)
@@ -159,7 +188,7 @@ public final class ContextFactory
public static void destroyConversationContext()
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.endContext(ConversationScoped.class, null);
}
@@ -173,7 +202,7 @@ public final class ContextFactory
public static Context getStandardContext(ContextTypes type) throws
ContextNotActiveException
{
Context context = null;
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
switch (type.getCardinal())
{
case 0:
@@ -250,7 +279,7 @@ public final class ContextFactory
*/
public static void activateContext(Class<? extends Annotation> scopeType)
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.activateContext(scopeType);
}
@@ -259,7 +288,7 @@ public final class ContextFactory
*/
public static void deActivateContext(Class<? extends Annotation> scopeType)
{
- ContextsService contextService =
ServiceLoader.getService(ContextsService.class);
+ ContextsService contextService = getContextsService();
contextService.deActivateContext(scopeType);
}