You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by st...@apache.org on 2013/05/22 17:09:43 UTC
git commit: DELTASPIKE-208 explicitely enable global alternatives
Updated Branches:
refs/heads/master fc063b934 -> e56f26140
DELTASPIKE-208 explicitely enable global alternatives
This now works on Weld, OWB with BDA enabled, etc
Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/e56f2614
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/e56f2614
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/e56f2614
Branch: refs/heads/master
Commit: e56f26140787fbe76b3c155c0248558287370e2c
Parents: fc063b9
Author: Mark Struberg <st...@apache.org>
Authored: Wed May 22 17:01:50 2013 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Wed May 22 17:01:50 2013 +0200
----------------------------------------------------------------------
.../impl/exclude/extension/ExcludeExtension.java | 73 ++++++++------
.../META-INF/apache-deltaspike.properties | 6 +-
2 files changed, 45 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/e56f2614/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/extension/ExcludeExtension.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/extension/ExcludeExtension.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/extension/ExcludeExtension.java
index 88a5972..22dd33c 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/extension/ExcludeExtension.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exclude/extension/ExcludeExtension.java
@@ -44,8 +44,10 @@ import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
@@ -60,27 +62,56 @@ import java.util.logging.Logger;
*/
public class ExcludeExtension implements Extension, Deactivatable
{
- private static final Logger LOG = Logger.getLogger(ExcludeExtension.class.getName());
+ private static final String GLOBAL_ALTERNATIVES = "globalAlternatives.";
- private static Boolean isWeld1Detected = false;
+ private static final Logger LOG = Logger.getLogger(ExcludeExtension.class.getName());
private boolean isActivated = true;
private boolean isGlobalAlternativeActivated = true;
private boolean isCustomProjectStageBeanFilterActivated = true;
+ /**
+ * Contains the globalAlternatives which should get used
+ * KEY=Interface class name
+ * VALUE=Implementation class name
+ */
+ private Map<String, String> globalAlternatives = new HashMap<String, String>();
+
+
@SuppressWarnings("UnusedDeclaration")
protected void init(@Observes BeforeBeanDiscovery beforeBeanDiscovery, BeanManager beanManager)
{
isActivated =
ClassDeactivationUtils.isActivated(getClass());
- isGlobalAlternativeActivated =
- ClassDeactivationUtils.isActivated(GlobalAlternative.class);
-
isCustomProjectStageBeanFilterActivated =
ClassDeactivationUtils.isActivated(CustomProjectStageBeanFilter.class);
- isWeld1Detected = isWeld1(beanManager);
+ isGlobalAlternativeActivated =
+ ClassDeactivationUtils.isActivated(GlobalAlternative.class);
+ if (isGlobalAlternativeActivated)
+ {
+ Map<String, String> allProperties = ConfigResolver.getAllProperties();
+ for (Map.Entry<String, String> property : allProperties.entrySet())
+ {
+ if (property.getKey().startsWith(GLOBAL_ALTERNATIVES))
+ {
+ String interfaceName = property.getKey().substring(GLOBAL_ALTERNATIVES.length());
+ String implementation = property.getValue();
+ if (LOG.isLoggable(Level.FINE))
+ {
+ LOG.fine("Enabling global alternative for interface " + interfaceName + ": " + implementation);
+ }
+
+ globalAlternatives.put(interfaceName, implementation);
+ }
+ }
+
+ if (globalAlternatives.isEmpty())
+ {
+ isGlobalAlternativeActivated = false;
+ }
+ }
}
/**
@@ -101,9 +132,9 @@ public class ExcludeExtension implements Extension, Deactivatable
protected void vetoBeans(@Observes ProcessAnnotatedType processAnnotatedType, BeanManager beanManager)
{
//we need to do it before the exclude logic to keep the @Exclude support for global alternatives
- if (isGlobalAlternativeActivated && isWeld1Detected)
+ if (isGlobalAlternativeActivated)
{
- activateGlobalAlternativesWeld1(processAnnotatedType, beanManager);
+ activateGlobalAlternatives(processAnnotatedType, beanManager);
}
if (isCustomProjectStageBeanFilterActivated)
@@ -158,8 +189,8 @@ public class ExcludeExtension implements Extension, Deactivatable
- private void activateGlobalAlternativesWeld1(ProcessAnnotatedType processAnnotatedType,
- BeanManager beanManager)
+ private void activateGlobalAlternatives(ProcessAnnotatedType processAnnotatedType,
+ BeanManager beanManager)
{
Class<Object> currentBean = processAnnotatedType.getAnnotatedType().getJavaClass();
@@ -184,7 +215,7 @@ public class ExcludeExtension implements Extension, Deactivatable
{
alternativeBeanAnnotations = new HashSet<Annotation>();
- configuredBeanName = ConfigResolver.getPropertyValue(currentType.getName());
+ configuredBeanName = globalAlternatives.get(currentType.getName());
if (configuredBeanName != null && configuredBeanName.length() > 0)
{
alternativeBeanClass = ClassUtils.tryToLoadClassForName(configuredBeanName);
@@ -442,26 +473,6 @@ public class ExcludeExtension implements Extension, Deactivatable
processAnnotatedType.getAnnotatedType().getJavaClass());
}
- private boolean isWeld1(BeanManager beanManager)
- {
- if (beanManager.getClass().getName().startsWith("org.apache"))
- {
- return false;
- }
-
- if (beanManager.getClass().getName().startsWith("org.jboss.weld"))
- {
- String version = getJarVersion(beanManager.getClass());
-
- if (version != null && version.startsWith("1."))
- {
- return true;
- }
- }
-
- return false;
- }
-
private static String getJarVersion(Class targetClass)
{
String manifestFileLocation = getManifestFileLocationOfClass(targetClass);
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/e56f2614/deltaspike/core/impl/src/test/resources/META-INF/apache-deltaspike.properties
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/resources/META-INF/apache-deltaspike.properties b/deltaspike/core/impl/src/test/resources/META-INF/apache-deltaspike.properties
index b935ffc..ba29086 100644
--- a/deltaspike/core/impl/src/test/resources/META-INF/apache-deltaspike.properties
+++ b/deltaspike/core/impl/src/test/resources/META-INF/apache-deltaspike.properties
@@ -20,10 +20,10 @@ org.apache.deltaspike.core.spi.activation.ClassDeactivator=org.apache.deltaspike
testProperty02=test_value_02
db=prodDB
-org.apache.deltaspike.test.core.api.alternative.global.BaseBean1=org.apache.deltaspike.test.core.api.alternative.global.SubBaseBean2
-org.apache.deltaspike.test.core.api.alternative.global.BaseInterface1=org.apache.deltaspike.test.core.api.alternative.global.BaseInterface1AlternativeImplementation
+globalAlternatives.org.apache.deltaspike.test.core.api.alternative.global.BaseBean1=org.apache.deltaspike.test.core.api.alternative.global.SubBaseBean2
+globalAlternatives.org.apache.deltaspike.test.core.api.alternative.global.BaseInterface1=org.apache.deltaspike.test.core.api.alternative.global.BaseInterface1AlternativeImplementation
-org.apache.deltaspike.test.core.api.alternative.global.qualifier.BaseInterface=org.apache.deltaspike.test.core.api.alternative.global.qualifier.AlternativeBaseBeanB
+globalAlternatives.org.apache.deltaspike.test.core.api.alternative.global.qualifier.BaseInterface=org.apache.deltaspike.test.core.api.alternative.global.qualifier.AlternativeBaseBeanB
configProperty1=14
configProperty2=7