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 2017/12/06 12:12:04 UTC
svn commit: r1817292 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/inject/
main/java/org/apache/webbeans/portable/events/discovery/
main/java/org/apache/webbeans/util/ main/java/org/apache/webbeans/xml/
test/java/org/apache/...
Author: struberg
Date: Wed Dec 6 12:12:03 2017
New Revision: 1817292
URL: http://svn.apache.org/viewvc?rev=1817292&view=rev
Log:
OWB-1219 take Prioritized custom beans into consideration
even if a @Alternative @Priority bean exists.
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomPrioritizedBeanTest.java
- copied, changed from r1817291, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomBeanTest.java
Removed:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomBeanTest.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/PriorityClasses.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java?rev=1817292&r1=1817291&r2=1817292&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java Wed Dec 6 12:12:03 2017
@@ -26,6 +26,7 @@ import java.util.Set;
import javax.annotation.Priority;
import javax.enterprise.inject.Alternative;
import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Prioritized;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.exception.WebBeansConfigurationException;
@@ -123,6 +124,23 @@ public class AlternativesManager
}
/**
+ * This method is used to add Alternative Beans which implement the {@link Prioritized} interface
+ * This is performed after the Bean get's added.
+ */
+ public void addPrioritizedAlternativeBean(Bean<?> prioritizedBean)
+ {
+ if (prioritizedBean instanceof Prioritized)
+ {
+ priorityAlternatives.add(prioritizedBean.getBeanClass(), ((Prioritized) prioritizedBean).getPriority());
+ }
+ else
+ {
+ throw new WebBeansConfigurationException("Given Bean : " + prioritizedBean + " doesn't implement " +
+ Prioritized.class.getName());
+ }
+ }
+
+ /**
* Alternatives get ordered by their priority and as lowest priority all
* the alternatives added via XML get added.
* @return the list of sorted alternatives
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=1817292&r1=1817291&r2=1817292&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java Wed Dec 6 12:12:03 2017
@@ -195,6 +195,11 @@ public class AfterBeanDiscoveryImpl exte
}
else
{
+ if (bean.isAlternative() && bean instanceof Prioritized)
+ {
+ webBeansContext.getAlternativesManager().addPrioritizedAlternativeBean(bean);
+ }
+
beanManager.addBean(bean);
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/PriorityClasses.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/PriorityClasses.java?rev=1817292&r1=1817291&r2=1817292&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/PriorityClasses.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/PriorityClasses.java Wed Dec 6 12:12:03 2017
@@ -34,12 +34,25 @@ public class PriorityClasses
private final List<PriorityClass> raw = new ArrayList<>();
private List<Class<?>> sorted;
+ /**
+ * Used for Classes which are annotated with @Priority
+ */
public void add(Class<?> clazz, Priority priority)
{
raw.add(new PriorityClass(clazz, priority.value()));
sorted = null;
}
+ /**
+ * Used for Classes which are added by Beans which implement the
+ * {@link javax.enterprise.inject.spi.Prioritized} interface
+ */
+ public void add(Class<?> clazz, int priority)
+ {
+ raw.add(new PriorityClass(clazz, priority));
+ sorted = null;
+ }
+
public List<Class<?>> getSorted()
{
if (sorted == null)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java?rev=1817292&r1=1817291&r2=1817292&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java Wed Dec 6 12:12:03 2017
@@ -84,7 +84,7 @@ public class DefaultBeanArchiveService i
{
// we have to 'normalise' both values and remove the beans.xml string to be compareable
String entryUrl = stripProtocol(entry.getKey());
- if (entryUrl.length() > META_INF_BEANS_XML.length() &&
+ if (entryUrl.length( ) > META_INF_BEANS_XML.length() &&
entryUrl.substring(entryUrl.length() - META_INF_BEANS_XML.length()).equalsIgnoreCase(META_INF_BEANS_XML))
{
entryUrl = entryUrl.substring(0, entryUrl.length() - META_INF_BEANS_XML.length());
Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomPrioritizedBeanTest.java (from r1817291, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomBeanTest.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomPrioritizedBeanTest.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomPrioritizedBeanTest.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomBeanTest.java&r1=1817291&r2=1817292&rev=1817292&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomBeanTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/CustomPrioritizedBeanTest.java Wed Dec 6 12:12:03 2017
@@ -18,110 +18,94 @@
*/
package org.apache.webbeans.test.portable;
+import javax.annotation.Priority;
+import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Alternative;
+import javax.enterprise.inject.Default;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.InjectionPoint;
-import javax.sql.DataSource;
-import java.io.PrintWriter;
+import javax.enterprise.inject.spi.Prioritized;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
-import java.util.logging.Logger;
+
+import org.apache.webbeans.test.AbstractUnitTest;
+import org.junit.Assert;
+import org.junit.Test;
+
/**
- * Test that custom Bean<T> impls work
+ * Test that custom Prioritized Beans work in conjunction with @Priority.
+ * See OWB-1219.
*/
-public class CustomBeanTest
+public class CustomPrioritizedBeanTest extends AbstractUnitTest
{
+ @Test
+ public void testCustomPrioritizedBeanInAbdTest()
+ {
+ addExtension(new CustomBeanAbdExtension());
+
+ startContainer(MySampleClass.class, MySampleAltrnativeClass.class);
+
+ MySampleInterface instance = getInstance(MySampleInterface.class);
+ Assert.assertEquals(MySampleAlternativeBean.class.getSimpleName(), instance.impl());
+ }
- public static class CustomBeanExtension implements Extension
+ public static class CustomBeanAbdExtension implements Extension
{
- public void addBean(@Observes AfterBeanDiscovery abd, BeanManager beanManager)
+ public void addBean(@Observes AfterBeanDiscovery abd)
{
-
+ abd.addBean(new MySampleAlternativeBean());
}
}
- public static class MyBean implements Bean<DataSource>
+ public interface MySampleInterface
+ {
+ String impl();
+ }
+
+ @RequestScoped
+ public static class MySampleClass implements MySampleInterface
{
@Override
- public DataSource create(CreationalContext<DataSource> context)
+ public String impl()
{
- return new DataSource()
- {
- @Override
- public Connection getConnection() throws SQLException
- {
- return null;
- }
-
- @Override
- public Connection getConnection(String username, String password) throws SQLException
- {
- return null;
- }
-
- @Override
- public PrintWriter getLogWriter() throws SQLException
- {
- return null;
- }
-
- @Override
- public void setLogWriter(PrintWriter out) throws SQLException
- {
-
- }
-
- @Override
- public void setLoginTimeout(int seconds) throws SQLException
- {
-
- }
-
- @Override
- public int getLoginTimeout() throws SQLException
- {
- return 0;
- }
-
- public Logger getParentLogger() throws SQLFeatureNotSupportedException
- {
- return null;
- }
-
- @Override
- public <T> T unwrap(Class<T> iface) throws SQLException
- {
- return null;
- }
+ return this.getClass().getSimpleName();
+ }
+ }
- @Override
- public boolean isWrapperFor(Class<?> iface) throws SQLException
- {
- return false;
- }
- };
+ @Alternative
+ @Priority(1000)
+ @RequestScoped
+ public static class MySampleAltrnativeClass implements MySampleInterface
+ {
+ @Override
+ public String impl()
+ {
+ return this.getClass().getSimpleName();
}
+ }
+ public static class MySampleAlternativeBean implements Bean<MySampleInterface>, Prioritized
+ {
@Override
public Set<InjectionPoint> getInjectionPoints()
{
- return null;
+ return Collections.emptySet();
}
@Override
public Class<?> getBeanClass()
{
- return null;
+ return MySampleInterface.class;
}
@Override
@@ -131,21 +115,40 @@ public class CustomBeanTest
}
@Override
+ public MySampleInterface create(CreationalContext<MySampleInterface> context)
+ {
+ return new MySampleInterface()
+ {
+ @Override
+ public String impl()
+ {
+ return MySampleAlternativeBean.class.getSimpleName();
+ }
+ };
+ }
+
+ @Override
+ public void destroy(MySampleInterface instance, CreationalContext<MySampleInterface> context)
+ {
+ // no-op
+ }
+
+ @Override
public Set<Type> getTypes()
{
- return null;
+ return new HashSet<>(Arrays.asList(Object.class, MySampleInterface.class));
}
@Override
public Set<Annotation> getQualifiers()
{
- return null;
+ return Collections.singleton(Default.Literal.INSTANCE);
}
@Override
public Class<? extends Annotation> getScope()
{
- return null;
+ return RequestScoped.class;
}
@Override
@@ -157,19 +160,21 @@ public class CustomBeanTest
@Override
public Set<Class<? extends Annotation>> getStereotypes()
{
- return null;
+ return Collections.emptySet();
}
@Override
public boolean isAlternative()
{
- return false;
+ return true;
}
@Override
- public void destroy(DataSource instance, CreationalContext<DataSource> context)
+ public int getPriority()
{
-
+ return 2000;
}
}
+
+
}