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 2013/01/18 00:06:46 UTC
svn commit: r1434949 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/component/
main/java/org/apache/webbeans/intercept/
test/java/org/apache/webbeans/newtests/decorators/common/
test/java/org/apache/webbeans/newtests/decorato...
Author: struberg
Date: Thu Jan 17 23:06:45 2013
New Revision: 1434949
URL: http://svn.apache.org/viewvc?rev=1434949&view=rev
Log:
OWB-344 prepare for new DecoratorBean and Decorator resolution
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/DecoratorBean.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Breeded.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Animal.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Cow.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/DecoratorBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/DecoratorBean.java?rev=1434949&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/DecoratorBean.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/DecoratorBean.java Thu Jan 17 23:06:45 2013
@@ -0,0 +1,57 @@
+/*
+ * 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.webbeans.component;
+
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Decorator;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
+import org.apache.webbeans.config.WebBeansContext;
+
+/**
+ * Decorator Bean implementation.
+ */
+public class DecoratorBean<T> extends InjectionTargetBean<T> implements Decorator<T>
+{
+ public DecoratorBean(WebBeansContext webBeansContext, WebBeansType webBeansType, AnnotatedType<T> annotatedType, Set<Type> types,
+ Set<Annotation> qualifiers, Class<? extends Annotation> scope, Class<T> beanClass, Set<Class<? extends Annotation>> stereotypes)
+ {
+ super(webBeansContext, webBeansType, annotatedType, types, qualifiers, scope, beanClass, stereotypes);
+ }
+
+ @Override
+ public Set<Type> getDecoratedTypes()
+ {
+ return null; //X TODO
+ }
+
+ @Override
+ public Type getDelegateType()
+ {
+ return null; //X TODO
+ }
+
+ @Override
+ public Set<Annotation> getDelegateQualifiers()
+ {
+ return null; //X TODO
+ }
+}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Thu Jan 17 23:06:45 2013
@@ -63,7 +63,7 @@ public abstract class InjectionTargetBea
/**
* Decorators
- * @deprecated will be replaced by InterceptorResolution logic
+ * @deprecated will be replaced by InterceptorResolution logic and moved to InjectionTargetImpl
*/
protected List<Decorator<?>> decorators = new ArrayList<Decorator<?>>();
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java Thu Jan 17 23:06:45 2013
@@ -85,7 +85,10 @@ public class ManagedBean<T> extends Inje
{
this.constructor = constructor;
}
-
+
+ /**
+ * TODO this must be performed at bean-build time!
+ */
public boolean isPassivationCapable()
{
if (isPassivationCapable != null)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandlerPleaseRemove.java Thu Jan 17 23:06:45 2013
@@ -58,10 +58,10 @@ import org.apache.webbeans.util.ClassUti
* class via methods <code>defineManagedBean(class)</code> and Those methods further call
* <code>defineInterceptor(interceptor class)</code> and <code>defineDecorator(decorator class)</code>
* methods. Those methods finally call
- * {@link org.apache.webbeans.util.WebBeansUtil#defineInterceptor(org.apache.webbeans.component.creation.ManagedBeanCreatorImpl,
- * javax.enterprise.inject.spi.ProcessInjectionTarget)} and
- * {@link org.apache.webbeans.util.WebBeansUtil#defineDecorator(org.apache.webbeans.component.creation.ManagedBeanCreatorImpl,
- * javax.enterprise.inject.spi.ProcessInjectionTarget)}
+ * OLD: org.apache.webbeans.util.WebBeansUtil#defineInterceptor(org.apache.webbeans.component.creation.ManagedBeanBuilder,
+ * javax.enterprise.inject.spi.ProcessInjectionTarget) and
+ * OLD: org.apache.webbeans.util.WebBeansUtil#defineDecorator(org.apache.webbeans.component.creation.ManagedBeanBuilder,
+ * javax.enterprise.inject.spi.ProcessInjectionTarget)
* methods for actual configuration.
* <p>
* Let's look at the "WebBeansUtil's" methods;
@@ -164,7 +164,6 @@ public abstract class InterceptorHandler
{
this.bean = bean;
webBeansContext = bean.getWebBeansContext();
-// new Exception().fillInStackTrace().printStackTrace();
}
/**
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java Thu Jan 17 23:06:45 2013
@@ -37,6 +37,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -290,23 +291,28 @@ public class InterceptorResolutionServic
return;
}
- List<Decorator<?>> appliedDecorators = new ArrayList<Decorator<?>>();
+ LinkedHashMap<Decorator<?>, Method> appliedDecorators = new LinkedHashMap<Decorator<?>, Method>();
for (Decorator decorator : decorators)
{
- if (isDecoratorInterceptsMethod(decorator, annotatedMethod))
+ Method decoratingMethod = getDecoratingMethod(decorator, annotatedMethod);
+ if (decoratingMethod != null)
{
- appliedDecorators.add(decorator);
+ appliedDecorators.put(decorator, decoratingMethod);
}
}
if (appliedDecorators.size() > 0)
{
- methodInterceptorInfo.setMethodDecorators(new ArrayList<Decorator<?>>(appliedDecorators));
+ methodInterceptorInfo.setMethodDecorators(appliedDecorators);
}
}
- private boolean isDecoratorInterceptsMethod(Decorator decorator, AnnotatedMethod annotatedMethod)
+ /**
+ * @return the Method from the decorator which decorates the annotatedMethod, <code>null</code>
+ * if the given Decorator does <i>not</i> decorate the annotatedMethod
+ */
+ private Method getDecoratingMethod(Decorator decorator, AnnotatedMethod annotatedMethod)
{
String annotatedMethodName = annotatedMethod.getJavaMember().getName();
@@ -346,7 +352,7 @@ public class InterceptorResolutionServic
if (paramsMatch)
{
// yikes our method is decorated by this very decorator type.
- return true;
+ return decoratorMethod;
}
}
}
@@ -354,8 +360,7 @@ public class InterceptorResolutionServic
}
}
- return false;
-
+ return null;
}
private void calculateCdiMethodInterceptors(BusinessMethodInterceptorInfo methodInterceptorInfo,
@@ -563,7 +568,7 @@ public class InterceptorResolutionServic
{
private Interceptor<?>[] ejbInterceptors = null;
private Interceptor<?>[] cdiInterceptors = null;
- private Decorator<?>[] methodDecorators = null;
+ private LinkedHashMap<Decorator<?>, Method> methodDecorators = null;
/**
* lifecycle methods can serve multiple intercepton types :/
@@ -603,8 +608,11 @@ public class InterceptorResolutionServic
/**
* The (sorted) Decorator Beans for a specific method or <code>null</code>
* if no Decorator exists for this method.
+ * This Map is sorted!
+ * Key: the Decorator Bean
+ * Value: the decorating method from the decorator instance
*/
- public Decorator<?>[] getMethodDecorators()
+ public LinkedHashMap<Decorator<?>, Method> getMethodDecorators()
{
return methodDecorators;
}
@@ -621,7 +629,7 @@ public class InterceptorResolutionServic
}
}
- public void setMethodDecorators(List<Decorator<?>> methodDecorators)
+ public void setMethodDecorators(LinkedHashMap<Decorator<?>, Method> methodDecorators)
{
if (methodDecorators == null || methodDecorators.isEmpty())
{
@@ -629,7 +637,7 @@ public class InterceptorResolutionServic
}
else
{
- this.methodDecorators = methodDecorators.toArray(new Decorator[methodDecorators.size()]);
+ this.methodDecorators = methodDecorators;
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java Thu Jan 17 23:06:45 2013
@@ -30,6 +30,7 @@ import org.apache.webbeans.proxy.Interce
import org.apache.webbeans.util.AnnotationUtil;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.InterceptionType;
import javax.enterprise.inject.spi.Interceptor;
import javax.interceptor.AroundInvoke;
@@ -39,6 +40,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -47,15 +49,12 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import static org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptorInfo;
+import static org.apache.webbeans.intercept.InterceptorResolutionService.BusinessMethodInterceptorInfo;
/**
* Configures the Web Beans related interceptors.
*
- * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
- * @version $Rev$ $Date$
- * @see org.apache.webbeans.intercept.webbeans.WebBeansInterceptorBeanPleaseRemove
- *
* TODO most of the stuff in this class can most probably get removed. All important logic is contained in {@link InterceptorResolutionService}
*/
public final class WebBeansInterceptorConfig
@@ -82,12 +81,14 @@ public final class WebBeansInterceptorCo
BeanInterceptorInfo interceptorInfo = webBeansContext.getInterceptorResolutionService().
calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), bean.getAnnotatedType());
+ //X TODO decorator stack
+
Map<Method, List<Interceptor<?>>> methodInterceptors = new HashMap<Method, List<Interceptor<?>>>();
List<Method> nonBusinessMethods = new ArrayList<Method>();
- for (Map.Entry<Method, InterceptorResolutionService.BusinessMethodInterceptorInfo> miEntry : interceptorInfo.getBusinessMethodsInfo().entrySet())
+ for (Map.Entry<Method, BusinessMethodInterceptorInfo> miEntry : interceptorInfo.getBusinessMethodsInfo().entrySet())
{
Method interceptedMethod = miEntry.getKey();
- InterceptorResolutionService.BusinessMethodInterceptorInfo mii = miEntry.getValue();
+ BusinessMethodInterceptorInfo mii = miEntry.getValue();
List<Interceptor<?>> activeInterceptors = new ArrayList<Interceptor<?>>();
if (mii.getEjbInterceptors() != null)
@@ -112,6 +113,13 @@ public final class WebBeansInterceptorCo
activeInterceptors.add(interceptorInfo.getSelfInterceptorBean());
}
}
+
+ if (mii.getMethodDecorators() != null)
+ {
+ LinkedHashMap<Decorator<?>, Method> methodDecorators= mii.getMethodDecorators();
+ //X TODO fill an own DecoratorDelegateInterceptor and add it to the activeInterceptors.
+ //X TODO or find some alternative handling
+ }
if (activeInterceptors.size() > 0)
{
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Animal.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Animal.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Animal.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Animal.java Thu Jan 17 23:06:45 2013
@@ -20,5 +20,17 @@ package org.apache.webbeans.newtests.dec
public class Animal
{
+ private String name;
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
}
Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Breeded.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Breeded.java?rev=1434949&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Breeded.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Breeded.java Thu Jan 17 23:06:45 2013
@@ -0,0 +1,27 @@
+/*
+ * 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.webbeans.newtests.decorators.common;
+
+/**
+ * Breeded animals
+ */
+public interface Breeded
+{
+ int getAge();
+}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Cow.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Cow.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Cow.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/common/Cow.java Thu Jan 17 23:06:45 2013
@@ -18,7 +18,23 @@
*/
package org.apache.webbeans.newtests.decorators.common;
-public class Cow extends Animal
+public class Cow extends Animal implements Breeded
{
+ private String color;
+ @Override
+ public int getAge()
+ {
+ return 7;
+ }
+
+ public String getColor()
+ {
+ return color;
+ }
+
+ public void setColor(String color)
+ {
+ this.color = color;
+ }
}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java?rev=1434949&r1=1434948&r2=1434949&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/GenericDecoratorTest.java Thu Jan 17 23:06:45 2013
@@ -83,7 +83,7 @@ public class GenericDecoratorTest extend
startContainer(classes, xmls);
- DecoratedBean decoratedBean = (DecoratedBean) getInstance(DecoratedBean.class);
+ DecoratedBean decoratedBean = getInstance(DecoratedBean.class);
Assert.assertTrue(decoratedBean.isDecoratorCalled());
}