You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2019/03/18 07:54:03 UTC
svn commit: r1855733 -
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
Author: rmannibucau
Date: Mon Mar 18 07:54:03 2019
New Revision: 1855733
URL: http://svn.apache.org/viewvc?rev=1855733&view=rev
Log:
OWB-1282 reduce reflection usage in WebBeansContext
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java?rev=1855733&r1=1855732&r2=1855733&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java Mon Mar 18 07:54:03 2019
@@ -36,6 +36,11 @@ import org.apache.webbeans.container.Bea
import org.apache.webbeans.container.SerializableBeanVault;
import org.apache.webbeans.context.creational.CreationalContextFactory;
import org.apache.webbeans.conversation.ConversationManager;
+import org.apache.webbeans.conversation.DefaultConversationService;
+import org.apache.webbeans.corespi.se.DefaultApplicationBoundaryService;
+import org.apache.webbeans.corespi.se.DefaultContextsService;
+import org.apache.webbeans.corespi.se.DefaultJndiService;
+import org.apache.webbeans.corespi.security.SimpleSecurityService;
import org.apache.webbeans.decorator.DecoratorsManager;
import org.apache.webbeans.deployment.StereoTypeManager;
import org.apache.webbeans.event.NotificationManager;
@@ -63,6 +68,7 @@ import org.apache.webbeans.spi.SecurityS
import org.apache.webbeans.spi.plugins.OpenWebBeansPlugin;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
+import org.apache.webbeans.xml.DefaultBeanArchiveService;
/**
* This is the central point to manage the whole CDI container
@@ -128,7 +134,7 @@ public class WebBeansContext
if (initialServices == null || !initialServices.containsKey(LoaderService.class))
{
String implementationLoaderServiceName =
- openWebBeansConfiguration.getProperty(LoaderService.class.getName());
+ this.openWebBeansConfiguration.getProperty(LoaderService.class.getName());
if (implementationLoaderServiceName == null)
{
serviceMap.put(LoaderService.class, new DefaultLoaderService());
@@ -163,28 +169,6 @@ public class WebBeansContext
notificationManager = new NotificationManager(this);
- // Allow the WebBeansContext itself to be looked up
- managerMap.put(getClass(), this);
-
- // Add them all into the map for backwards compatibility
- managerMap.put(AlternativesManager.class, alternativesManager);
- managerMap.put(AnnotatedElementFactory.class, annotatedElementFactory);
- managerMap.put(BeanManagerImpl.class, beanManagerImpl);
- managerMap.put(ConversationManager.class, conversationManager);
- managerMap.put(CreationalContextFactory.class, creationalContextFactory);
- managerMap.put(DecoratorsManager.class, decoratorsManager);
- managerMap.put(ExtensionLoader.class, extensionLoader);
- managerMap.put(InterceptorsManager.class, interceptorsManager);
- managerMap.put(InterceptorDecoratorProxyFactory.class, interceptorDecoratorProxyFactory);
- managerMap.put(NormalScopeProxyFactory.class, normalScopeProxyFactory);
- managerMap.put(SubclassProxyFactory.class, subclassProxyFactory);
- managerMap.put(OpenWebBeansConfiguration.class, openWebBeansConfiguration);
- managerMap.put(PluginLoader.class, pluginLoader);
- managerMap.put(SerializableBeanVault.class, serializableBeanVault);
- managerMap.put(StereoTypeManager.class, stereoTypeManager);
- managerMap.put(InterceptorResolutionService.class, interceptorResolutionService);
- managerMap.put(NotificationManager.class, notificationManager);
-
beanManagerImpl.getInjectionResolver().setFastMatching(!"false".equalsIgnoreCase(getOpenWebBeansConfiguration()
.getProperty(OpenWebBeansConfiguration.FAST_MATCHING)));
}
@@ -419,17 +403,132 @@ public class WebBeansContext
/* No singleton for this application, create one */
if (object == null)
{
- object = createInstance(clazz);
+ object = backwardCompatibilityLookup(clazz);
+ if (object == null)
+ {
+ object = createInstance(clazz);
+ }
- //Save it
+ // Save it for future usages
managerMap.put(clazz, object);
}
return object;
}
+ private <T> T backwardCompatibilityLookup(final Class<T> clazz)
+ {
+ if (clazz.isInstance(this)) // Allow the WebBeansContext itself to be looked up
+ {
+ return clazz.cast(this);
+ }
+
+ // Add them all into the map for backwards compatibility
+
+ if (clazz == AlternativesManager.class)
+ {
+ return clazz.cast(alternativesManager);
+ }
+ if (clazz == AnnotatedElementFactory.class)
+ {
+ return clazz.cast(annotatedElementFactory);
+ }
+ if (clazz == BeanManagerImpl.class)
+ {
+ return clazz.cast(beanManagerImpl);
+ }
+ if (clazz == ConversationManager.class)
+ {
+ return clazz.cast(conversationManager);
+ }
+ if (clazz == CreationalContextFactory.class)
+ {
+ return clazz.cast(creationalContextFactory);
+ }
+ if (clazz == DecoratorsManager.class)
+ {
+ return clazz.cast(decoratorsManager);
+ }
+ if (clazz == ExtensionLoader.class)
+ {
+ return clazz.cast(extensionLoader);
+ }
+ if (clazz == InterceptorsManager.class)
+ {
+ return clazz.cast(interceptorsManager);
+ }
+ if (clazz == InterceptorDecoratorProxyFactory.class)
+ {
+ return clazz.cast(interceptorDecoratorProxyFactory);
+ }
+ if (clazz == NormalScopeProxyFactory.class)
+ {
+ return clazz.cast(normalScopeProxyFactory);
+ }
+ if (clazz == SubclassProxyFactory.class)
+ {
+ return clazz.cast(subclassProxyFactory);
+ }
+ if (clazz == OpenWebBeansConfiguration.class)
+ {
+ return clazz.cast(openWebBeansConfiguration);
+ }
+ if (clazz == PluginLoader.class)
+ {
+ return clazz.cast(pluginLoader);
+ }
+ if (clazz == SerializableBeanVault.class)
+ {
+ return clazz.cast(serializableBeanVault);
+ }
+ if (clazz == StereoTypeManager.class)
+ {
+ return clazz.cast(stereoTypeManager);
+ }
+ if (clazz == InterceptorResolutionService.class)
+ {
+ return clazz.cast(interceptorResolutionService);
+ }
+ if (clazz == NotificationManager.class)
+ {
+ return clazz.cast(notificationManager);
+ }
+ return null;
+ }
+
private <T> T createInstance(Class<T> clazz)
{
+ // skip the reflection for know classes
+ if (DefaultLoaderService.class == clazz)
+ {
+ return clazz.cast(new DefaultLoaderService());
+ }
+ if (SimpleSecurityService.class == clazz)
+ {
+ return clazz.cast(new SimpleSecurityService());
+ }
+ if (DefaultApplicationBoundaryService.class == clazz)
+ {
+ return clazz.cast(new DefaultApplicationBoundaryService());
+ }
+ if (DefaultBeanArchiveService.class == clazz)
+ {
+ return clazz.cast(new DefaultBeanArchiveService());
+ }
+ if (DefaultJndiService.class == clazz)
+ {
+ return clazz.cast(new DefaultJndiService());
+ }
+ if (DefaultContextsService.class == clazz)
+ {
+ return clazz.cast(new DefaultContextsService(this));
+ }
+ if (DefaultConversationService.class == clazz)
+ {
+ return clazz.cast(new DefaultConversationService());
+ }
+
+ // try by reflection for extensions
try
{