[webbeans-commits] Webbeans SVN: r221 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/contexts and 2 other directories.
by webbeans-commits@lists.jboss.org
Author: nickarls
Date: 2008-11-03 04:36:41 -0500 (Mon, 03 Nov 2008)
New Revision: 221
Added:
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/FinalTuna.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/TunedTuna.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/NormalContext.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java
Log:
Minor: tests, cleanups
Changed normal contexts destroyed = inactive
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-03 07:57:36 UTC (rev 220)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-03 09:36:41 UTC (rev 221)
@@ -3,7 +3,6 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/NormalContext.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/NormalContext.java 2008-11-03 07:57:36 UTC (rev 220)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/NormalContext.java 2008-11-03 09:36:41 UTC (rev 221)
@@ -14,7 +14,7 @@
{
super(scopeType);
beans = new BeanMap();
- //TODO Are they active at creation?
+ // TODO active on create?
active = true;
}
@@ -24,30 +24,18 @@
{
throw new ContextNotActiveException();
}
-
- //TODO violation of specs. Why not just set active to false in destroy()?
- if (beans == null)
- {
- // Context has been destroyed
- return null;
- }
-
T instance = beans.get(bean);
-
if (instance != null)
{
return instance;
}
-
if (!create)
{
return null;
}
// TODO should bean creation be synchronized?
-
instance = bean.create();
-
beans.put(bean, instance);
return instance;
}
@@ -64,6 +52,7 @@
destroy(manager, bean);
}
beans = new BeanMap();
+ active = false;
}
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-03 07:57:36 UTC (rev 220)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-03 09:36:41 UTC (rev 221)
@@ -9,8 +9,10 @@
import javax.webbeans.UnproxyableDependencyException;
import javax.webbeans.manager.Bean;
+import org.jboss.webbeans.test.beans.FinalTuna;
import org.jboss.webbeans.test.beans.Fox;
import org.jboss.webbeans.test.beans.Tuna;
+import org.jboss.webbeans.test.beans.TunedTuna;
import org.jboss.webbeans.test.util.Util;
import org.testng.annotations.Test;
@@ -40,9 +42,9 @@
@SpecAssertion(section = "4.4")
public void testSimpleWebBeanClientProxyIsSerializable()
{
- Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ Bean<TunedTuna> tunaBean = Util.createSimpleWebBean(TunedTuna.class, manager);
manager.addBean(tunaBean);
- Tuna tuna = manager.getInstance(tunaBean);
+ TunedTuna tuna = manager.getInstance(tunaBean);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream out = null;
ObjectInputStream in = null;
@@ -53,7 +55,7 @@
out.flush();
byte[] data = bytes.toByteArray();
in = new ObjectInputStream(new ByteArrayInputStream(data));
- tuna = (Tuna) in.readObject();
+ tuna = (TunedTuna) in.readObject();
assert tuna.getState().equals("tuned");
}
catch (Exception e)
@@ -90,8 +92,9 @@
@SpecAssertion(section = "4.4.1")
public void testInjectionPointWithUnproxyableTypeWhichResolvesToNormalScopedWebBean()
{
- Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ Bean<FinalTuna> tunaBean = Util.createSimpleWebBean(FinalTuna.class, manager);
manager.addBean(tunaBean);
+ FinalTuna tuna = manager.getInstanceByType(FinalTuna.class);
assert false;
}
@@ -99,9 +102,9 @@
@SpecAssertion(section = "4.4.2")
public void testClientProxyInvocation()
{
- Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ Bean<TunedTuna> tunaBean = Util.createSimpleWebBean(TunedTuna.class, manager);
manager.addBean(tunaBean);
- Tuna tuna = manager.getInstance(tunaBean);
+ TunedTuna tuna = manager.getInstance(tunaBean);
assert tuna.getClass().getName().indexOf("$$_javassist_") > 0;
assert tuna.getState().equals("tuned");
}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/FinalTuna.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/FinalTuna.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/FinalTuna.java 2008-11-03 09:36:41 UTC (rev 221)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.test.beans;
+
+import javax.webbeans.RequestScoped;
+
+import org.jboss.webbeans.test.annotations.AnotherDeploymentType;
+
+@AnotherDeploymentType
+@RequestScoped
+public final class FinalTuna
+{
+
+}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java 2008-11-03 07:57:36 UTC (rev 220)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java 2008-11-03 09:36:41 UTC (rev 221)
@@ -1,6 +1,5 @@
package org.jboss.webbeans.test.beans;
-import javax.webbeans.Current;
import javax.webbeans.RequestScoped;
import org.jboss.webbeans.test.annotations.AnotherDeploymentType;
@@ -9,10 +8,5 @@
@RequestScoped
public class Tuna
{
- @Current Animal animal;
-
- public String getState() {
- return "tuned";
- }
}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/TunedTuna.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/TunedTuna.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/TunedTuna.java 2008-11-03 09:36:41 UTC (rev 221)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.test.beans;
+
+import javax.webbeans.RequestScoped;
+
+import org.jboss.webbeans.test.annotations.AnotherDeploymentType;
+
+@AnotherDeploymentType
+@RequestScoped
+public class TunedTuna
+{
+ public String getState()
+ {
+ return "tuned";
+ }
+}
16 years, 5 months
[webbeans-commits] Webbeans SVN: r220 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/util and 1 other directories.
by webbeans-commits@lists.jboss.org
Author: nickarls
Date: 2008-11-03 02:57:36 -0500 (Mon, 03 Nov 2008)
New Revision: 220
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ResolutionByTypeTest.java
Log:
Minors:
Fix broken tests
Implicit bean adding to manager for proxy client generation + test
Dropped extra parameter from ProxyPool request
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-03 07:40:49 UTC (rev 219)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-03 07:57:36 UTC (rev 220)
@@ -286,7 +286,7 @@
contextMap.getDependentContext().setActive(true);
if (getModelManager().getScopeModel(bean.getScopeType()).isNormal())
{
- return (T) proxyPool.getClientProxy(bean, beans.indexOf(bean));
+ return (T) proxyPool.getClientProxy(bean);
}
else
{
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java 2008-11-03 07:40:49 UTC (rev 219)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java 2008-11-03 07:57:36 UTC (rev 220)
@@ -70,13 +70,19 @@
return clientProxy;
}
- public Object getClientProxy(Bean<?> bean, int beanIndex)
+ public Object getClientProxy(Bean<?> bean)
{
Object clientProxy = pool.get(bean);
if (clientProxy == null)
{
try
{
+ int beanIndex = manager.getBeans().indexOf(bean);
+ // Implicit add required since it is looked up on activation with then index
+ if (beanIndex < 0) {
+ manager.addBean(bean);
+ beanIndex = manager.getBeans().size() - 1;
+ }
clientProxy = createClientProxy(bean, beanIndex);
}
catch (Exception e)
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-03 07:40:49 UTC (rev 219)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-03 07:57:36 UTC (rev 220)
@@ -105,5 +105,12 @@
assert tuna.getClass().getName().indexOf("$$_javassist_") > 0;
assert tuna.getState().equals("tuned");
}
+
+ @Test(groups = "clientProxy")
+ public void testProxyCreationDoesImplicitAddBean() {
+ Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ Tuna tuna = manager.getInstance(tunaBean);
+ assert manager.getBeans().size() == 1;
+ }
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ResolutionByTypeTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ResolutionByTypeTest.java 2008-11-03 07:40:49 UTC (rev 219)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ResolutionByTypeTest.java 2008-11-03 07:57:36 UTC (rev 220)
@@ -2,7 +2,9 @@
import static org.jboss.webbeans.test.util.Util.createSimpleWebBean;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import javax.webbeans.AnnotationLiteral;
@@ -57,7 +59,7 @@
{
InjectableField<Tuna> tunaField = new InjectableField<Tuna>(FishFarm.class.getDeclaredField("tuna"));
Bean<Tuna> tunaBean = createSimpleWebBean(Tuna.class, manager);
- Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ List<Bean<?>> beans = new ArrayList<Bean<?>>();
beans.add(tunaBean);
Set<Bean<?>> possibleTargets = tunaField.getMatchingBeans(beans, manager.getModelManager());
assert possibleTargets.size() == 1;
@@ -84,7 +86,7 @@
Bean<Salmon> salmonBean = createSimpleWebBean(Salmon.class, manager);
Bean<Sole> soleBean = createSimpleWebBean(Sole.class, manager);
- Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ List<Bean<?>> beans = new ArrayList<Bean<?>>();
beans.add(codBean);
beans.add(salmonBean);
beans.add(soleBean);
@@ -103,7 +105,7 @@
Bean<Salmon> salmonBean = createSimpleWebBean(Salmon.class, manager);
Bean<Sole> soleBean = createSimpleWebBean(Sole.class, manager);
- Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ List<Bean<?>> beans = new ArrayList<Bean<?>>();
beans.add(codBean);
beans.add(salmonBean);
beans.add(soleBean);
@@ -118,7 +120,7 @@
InjectableField<Animal> animalField = new InjectableField<Animal>(FishFarm.class.getDeclaredField("animal"));
Bean<SeaBass> seaBassBean = createSimpleWebBean(SeaBass.class, manager);
Bean<Haddock> haddockBean = createSimpleWebBean(Haddock.class, manager);
- Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ List<Bean<?>> beans = new ArrayList<Bean<?>>();
beans.add(seaBassBean);
beans.add(haddockBean);
Set<Bean<?>> possibleTargets = animalField.getMatchingBeans(beans, manager.getModelManager());
16 years, 5 months
[webbeans-commits] Webbeans SVN: r219 - in ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans: injectable and 1 other directories.
by webbeans-commits@lists.jboss.org
Author: nickarls
Date: 2008-11-03 02:40:49 -0500 (Mon, 03 Nov 2008)
New Revision: 219
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
Log:
Beans data structure from Set -> List in ManagerImpl
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-02 22:41:01 UTC (rev 218)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-03 07:40:49 UTC (rev 219)
@@ -3,6 +3,7 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -42,7 +43,7 @@
public class ManagerImpl implements Manager
{
-
+
private class ContextMap extends MapWrapper<Class<? extends Annotation>, List<Context>>
{
public ContextMap()
@@ -177,7 +178,7 @@
private <T> Set<Bean<T>> resolveByType(Injectable<T, ?> injectable)
{
Set<Bean<T>> beans = getResolutionManager().get(injectable);
-
+
if (beans == null)
{
return new HashSet<Bean<T>>();
@@ -194,19 +195,11 @@
return resolutionManager;
}
- public Bean<?> getBean(int beanIndex)
+ public List<Bean<?>> getBeans()
{
- return beans.get(beanIndex);
+ return beans;
}
- public Set<Bean<? extends Object>> getBeans()
- {
- // TODO List to Set?
- Set<Bean<?>> beanSet = new HashSet<Bean<?>>();
- beanSet.addAll(beans);
- return beanSet;
- }
-
public Manager addContext(Context context)
{
List<Context> contexts = contextMap.get(context.getScopeType());
@@ -389,5 +382,4 @@
return null;
}
-
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java 2008-11-02 22:41:01 UTC (rev 218)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/Injectable.java 2008-11-03 07:40:49 UTC (rev 219)
@@ -2,6 +2,7 @@
import java.lang.annotation.Annotation;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import javax.webbeans.BindingType;
@@ -62,7 +63,7 @@
return annotatedItem;
}
- public Set<Bean<?>> getMatchingBeans(Set<Bean<?>> beans, ModelManager modelManager)
+ public Set<Bean<?>> getMatchingBeans(List<Bean<?>> beans, ModelManager modelManager)
{
Set<Bean<?>> resolvedBeans = new HashSet<Bean<?>>();
for (Bean<?> bean : beans)
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java 2008-11-02 22:41:01 UTC (rev 218)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableParameterWrapper.java 2008-11-03 07:40:49 UTC (rev 219)
@@ -1,6 +1,7 @@
package org.jboss.webbeans.injectable;
import java.lang.annotation.Annotation;
+import java.util.List;
import java.util.Set;
import javax.webbeans.manager.Bean;
@@ -25,7 +26,7 @@
}
@Override
- public Set<Bean<?>> getMatchingBeans(Set<Bean<?>> possibleBeans, ModelManager modelManager)
+ public Set<Bean<?>> getMatchingBeans(List<Bean<?>> possibleBeans, ModelManager modelManager)
{
return delegate.getMatchingBeans(possibleBeans, modelManager);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java 2008-11-02 22:41:01 UTC (rev 218)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injectable/InjectableWrapper.java 2008-11-03 07:40:49 UTC (rev 219)
@@ -1,6 +1,7 @@
package org.jboss.webbeans.injectable;
import java.lang.annotation.Annotation;
+import java.util.List;
import java.util.Set;
import javax.webbeans.manager.Bean;
@@ -25,7 +26,7 @@
}
@Override
- public Set<Bean<?>> getMatchingBeans(Set<Bean<?>> possibleBeans, ModelManager modelManager)
+ public Set<Bean<?>> getMatchingBeans(List<Bean<?>> possibleBeans, ModelManager modelManager)
{
return delegate.getMatchingBeans(possibleBeans, modelManager);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-02 22:41:01 UTC (rev 218)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-03 07:40:49 UTC (rev 219)
@@ -2,6 +2,7 @@
import java.io.Serializable;
import java.lang.reflect.Method;
+import java.util.List;
import javassist.util.proxy.MethodHandler;
@@ -30,7 +31,7 @@
{
if (bean == null)
{
- bean = manager.getBean(beanIndex);
+ bean = manager.getBeans().get(beanIndex);
}
Context context = manager.getContext(bean.getScopeType());
Object proxiedInstance = context.get(bean, true);
16 years, 5 months
[webbeans-commits] Webbeans SVN: r218 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/util and 2 other directories.
by webbeans-commits@lists.jboss.org
Author: nickarls
Date: 2008-11-02 17:41:01 -0500 (Sun, 02 Nov 2008)
New Revision: 218
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java
Removed:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java
Log:
Moved ClientProxyCache and ClientProxyFactory to single ProxyPool class
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-02 20:33:56 UTC (rev 217)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-02 22:41:01 UTC (rev 218)
@@ -36,12 +36,13 @@
import org.jboss.webbeans.injectable.Injectable;
import org.jboss.webbeans.injectable.ResolverInjectable;
import org.jboss.webbeans.util.ClientProxy;
-import org.jboss.webbeans.util.ClientProxyFactory;
import org.jboss.webbeans.util.MapWrapper;
+import org.jboss.webbeans.util.ProxyPool;
import org.jboss.webbeans.util.Reflections;
public class ManagerImpl implements Manager
{
+
private class ContextMap extends MapWrapper<Class<? extends Annotation>, List<Context>>
{
public ContextMap()
@@ -60,28 +61,16 @@
}
}
- private class ClientProxyCache extends MapWrapper<Bean<?>, Object>
- {
- public ClientProxyCache()
- {
- super(new HashMap<Bean<?>, Object>());
- }
-
- public <T> T get(Bean<T> key)
- {
- return (T) super.get(key);
- }
- }
-
private List<Class<? extends Annotation>> enabledDeploymentTypes;
private ModelManager modelManager;
private EjbManager ejbLookupManager;
private EventBus eventBus;
private ResolutionManager resolutionManager;
private ContextMap contextMap;
- private ClientProxyCache clientProxyCache;
- private ClientProxyFactory clientProxyFactory;
+ private ProxyPool proxyPool;
private List<Bean<?>> beans;
+ private Set<Decorator> decorators;
+ private Set<Interceptor> interceptors;
public ManagerImpl()
{
@@ -92,8 +81,9 @@
this.beans = new ArrayList<Bean<?>>();
this.eventBus = new EventBus();
this.resolutionManager = new ResolutionManager(this);
- this.clientProxyCache = new ClientProxyCache();
- clientProxyFactory = new ClientProxyFactory(this);
+ this.proxyPool = new ProxyPool(this);
+ this.decorators = new HashSet<Decorator>();
+ this.interceptors = new HashSet<Interceptor>();
}
protected void initEnabledDeploymentTypes(List<Class<? extends Annotation>> enabledDeploymentTypes)
@@ -187,6 +177,7 @@
private <T> Set<Bean<T>> resolveByType(Injectable<T, ?> injectable)
{
Set<Bean<T>> beans = getResolutionManager().get(injectable);
+
if (beans == null)
{
return new HashSet<Bean<T>>();
@@ -218,26 +209,26 @@
public Manager addContext(Context context)
{
- List<Context> sameScopeTypeContexts = contextMap.get(context.getScopeType());
- if (sameScopeTypeContexts == null)
+ List<Context> contexts = contextMap.get(context.getScopeType());
+ if (contexts == null)
{
- sameScopeTypeContexts = new ArrayList<Context>();
- contextMap.put(context.getScopeType(), sameScopeTypeContexts);
+ contexts = new ArrayList<Context>();
+ contextMap.put(context.getScopeType(), contexts);
}
- sameScopeTypeContexts.add(context);
+ contexts.add(context);
return this;
}
public Manager addDecorator(Decorator decorator)
{
- // TODO Auto-generated method stub
- return null;
+ decorators.add(decorator);
+ return this;
}
public Manager addInterceptor(Interceptor interceptor)
{
- // TODO Auto-generated method stub
- return null;
+ interceptors.add(interceptor);
+ return this;
}
public <T> Manager addObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
@@ -302,7 +293,7 @@
contextMap.getDependentContext().setActive(true);
if (getModelManager().getScopeModel(bean.getScopeType()).isNormal())
{
- return (T) getClientProxy(bean);
+ return (T) proxyPool.getClientProxy(bean, beans.indexOf(bean));
}
else
{
@@ -398,23 +389,5 @@
return null;
}
- private Object getClientProxy(Bean<?> bean)
- {
- Object clientProxy = clientProxyCache.get(bean);
- if (clientProxy == null)
- {
- try
- {
- clientProxy = clientProxyFactory.createClientProxy(bean, beans.indexOf(bean));
- }
- catch (Exception e)
- {
- // TODO: What to *really* do here?
- throw new UnproxyableDependencyException("Could not create client proxy for " + bean.getName(), e);
- }
- clientProxyCache.put(bean, clientProxy);
- }
- return clientProxy;
- }
}
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java 2008-11-02 20:33:56 UTC (rev 217)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java 2008-11-02 22:41:01 UTC (rev 218)
@@ -1,56 +0,0 @@
-package org.jboss.webbeans.util;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import javassist.util.proxy.ProxyFactory;
-import javassist.util.proxy.ProxyObject;
-
-import javax.webbeans.manager.Bean;
-
-import org.jboss.webbeans.ManagerImpl;
-
-public class ClientProxyFactory
-{
- private ManagerImpl manager;
-
- public ClientProxyFactory(ManagerImpl manager) {
- this.manager = manager;
- }
-
- private class TypeInfo {
- Class<?>[] interfaces;
- Class<?> superclass;
- }
-
- private TypeInfo getTypeInfo(Set<Class<?>> types) {
- TypeInfo typeInfo = new TypeInfo();
- List<Class<?>> interfaces = new ArrayList<Class<?>>();
- Class<?> superclass = null;
- for (Class<?> type : types) {
- if (type.isInterface()) {
- interfaces.add(type);
- } else if (superclass == null || (type != Object.class && superclass.isAssignableFrom(type))) {
- superclass = type;
- }
- }
- interfaces.add(Serializable.class);
- typeInfo.interfaces = interfaces.toArray(new Class<?>[0]);
- typeInfo.superclass = superclass;
- return typeInfo;
- }
-
- public <T> T createClientProxy(Bean<T> bean, int beanIndex) throws InstantiationException, IllegalAccessException {
- ProxyFactory proxyFactory = new ProxyFactory();
- TypeInfo typeInfo = getTypeInfo(bean.getTypes());
- proxyFactory.setInterfaces(typeInfo.interfaces);
- proxyFactory.setSuperclass(typeInfo.superclass);
- T clientProxy = (T) proxyFactory.createClass().newInstance();
- ProxyMethodHandler proxyMethodHandler = new ProxyMethodHandler(bean, beanIndex, manager);
- ((ProxyObject)clientProxy).setHandler(proxyMethodHandler);
- return clientProxy;
- }
-
-}
Copied: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java (from rev 216, ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java)
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java 2008-11-02 22:41:01 UTC (rev 218)
@@ -0,0 +1,93 @@
+package org.jboss.webbeans.util;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.ManagerImpl;
+
+public class ProxyPool
+{
+ private class Pool extends MapWrapper<Bean<?>, Object>
+ {
+ public Pool()
+ {
+ super(new HashMap<Bean<?>, Object>());
+ }
+
+ public <T> T get(Bean<T> key)
+ {
+ return (T) super.get(key);
+ }
+ }
+
+ private ManagerImpl manager;
+ private Pool pool;
+
+ public ProxyPool(ManagerImpl manager) {
+ this.manager = manager;
+ this.pool = new Pool();
+ }
+
+ private class TypeInfo {
+ Class<?>[] interfaces;
+ Class<?> superclass;
+ }
+
+ private TypeInfo getTypeInfo(Set<Class<?>> types) {
+ TypeInfo typeInfo = new TypeInfo();
+ List<Class<?>> interfaces = new ArrayList<Class<?>>();
+ Class<?> superclass = null;
+ for (Class<?> type : types) {
+ if (type.isInterface()) {
+ interfaces.add(type);
+ } else if (superclass == null || (type != Object.class && superclass.isAssignableFrom(type))) {
+ superclass = type;
+ }
+ }
+ interfaces.add(Serializable.class);
+ typeInfo.interfaces = interfaces.toArray(new Class<?>[0]);
+ typeInfo.superclass = superclass;
+ return typeInfo;
+ }
+
+ private <T> T createClientProxy(Bean<T> bean, int beanIndex) throws InstantiationException, IllegalAccessException {
+ ProxyFactory proxyFactory = new ProxyFactory();
+ TypeInfo typeInfo = getTypeInfo(bean.getTypes());
+ proxyFactory.setInterfaces(typeInfo.interfaces);
+ proxyFactory.setSuperclass(typeInfo.superclass);
+ T clientProxy = (T) proxyFactory.createClass().newInstance();
+ ProxyMethodHandler proxyMethodHandler = new ProxyMethodHandler(bean, beanIndex, manager);
+ ((ProxyObject)clientProxy).setHandler(proxyMethodHandler);
+ return clientProxy;
+ }
+
+ public Object getClientProxy(Bean<?> bean, int beanIndex)
+ {
+ Object clientProxy = pool.get(bean);
+ if (clientProxy == null)
+ {
+ try
+ {
+ clientProxy = createClientProxy(bean, beanIndex);
+ }
+ catch (Exception e)
+ {
+ // TODO: What to *really* do here?
+ throw new UnproxyableDependencyException("Could not create client proxy for " + bean.getName(), e);
+ }
+ pool.put(bean, clientProxy);
+ }
+ return clientProxy;
+ }
+
+
+}
Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyPool.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-02 20:33:56 UTC (rev 217)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-02 22:41:01 UTC (rev 218)
@@ -38,7 +38,7 @@
@Test(groups = "clientProxy")
@SpecAssertion(section = "4.4")
- public void testClientProxyIsSerializable()
+ public void testSimpleWebBeanClientProxyIsSerializable()
{
Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
manager.addBean(tunaBean);
@@ -90,6 +90,8 @@
@SpecAssertion(section = "4.4.1")
public void testInjectionPointWithUnproxyableTypeWhichResolvesToNormalScopedWebBean()
{
+ Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ manager.addBean(tunaBean);
assert false;
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java 2008-11-02 20:33:56 UTC (rev 217)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java 2008-11-02 22:41:01 UTC (rev 218)
@@ -1,5 +1,6 @@
package org.jboss.webbeans.test.beans;
+import javax.webbeans.Current;
import javax.webbeans.RequestScoped;
import org.jboss.webbeans.test.annotations.AnotherDeploymentType;
@@ -8,6 +9,8 @@
@RequestScoped
public class Tuna
{
+ @Current Animal animal;
+
public String getState() {
return "tuned";
}
16 years, 5 months
[webbeans-commits] Webbeans SVN: r217 - in ri/trunk: webbeans-ri and 1 other directory.
by webbeans-commits@lists.jboss.org
Author: liqweed
Date: 2008-11-02 15:33:56 -0500 (Sun, 02 Nov 2008)
New Revision: 217
Modified:
ri/trunk/pom.xml
ri/trunk/webbeans-ri/pom.xml
Log:
added Google Collections dependency
Modified: ri/trunk/pom.xml
===================================================================
--- ri/trunk/pom.xml 2008-11-02 20:24:21 UTC (rev 216)
+++ ri/trunk/pom.xml 2008-11-02 20:33:56 UTC (rev 217)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.webbeans</groupId>
<artifactId>parent</artifactId>
@@ -29,7 +29,7 @@
<name>Shane Bryzak</name>
<organization>JBoss, a division of Red Hat</organization>
</developer>
-
+
<developer>
<name>David Allen</name>
</developer>
@@ -45,6 +45,11 @@
<id>scannotation.sf.net</id>
<url>http://scannotation.sourceforge.net/maven2/</url>
</repository>
+ <repository>
+ <id>google-maven-repository</id>
+ <name>Google Maven Repository</name>
+ <url>http://google-maven-repository.googlecode.com/svn/repository/</url>
+ </repository>
</repositories>
<pluginRepositories>
@@ -85,7 +90,7 @@
<artifactId>ejb-api</artifactId>
<version>3.0</version>
</dependency>
-
+
<dependency>
<groupId>org.scannotation</groupId>
<artifactId>scannotation</artifactId>
@@ -109,19 +114,25 @@
<artifactId>jta</artifactId>
<version>1.0.1B</version>
</dependency>
-
+
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
-
+
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>1.0</version>
- </dependency>
-
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.collections</groupId>
+ <artifactId>google-collections</artifactId>
+ <version>0.8</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
Modified: ri/trunk/webbeans-ri/pom.xml
===================================================================
--- ri/trunk/webbeans-ri/pom.xml 2008-11-02 20:24:21 UTC (rev 216)
+++ ri/trunk/webbeans-ri/pom.xml 2008-11-02 20:33:56 UTC (rev 217)
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>parent</artifactId>
<groupId>org.jboss.webbeans</groupId>
@@ -23,38 +23,38 @@
<artifactId>testng</artifactId>
<scope>test</scope>
<classifier>jdk15</classifier>
- </dependency>
-
+ </dependency>
+
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- </dependency>
-
+ </dependency>
+
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
- </dependency>
+ </dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<scope>test</scope>
</dependency>
-
+
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
-
+
<dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
</dependency>
-
+
<dependency>
- <groupId>javax.el</groupId>
- <artifactId>el-api</artifactId>
- </dependency>
+ <groupId>javax.el</groupId>
+ <artifactId>el-api</artifactId>
+ </dependency>
</dependencies>
16 years, 5 months
[webbeans-commits] Webbeans SVN: r216 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/introspector and 3 other directories.
by webbeans-commits@lists.jboss.org
Author: nickarls
Date: 2008-11-02 15:24:21 -0500 (Sun, 02 Nov 2008)
New Revision: 216
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java
Log:
Client proxys
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-02 18:58:32 UTC (rev 215)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ManagerImpl.java 2008-11-02 20:24:21 UTC (rev 216)
@@ -53,8 +53,8 @@
{
return (List<Context>) super.get(key);
}
-
- public DependentContext getDependentContext()
+
+ public DependentContext getDependentContext()
{
return (DependentContext) get(Dependent.class).get(0);
}
@@ -80,18 +80,16 @@
private ResolutionManager resolutionManager;
private ContextMap contextMap;
private ClientProxyCache clientProxyCache;
- // TODO This could be a static method?
private ClientProxyFactory clientProxyFactory;
+ private List<Bean<?>> beans;
- private Set<Bean<?>> beans;
-
public ManagerImpl()
{
initEnabledDeploymentTypes(null);
initContexts(null);
this.modelManager = new ModelManager();
this.ejbLookupManager = new EjbManager();
- this.beans = new HashSet<Bean<?>>();
+ this.beans = new ArrayList<Bean<?>>();
this.eventBus = new EventBus();
this.resolutionManager = new ResolutionManager(this);
this.clientProxyCache = new ClientProxyCache();
@@ -137,6 +135,10 @@
public Manager addBean(Bean<?> bean)
{
+ if (beans.contains(bean))
+ {
+ return this;
+ }
getResolutionManager().clear();
beans.add(bean);
return this;
@@ -201,9 +203,17 @@
return resolutionManager;
}
+ public Bean<?> getBean(int beanIndex)
+ {
+ return beans.get(beanIndex);
+ }
+
public Set<Bean<? extends Object>> getBeans()
{
- return beans;
+ // TODO List to Set?
+ Set<Bean<?>> beanSet = new HashSet<Bean<?>>();
+ beanSet.addAll(beans);
+ return beanSet;
}
public Manager addContext(Context context)
@@ -266,8 +276,6 @@
{
throw new ContextNotActiveException("No active contexts for " + scopeType.getName());
}
- // TODO performance? Just flag found=true and continue loop, failing when
- // found=already true etc?
List<Context> activeContexts = new ArrayList<Context>();
for (Context context : contexts)
{
@@ -294,7 +302,6 @@
contextMap.getDependentContext().setActive(true);
if (getModelManager().getScopeModel(bean.getScopeType()).isNormal())
{
- // TODO What *really* to proxy? The bean? The instance?
return (T) getClientProxy(bean);
}
else
@@ -396,10 +403,12 @@
Object clientProxy = clientProxyCache.get(bean);
if (clientProxy == null)
{
- try
+ try
{
- clientProxy = clientProxyFactory.createClientProxy(bean);
- } catch (Exception e) {
+ clientProxy = clientProxyFactory.createClientProxy(bean, beans.indexOf(bean));
+ }
+ catch (Exception e)
+ {
// TODO: What to *really* do here?
throw new UnproxyableDependencyException("Could not create client proxy for " + bean.getName(), e);
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java 2008-11-02 18:58:32 UTC (rev 215)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/SimpleAnnotatedItem.java 2008-11-02 20:24:21 UTC (rev 216)
@@ -10,7 +10,7 @@
public class SimpleAnnotatedItem<T, S> extends AbstractAnnotatedItem<T, S>
{
- private Type[] actualTypeArguements = new Type[0];
+ private Type[] actualTypeArguments = new Type[0];
private Class<? extends T> type;
private Annotation[] actualAnnotations;
@@ -31,14 +31,14 @@
this.type = apiType.getRawType();
if (apiType.getType() instanceof ParameterizedType)
{
- actualTypeArguements = ((ParameterizedType) apiType.getType()).getActualTypeArguments();
+ actualTypeArguments = ((ParameterizedType) apiType.getType()).getActualTypeArguments();
}
}
private SimpleAnnotatedItem(Map<Class<? extends Annotation>, Annotation> annotationMap, Class<? extends T> type, Type[] actualTypeArguements)
{
this(annotationMap, type);
- this.actualTypeArguements = actualTypeArguements;
+ this.actualTypeArguments = actualTypeArguements;
}
public SimpleAnnotatedItem(Annotation[] annotations)
@@ -77,7 +77,7 @@
public Type[] getActualTypeArguements()
{
- return actualTypeArguements;
+ return actualTypeArguments;
}
public Annotation[] getActualAnnotations()
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java 2008-11-02 18:58:32 UTC (rev 215)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ClientProxyFactory.java 2008-11-02 20:24:21 UTC (rev 216)
@@ -1,17 +1,14 @@
package org.jboss.webbeans.util;
import java.io.Serializable;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-import javassist.util.proxy.MethodHandler;
import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;
import javax.webbeans.manager.Bean;
-import javax.webbeans.manager.Context;
import org.jboss.webbeans.ManagerImpl;
@@ -22,35 +19,7 @@
public ClientProxyFactory(ManagerImpl manager) {
this.manager = manager;
}
-
- public class ProxyMethodHandler implements MethodHandler, Serializable {
- private static final long serialVersionUID = -5391564935097267888L;
-
- private ManagerImpl manager;
- private Bean<?> bean;
-
- public ProxyMethodHandler(Bean<?> bean, ManagerImpl manager) {
- this.bean = bean;
- this.manager = manager;
- }
-
- public Object invoke(Object self, Method method, Method proceed, Object[] args) throws Throwable
- {
- Context context = manager.getContext(bean.getScopeType());
- Object proxiedInstance = context.get(bean, true);
- Method proxiedMethod = proxiedInstance.getClass().getMethod(method.getName(), method.getParameterTypes());
- return proxiedMethod.invoke(proxiedInstance, args);
- }
-
- }
-
- private Class<?>[] addSerializableInterface(Class<?> clazz) {
- // TODO Doesn't compile Class<?>[] interfaces = Arrays.copyOf(clazz.getInterfaces(), clazz.getInterfaces().length + 1);
- Class[] interfaces = new Class[0];
- interfaces[interfaces.length] = Serializable.class;
- return interfaces;
- }
-
+
private class TypeInfo {
Class<?>[] interfaces;
Class<?> superclass;
@@ -73,13 +42,13 @@
return typeInfo;
}
- public <T> T createClientProxy(Bean<T> bean) throws InstantiationException, IllegalAccessException {
+ public <T> T createClientProxy(Bean<T> bean, int beanIndex) throws InstantiationException, IllegalAccessException {
ProxyFactory proxyFactory = new ProxyFactory();
TypeInfo typeInfo = getTypeInfo(bean.getTypes());
proxyFactory.setInterfaces(typeInfo.interfaces);
proxyFactory.setSuperclass(typeInfo.superclass);
T clientProxy = (T) proxyFactory.createClass().newInstance();
- ProxyMethodHandler proxyMethodHandler = new ProxyMethodHandler(bean, manager);
+ ProxyMethodHandler proxyMethodHandler = new ProxyMethodHandler(bean, beanIndex, manager);
((ProxyObject)clientProxy).setHandler(proxyMethodHandler);
return clientProxy;
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/ProxyMethodHandler.java 2008-11-02 20:24:21 UTC (rev 216)
@@ -0,0 +1,41 @@
+package org.jboss.webbeans.util;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import javassist.util.proxy.MethodHandler;
+
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Context;
+
+import org.jboss.webbeans.ManagerImpl;
+
+public class ProxyMethodHandler implements MethodHandler, Serializable
+{
+ private static final long serialVersionUID = -5391564935097267888L;
+
+ private transient Bean<?> bean;
+ private int beanIndex;
+ private static ManagerImpl manager;
+
+ public ProxyMethodHandler(Bean<?> bean, int beanIndex, ManagerImpl manager)
+ {
+ this.bean = bean;
+ this.beanIndex = beanIndex;
+ ProxyMethodHandler.manager = manager;
+ }
+
+ @Override
+ public Object invoke(Object self, Method method, Method proceed, Object[] args) throws Throwable
+ {
+ if (bean == null)
+ {
+ bean = manager.getBean(beanIndex);
+ }
+ Context context = manager.getContext(bean.getScopeType());
+ Object proxiedInstance = context.get(bean, true);
+ Method proxiedMethod = proxiedInstance.getClass().getMethod(method.getName(), method.getParameterTypes());
+ return proxiedMethod.invoke(proxiedInstance, args);
+ }
+
+}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-02 18:58:32 UTC (rev 215)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ClientProxyTest.java 2008-11-02 20:24:21 UTC (rev 216)
@@ -1,53 +1,107 @@
package org.jboss.webbeans.test;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.manager.Bean;
+import org.jboss.webbeans.test.beans.Fox;
+import org.jboss.webbeans.test.beans.Tuna;
+import org.jboss.webbeans.test.util.Util;
import org.testng.annotations.Test;
@SpecVersion("PDR")
-public class ClientProxyTest
+public class ClientProxyTest extends AbstractTest
{
-
- @Test(groups="clientProxy") @SpecAssertion(section={"4.4", "4.8"})
+ @Test(groups = "clientProxy")
+ @SpecAssertion(section = { "4.4", "4.8" })
public void testClientProxyUsedForNormalScope()
{
- assert false;
+ Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ Tuna tuna = manager.getInstance(tunaBean);
+ assert tuna.getClass().getName().indexOf("$$_javassist_") > 0;
}
-
- @Test(groups="clientProxy") @SpecAssertion(section={"4.4", "4.8"})
+
+ @Test(groups = "clientProxy")
+ @SpecAssertion(section = { "4.4", "4.8" })
public void testClientProxyNotUsedForPseudoScope()
{
- assert false;
+ Bean<Fox> foxBean = Util.createSimpleWebBean(Fox.class, manager);
+ Fox fox = manager.getInstance(foxBean);
+ assert fox.getClass() == Fox.class;
}
-
- @Test(groups="clientProxy") @SpecAssertion(section="4.4")
+
+ @Test(groups = "clientProxy")
+ @SpecAssertion(section = "4.4")
public void testClientProxyIsSerializable()
{
- assert false;
+ Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ manager.addBean(tunaBean);
+ Tuna tuna = manager.getInstance(tunaBean);
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ ObjectOutputStream out = null;
+ ObjectInputStream in = null;
+ try
+ {
+ out = new ObjectOutputStream(bytes);
+ out.writeObject(tuna);
+ out.flush();
+ byte[] data = bytes.toByteArray();
+ in = new ObjectInputStream(new ByteArrayInputStream(data));
+ tuna = (Tuna) in.readObject();
+ assert tuna.getState().equals("tuned");
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ assert false;
+ }
+ finally
+ {
+ try
+ {
+ if (bytes != null)
+ {
+ bytes.close();
+ }
+ if (out != null)
+ {
+ out.close();
+ }
+ if (in != null)
+ {
+ in.close();
+ }
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ assert true;
}
-
- @Test(groups="clientProxy", expectedExceptions=UnproxyableDependencyException.class) @SpecAssertion(section="4.4.1")
+
+ @Test(groups = "clientProxy", expectedExceptions = UnproxyableDependencyException.class)
+ @SpecAssertion(section = "4.4.1")
public void testInjectionPointWithUnproxyableTypeWhichResolvesToNormalScopedWebBean()
{
assert false;
}
-
- @Test(groups="clientProxy") @SpecAssertion(section="4.4.2")
+
+ @Test(groups = "clientProxy")
+ @SpecAssertion(section = "4.4.2")
public void testClientProxyInvocation()
{
- assert false;
+ Bean<Tuna> tunaBean = Util.createSimpleWebBean(Tuna.class, manager);
+ manager.addBean(tunaBean);
+ Tuna tuna = manager.getInstance(tunaBean);
+ assert tuna.getClass().getName().indexOf("$$_javassist_") > 0;
+ assert tuna.getState().equals("tuned");
}
-
- /*
- @Test(groups="clientProxy") @SpecAssertion(section="4.4")
- public void test
- {
- assert false;
- }
-
- */
-
-
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java 2008-11-02 18:58:32 UTC (rev 215)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tuna.java 2008-11-02 20:24:21 UTC (rev 216)
@@ -8,5 +8,8 @@
@RequestScoped
public class Tuna
{
+ public String getState() {
+ return "tuned";
+ }
}
16 years, 5 months
[webbeans-commits] Webbeans SVN: r214 - in ri/trunk/webbeans-ri/src: test/java/org/jboss/webbeans/test and 2 other directories.
by webbeans-commits@lists.jboss.org
Author: gavin.king(a)jboss.com
Date: 2008-10-31 21:12:54 -0400 (Fri, 31 Oct 2008)
New Revision: 214
Added:
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/HeavyDuty.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Modern.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Motorized.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Plough.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tractor.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/AbstractBeanModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EnterpriseBeanModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EventBeanModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/ProducerMethodBeanModel.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/SimpleBeanModel.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/SimpleBeanModelTest.java
Log:
made start on specialization: inherit name and binding types
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/AbstractBeanModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/AbstractBeanModel.java 2008-10-31 19:00:18 UTC (rev 213)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/AbstractBeanModel.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -14,6 +14,7 @@
import javax.webbeans.Named;
import javax.webbeans.Production;
import javax.webbeans.ScopeType;
+import javax.webbeans.Specializes;
import javax.webbeans.Standard;
import org.jboss.webbeans.ManagerImpl;
@@ -43,21 +44,27 @@
private Set<Class<?>> apiTypes;
protected Set<Injectable<?, ?>> injectionPoints;
private boolean primitive;
+ protected ManagerImpl container;
protected void init(ManagerImpl container)
{
+ this.container = container;
mergedStereotypes = new MergedStereotypesModel<T, E>(getAnnotatedItem(), getXmlAnnotatedItem(), container);
initType();
initPrimitive();
log.fine("Building Web Bean bean metadata for " + getType());
initBindingTypes();
initName();
- initDeploymentType(container);
+ initDeploymentType();
checkDeploymentType();
initScopeType();
initApiTypes();
}
+ protected AbstractClassBeanModel<? extends T> getSpecializedType() {
+ throw new UnsupportedOperationException();
+ }
+
protected void initInjectionPoints()
{
injectionPoints = new HashSet<Injectable<?,?>>();
@@ -103,20 +110,34 @@
protected void initBindingTypes()
{
+ Set<Annotation> bindingTypes = getAnnotatedItem().getAnnotations(BindingType.class);
Set<Annotation> xmlBindingTypes = getXmlAnnotatedItem().getAnnotations(BindingType.class);
+ boolean xmlSpecialization = getXmlAnnotatedItem().isAnnotationPresent(Specializes.class);
+ boolean specialization = getAnnotatedItem().isAnnotationPresent(Specializes.class);
+
if (xmlBindingTypes.size() > 0 || mergedStereotypes.isDeclaredInXml())
{
// TODO support producer expression default binding type
- log.finest("Using binding types " + xmlBindingTypes + " specified in XML");
+ if (xmlSpecialization)
+ {
+ xmlBindingTypes.addAll(bindingTypes);
+ log.finest("Using binding types " + xmlBindingTypes + " specified in XML and specialized type");
+ }
+ else {
+ log.finest("Using binding types " + xmlBindingTypes + " specified in XML");
+ }
this.bindingTypes= xmlBindingTypes;
return;
}
else
{
- Set<Annotation> bindingTypes = getAnnotatedItem().getAnnotations(BindingType.class);
-
- if (bindingTypes.size() == 0)
+ if (specialization)
{
+ bindingTypes.addAll(getSpecializedType().getBindingTypes());
+ log.finest("Using binding types " + bindingTypes + " specified by annotations and specialized supertype");
+ }
+ else if (bindingTypes.size() == 0)
+ {
log.finest("Adding default @Current binding type");
bindingTypes.add(new CurrentAnnotationLiteral());
}
@@ -176,9 +197,15 @@
protected void initName()
{
+ boolean xmlSpecialization = getXmlAnnotatedItem().isAnnotationPresent(Specializes.class);
+ boolean specialization = getAnnotatedItem().isAnnotationPresent(Specializes.class);
boolean beanNameDefaulted = false;
if (getXmlAnnotatedItem().isAnnotationPresent(Named.class))
{
+ if (xmlSpecialization)
+ {
+ throw new DefinitionException("Name specified for specialized bean (declared in XML)");
+ }
String xmlName = getXmlAnnotatedItem().getAnnotation(Named.class).value();
if ("".equals(xmlName))
{
@@ -194,6 +221,10 @@
}
else if (getAnnotatedItem().isAnnotationPresent(Named.class))
{
+ if (specialization)
+ {
+ throw new DefinitionException("Name specified for specialized bean");
+ }
String javaName = getAnnotatedItem().getAnnotation(Named.class).value();
if ("".equals(javaName))
{
@@ -202,11 +233,17 @@
}
else
{
- log.finest("Using name " + javaName + " specified in XML");
+ log.finest("Using name " + javaName + " specified by annotations");
this.name = javaName;
return;
}
}
+ else if (specialization)
+ {
+ this.name = getSpecializedType().getName();
+ log.finest("Using supertype name");
+ return;
+ }
if (beanNameDefaulted || getMergedStereotypes().isBeanNameDefaulted())
{
this.name = getDefaultName();
@@ -214,7 +251,7 @@
}
}
- protected void initDeploymentType(ManagerImpl container)
+ protected void initDeploymentType()
{
Set<Annotation> xmlDeploymentTypes = getXmlAnnotatedItem().getAnnotations(DeploymentType.class);
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EnterpriseBeanModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EnterpriseBeanModel.java 2008-10-31 19:00:18 UTC (rev 213)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EnterpriseBeanModel.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -12,6 +12,8 @@
import org.jboss.webbeans.injectable.InjectableMethod;
import org.jboss.webbeans.injectable.InjectableParameter;
import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.introspector.SimpleAnnotatedType;
+import org.jboss.webbeans.test.util.Util;
import org.jboss.webbeans.util.Reflections;
public class EnterpriseBeanModel<T> extends AbstractEnterpriseBeanModel<T>
@@ -116,5 +118,20 @@
}
}
}
+
+ @Override
+ protected AbstractClassBeanModel<? extends T> getSpecializedType()
+ {
+ //TODO: lots of validation!
+ Class<?> superclass = getAnnotatedItem().getType().getSuperclass();
+ if ( superclass!=null )
+ {
+ return new EnterpriseBeanModel( new SimpleAnnotatedType( superclass ), Util.getEmptyAnnotatedType( getAnnotatedItem().getType().getSuperclass() ), container );
+ }
+ else {
+ throw new RuntimeException();
+ }
+
+ }
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EventBeanModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EventBeanModel.java 2008-10-31 19:00:18 UTC (rev 213)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/EventBeanModel.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -111,7 +111,7 @@
}
@Override
- protected void initDeploymentType(ManagerImpl container)
+ protected void initDeploymentType()
{
// This is always @Standard per 7.4
this.deploymentType = Standard.class;
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/ProducerMethodBeanModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/ProducerMethodBeanModel.java 2008-10-31 19:00:18 UTC (rev 213)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/ProducerMethodBeanModel.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -66,9 +66,9 @@
}
@Override
- protected void initDeploymentType(ManagerImpl container)
+ protected void initDeploymentType()
{
- super.initDeploymentType(container);
+ super.initDeploymentType();
if (getDeploymentType() == null)
{
if (getDeclaringBean() == null)
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/SimpleBeanModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/SimpleBeanModel.java 2008-10-31 19:00:18 UTC (rev 213)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/bean/SimpleBeanModel.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -11,6 +11,8 @@
import org.jboss.webbeans.injectable.InjectableParameter;
import org.jboss.webbeans.injectable.SimpleConstructor;
import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.introspector.SimpleAnnotatedType;
+import org.jboss.webbeans.test.util.Util;
import org.jboss.webbeans.util.LoggerUtil;
import org.jboss.webbeans.util.Reflections;
@@ -118,5 +120,20 @@
}
return location;
}
-
+
+ @Override
+ protected AbstractClassBeanModel<? extends T> getSpecializedType()
+ {
+ //TODO: lots of validation!
+ Class<?> superclass = getAnnotatedItem().getType().getSuperclass();
+ if ( superclass!=null )
+ {
+ return new SimpleBeanModel( new SimpleAnnotatedType( superclass ), Util.getEmptyAnnotatedType( getAnnotatedItem().getType().getSuperclass() ), container );
+ }
+ else {
+ throw new RuntimeException();
+ }
+ }
+
+
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/SimpleBeanModelTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/SimpleBeanModelTest.java 2008-10-31 19:00:18 UTC (rev 213)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/SimpleBeanModelTest.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -5,6 +5,7 @@
import java.util.Iterator;
+import javax.webbeans.AnnotationLiteral;
import javax.webbeans.DefinitionException;
import javax.webbeans.NonexistentConstructorException;
import javax.webbeans.manager.Bean;
@@ -14,6 +15,8 @@
import org.jboss.webbeans.injectable.SimpleConstructor;
import org.jboss.webbeans.introspector.SimpleAnnotatedType;
import org.jboss.webbeans.model.bean.SimpleBeanModel;
+import org.jboss.webbeans.test.annotations.HeavyDuty;
+import org.jboss.webbeans.test.annotations.Motorized;
import org.jboss.webbeans.test.beans.Animal;
import org.jboss.webbeans.test.beans.Chicken;
import org.jboss.webbeans.test.beans.Cow;
@@ -25,6 +28,7 @@
import org.jboss.webbeans.test.beans.Sheep;
import org.jboss.webbeans.test.beans.Spider;
import org.jboss.webbeans.test.beans.Tarantula;
+import org.jboss.webbeans.test.beans.Tractor;
import org.jboss.webbeans.test.beans.Turkey;
import org.jboss.webbeans.test.beans.broken.ParameterizedBean;
import org.jboss.webbeans.test.beans.broken.OuterBean.InnerBean;
@@ -257,13 +261,18 @@
@Test(groups="specialization") @SpecAssertion(section="3.2.6")
public void testSpecializedClassInheritsBindingTypes()
{
- assert false;
+ SimpleBeanModel<Tractor> bean = new SimpleBeanModel<Tractor>(new SimpleAnnotatedType<Tractor>(Tractor.class), getEmptyAnnotatedType(Tractor.class), manager);
+ assert bean.getBindingTypes().size()==2;
+ assert bean.getBindingTypes().contains( new AnnotationLiteral<Motorized>() {} );
+ assert bean.getBindingTypes().contains( new AnnotationLiteral<HeavyDuty>() {} );
}
@Test(groups="specialization") @SpecAssertion(section="3.2.6")
public void testSpecializedClassInheritsName()
{
- assert false;
+ SimpleBeanModel<Tractor> bean = new SimpleBeanModel<Tractor>(new SimpleAnnotatedType<Tractor>(Tractor.class), getEmptyAnnotatedType(Tractor.class), manager);
+ assert bean.getName()!=null;
+ assert bean.getName().equals("plough");
}
@Test(groups="specialization") @SpecAssertion(section="3.2.6")
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/HeavyDuty.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/HeavyDuty.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/HeavyDuty.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.test.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+@Target( { TYPE, METHOD, PARAMETER })
+@Retention(RUNTIME)
+@Documented
+@BindingType
+public @interface HeavyDuty
+{
+
+}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Modern.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Modern.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Modern.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.test.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+@Target( { TYPE, METHOD })
+@Retention(RUNTIME)
+@Documented
+@DeploymentType
+public @interface Modern
+{
+
+}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Motorized.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Motorized.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/annotations/Motorized.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.test.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+@Target( { TYPE, METHOD, PARAMETER })
+@Retention(RUNTIME)
+@Documented
+@BindingType
+public @interface Motorized
+{
+
+}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Plough.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Plough.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Plough.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.test.beans;
+
+import javax.webbeans.Named;
+
+import org.jboss.webbeans.test.annotations.HeavyDuty;
+
+@HeavyDuty
+@Named("plough")
+public class Plough
+{
+
+}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tractor.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tractor.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/beans/Tractor.java 2008-11-01 01:12:54 UTC (rev 214)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.test.beans;
+
+import javax.webbeans.Specializes;
+
+import org.jboss.webbeans.test.annotations.Modern;
+import org.jboss.webbeans.test.annotations.Motorized;
+
+@Modern @Motorized @Specializes
+public class Tractor extends Plough
+{
+
+}
16 years, 6 months