You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2015/04/23 11:56:24 UTC
deltaspike git commit: DELTASPIKE-879 use @Priority for
global-alternatives
Repository: deltaspike
Updated Branches:
refs/heads/master 0752f78aa -> 5a9d6262d
DELTASPIKE-879 use @Priority for global-alternatives
(in case of cdi 1.1+)
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/5a9d6262
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/5a9d6262
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/5a9d6262
Branch: refs/heads/master
Commit: 5a9d6262d3118ee482fb350f127ea59beda88783
Parents: 0752f78
Author: gpetracek <gp...@apache.org>
Authored: Thu Apr 23 11:47:52 2015 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Thu Apr 23 11:51:20 2015 +0200
----------------------------------------------------------------------
.../exclude/extension/ExcludeExtension.java | 30 +++++++++-
.../interceptor/GlobalInterceptorExtension.java | 19 +------
.../core/impl/util/AnnotationInstanceUtils.java | 60 ++++++++++++++++++++
3 files changed, 91 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5a9d6262/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 d819f13..3aa3ede 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
@@ -19,7 +19,9 @@
package org.apache.deltaspike.core.impl.exclude.extension;
import org.apache.deltaspike.core.api.config.ConfigResolver;
+import org.apache.deltaspike.core.api.config.base.CoreBaseConfig;
import org.apache.deltaspike.core.api.exclude.Exclude;
+import org.apache.deltaspike.core.impl.util.AnnotationInstanceUtils;
import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder;
import org.apache.deltaspike.core.impl.exclude.CustomProjectStageBeanFilter;
import org.apache.deltaspike.core.impl.exclude.GlobalAlternative;
@@ -77,6 +79,7 @@ public class ExcludeExtension implements Extension, Deactivatable
* VALUE=Implementation class name
*/
private Map<String, String> globalAlternatives = new HashMap<String, String>();
+ private Annotation priorityAnnotationInstance;
@SuppressWarnings("UnusedDeclaration")
@@ -112,6 +115,12 @@ public class ExcludeExtension implements Extension, Deactivatable
{
isGlobalAlternativeActivated = false;
}
+
+ if (isGlobalAlternativeActivated)
+ {
+ int priorityValue = CoreBaseConfig.Interceptor.PRIORITY.getValue();
+ priorityAnnotationInstance = AnnotationInstanceUtils.getPriorityAnnotationInstance(priorityValue);
+ }
}
}
@@ -272,10 +281,16 @@ public class ExcludeExtension implements Extension, Deactivatable
continue;
}
+ if (!doQualifiersMatch(qualifiersOfCurrentBean, qualifiersOfConfiguredBean))
+ {
+ continue;
+ }
+
//current bean is annotated with @Alternative and of the same type as the configured bean
if (isAlternativeBeanImplementation && alternativeBeanClass.equals(currentBean))
{
- if (doQualifiersMatch(qualifiersOfCurrentBean, qualifiersOfConfiguredBean))
+ //cdi 1.0
+ if (priorityAnnotationInstance == null)
{
AnnotatedTypeBuilder<Object> annotatedTypeBuilder
= new AnnotatedTypeBuilder<Object>().readFromType(processAnnotatedType.getAnnotatedType());
@@ -284,10 +299,21 @@ public class ExcludeExtension implements Extension, Deactivatable
processAnnotatedType.setAnnotatedType(annotatedTypeBuilder.create());
return;
}
+ //cdi 1.1+
+ else
+ {
+ AnnotatedTypeBuilder<Object> annotatedTypeBuilder
+ = new AnnotatedTypeBuilder<Object>().readFromType(processAnnotatedType.getAnnotatedType());
+
+ annotatedTypeBuilder.addToClass(priorityAnnotationInstance);
+ processAnnotatedType.setAnnotatedType(annotatedTypeBuilder.create());
+ return;
+ }
}
else //current bean is the original implementation
{
- if (doQualifiersMatch(qualifiersOfCurrentBean, qualifiersOfConfiguredBean))
+ //cdi 1.0 (no change needed with cdi 1.1+)
+ if (priorityAnnotationInstance == null)
{
//veto this original implementation because the alternative will be added
processAnnotatedType.veto();
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5a9d6262/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/interceptor/GlobalInterceptorExtension.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/interceptor/GlobalInterceptorExtension.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/interceptor/GlobalInterceptorExtension.java
index ddf1cf0..7531e49 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/interceptor/GlobalInterceptorExtension.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/interceptor/GlobalInterceptorExtension.java
@@ -19,10 +19,9 @@
package org.apache.deltaspike.core.impl.interceptor;
import org.apache.deltaspike.core.api.config.base.CoreBaseConfig;
+import org.apache.deltaspike.core.impl.util.AnnotationInstanceUtils;
import org.apache.deltaspike.core.spi.activation.Deactivatable;
import org.apache.deltaspike.core.util.ClassDeactivationUtils;
-import org.apache.deltaspike.core.util.ClassUtils;
-import org.apache.deltaspike.core.util.metadata.AnnotationInstanceProvider;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.BeanManager;
@@ -31,8 +30,6 @@ import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.interceptor.Interceptor;
import java.lang.annotation.Annotation;
-import java.util.HashMap;
-import java.util.Map;
import java.util.logging.Logger;
//promotes deltaspike interceptors to global interceptors in case of cdi 1.1+
@@ -50,18 +47,8 @@ public class GlobalInterceptorExtension implements Deactivatable, Extension
return;
}
- Class<? extends Annotation> priorityAnnotationClass =
- ClassUtils.tryToLoadClassForName("javax.annotation.Priority");
-
- //check for @Priority and CDI v1.1+
- if (priorityAnnotationClass != null &&
- ClassUtils.tryToLoadClassForName("javax.enterprise.inject.spi.AfterTypeDiscovery") != null)
- {
- Map<String, Object> defaultValueMap = new HashMap<String, Object>();
- int priorityValue = CoreBaseConfig.Interceptor.PRIORITY.getValue();
- defaultValueMap.put("value", priorityValue);
- priorityAnnotationInstance = AnnotationInstanceProvider.of(priorityAnnotationClass, defaultValueMap);
- }
+ int priorityValue = CoreBaseConfig.Interceptor.PRIORITY.getValue();
+ priorityAnnotationInstance = AnnotationInstanceUtils.getPriorityAnnotationInstance(priorityValue);
}
protected void promoteInterceptors(@Observes ProcessAnnotatedType pat, BeanManager beanManager)
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5a9d6262/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/util/AnnotationInstanceUtils.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/util/AnnotationInstanceUtils.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/util/AnnotationInstanceUtils.java
new file mode 100644
index 0000000..9c19215
--- /dev/null
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/util/AnnotationInstanceUtils.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.deltaspike.core.impl.util;
+
+import org.apache.deltaspike.core.util.ClassUtils;
+import org.apache.deltaspike.core.util.metadata.AnnotationInstanceProvider;
+
+import javax.enterprise.inject.Typed;
+import java.lang.annotation.Annotation;
+import java.util.HashMap;
+import java.util.Map;
+
+@Typed()
+public abstract class AnnotationInstanceUtils
+{
+ private AnnotationInstanceUtils()
+ {
+ // prevent instantiation
+ }
+
+ /**
+ * @return a new instance of {@link javax.annotation.Priority} with the given value
+ * if the annotation-class is available in a cdi 1.1+ based environment, null otherwise
+ */
+ public static Annotation getPriorityAnnotationInstance(int priorityValue)
+ {
+ Annotation priorityAnnotationInstance = null;
+
+ Class<? extends Annotation> priorityAnnotationClass =
+ ClassUtils.tryToLoadClassForName("javax.annotation.Priority");
+
+ //check for @Priority and CDI v1.1+
+ if (priorityAnnotationClass != null &&
+ ClassUtils.tryToLoadClassForName("javax.enterprise.inject.spi.AfterTypeDiscovery") != null)
+ {
+ Map<String, Object> defaultValueMap = new HashMap<String, Object>();
+ defaultValueMap.put("value", priorityValue);
+ priorityAnnotationInstance = AnnotationInstanceProvider.of(priorityAnnotationClass, defaultValueMap);
+ }
+
+ return priorityAnnotationInstance;
+ }
+}