[webbeans-commits] Webbeans SVN: r532 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/bean and 8 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Tue Dec 16 02:36:02 EST 2008
Author: nickarls
Date: 2008-12-16 02:36:02 -0500 (Tue, 16 Dec 2008)
New Revision: 532
Added:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java
Removed:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EjbMetaDataTest.java
Modified:
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/DefaultEnterpriseBeanLookup.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java
ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Names.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/SimpleBeanModelTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/contexts/NormalContextTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ejb/EnterpriseBeanSpecializationTest.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java
ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java
Log:
EjbMetaData -> EjbDescriptor + mock
Pete, please review for sanity:
* I added a singleton EjbDescriptorCache, they are probably best kept somewhere else(?)
* I misuse the ejb name currently, grep for "/local"
* The EnterpriseBean shouldn't pull its own metadata(?)"
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/MetaDataCache.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -20,12 +20,10 @@
import java.lang.annotation.Annotation;
import java.util.concurrent.Callable;
-import org.jboss.webbeans.ejb.EjbMetaData;
import org.jboss.webbeans.model.BindingTypeModel;
import org.jboss.webbeans.model.ScopeModel;
import org.jboss.webbeans.model.StereotypeModel;
import org.jboss.webbeans.util.ConcurrentCache;
-import org.jboss.webbeans.util.Strings;
/**
* Metadata singleton for holding EJB metadata, scope models etc.
@@ -59,8 +57,6 @@
private ConcurrentCache<Class<? extends Annotation>, ScopeModel<?>> scopes = new ConcurrentCache<Class<? extends Annotation>, ScopeModel<?>>();
// The binding type models
private ConcurrentCache<Class<? extends Annotation>, BindingTypeModel<?>> bindingTypes = new ConcurrentCache<Class<? extends Annotation>, BindingTypeModel<?>>();
- // EJB metadata
- private ConcurrentCache<Class<?>, EjbMetaData<?>> ejbMetaDataMap = new ConcurrentCache<Class<?>, EjbMetaData<?>>();
/**
* Gets a stereotype model
@@ -128,28 +124,6 @@
}
/**
- * Gets metadata for an EJB
- *
- * Adds the model if it is not present
- *
- * @param <T> The type
- * @param clazz The class of the EJB
- * @return The EJB metadata
- */
- public <T> EjbMetaData<T> getEjbMetaData(final Class<T> clazz)
- {
- return ejbMetaDataMap.putIfAbsent(clazz, new Callable<EjbMetaData<T>>()
- {
-
- public EjbMetaData<T> call() throws Exception
- {
- return new EjbMetaData<T>(clazz);
- }
-
- });
- }
-
- /**
* Gets a string representation
*
* @return A string representation
@@ -162,22 +136,7 @@
buffer.append("Registered binding type models: " + bindingTypes.size() + "\n");
buffer.append("Registered scope type models: " + scopes.size() + "\n");
buffer.append("Registered stereotype models: " + stereotypes.size() + "\n");
- buffer.append("Registered EJB metadata: " + ejbMetaDataMap.size() + "\n");
return buffer.toString();
}
- public String toDetailedString()
- {
- StringBuilder buffer = new StringBuilder();
- buffer.append("====================\n");
- buffer.append("Metadata cache\n");
- buffer.append("====================\n");
- buffer.append(bindingTypes.toString() + "\n");
- buffer.append(ejbMetaDataMap.toString() + "\n");
- buffer.append(scopes.toString() + "\n");
- buffer.append(Strings.mapToString("Stereotypes: ", stereotypes));
- buffer.append("====================\n");
- return buffer.toString();
- }
-
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/EnterpriseBean.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -17,6 +17,9 @@
package org.jboss.webbeans.bean;
+import java.util.HashSet;
+import java.util.Set;
+
import javax.webbeans.ApplicationScoped;
import javax.webbeans.Decorator;
import javax.webbeans.DefinitionException;
@@ -32,16 +35,15 @@
import javax.webbeans.manager.Manager;
import org.jboss.webbeans.ManagerImpl;
-import org.jboss.webbeans.MetaDataCache;
+import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
import org.jboss.webbeans.contexts.DependentContext;
import org.jboss.webbeans.ejb.EJB;
-import org.jboss.webbeans.ejb.EjbMetaData;
+import org.jboss.webbeans.ejb.EjbDescriptorCache;
import org.jboss.webbeans.introspector.AnnotatedField;
import org.jboss.webbeans.introspector.AnnotatedMethod;
import org.jboss.webbeans.introspector.AnnotatedParameter;
import org.jboss.webbeans.log.LogProvider;
import org.jboss.webbeans.log.Logging;
-import org.jboss.webbeans.util.Names;
/**
* An enterprise bean representation
@@ -52,11 +54,10 @@
*/
public class EnterpriseBean<T> extends AbstractClassBean<T>
{
-
private LogProvider log = Logging.getLogProvider(EnterpriseBean.class);
+
+ private EjbDescriptor<T> ejbDescriptor;
- private EjbMetaData<T> ejbMetaData;
-
/**
* Constructor
*
@@ -72,11 +73,12 @@
/**
* Initializes the bean and its metadata
*/
+ @SuppressWarnings("unchecked")
@Override
protected void init()
{
super.init();
- ejbMetaData = MetaDataCache.instance().getEjbMetaData(getType());
+ ejbDescriptor = (EjbDescriptor<T>) EjbDescriptorCache.instance().get(getType().getSimpleName() + "/local");
initRemoveMethod();
initInjectionPoints();
checkEnterpriseBeanTypeAllowed();
@@ -123,11 +125,11 @@
*/
protected void checkEnterpriseScopeAllowed()
{
- if (getEjbMetaData().isStateless() && !getScopeType().equals(Dependent.class))
+ if (ejbDescriptor.isStateless() && !getScopeType().equals(Dependent.class))
{
throw new DefinitionException("Scope " + getScopeType() + " is not allowed on stateless enterpise beans for " + getType() + ". Only @Dependent is allowed on stateless enterprise beans");
}
- if (getEjbMetaData().isSingleton() && (!(getScopeType().equals(Dependent.class) || getScopeType().equals(ApplicationScoped.class))))
+ if (ejbDescriptor.isSingleton() && (!(getScopeType().equals(Dependent.class) || getScopeType().equals(ApplicationScoped.class))))
{
throw new DefinitionException("Scope " + getScopeType() + " is not allowed on singleton enterpise beans for " + getType() + ". Only @Dependent or @ApplicationScoped is allowed on singleton enterprise beans");
}
@@ -142,7 +144,7 @@
{
return;
}
- if (!MetaDataCache.instance().getEjbMetaData(getAnnotatedItem().getSuperclass().getType()).isEjb())
+ if (!EJB.isEjb(getType().getSuperclass()))
{
throw new DefinitionException("Annotation defined specializing EJB must have EJB superclass");
}
@@ -153,22 +155,23 @@
*/
protected void initRemoveMethod()
{
- if (!getEjbMetaData().isStateful())
+ if (!ejbDescriptor.isStateful())
{
// Nothing to do for stateless enterprise beans;
return;
}
// >1 @Destructor
- if (getEjbMetaData().getDestructorMethods().size() > 1)
+ if (getAnnotatedItem().getAnnotatedMethods(Destructor.class).size() > 1)
{
throw new DefinitionException("Multiple @Destructor methods not allowed on " + getAnnotatedItem());
}
// <1 (0) @Destructors
- if (getEjbMetaData().getNoArgsRemoveMethods().size() == 1)
+ Set<AnnotatedMethod<Object>> noArgsRemoveMethods = getNoArgsRemoveMethods();
+ if (noArgsRemoveMethods.size() == 1)
{
- super.removeMethod = getEjbMetaData().getNoArgsRemoveMethods().get(0);
+ super.removeMethod = noArgsRemoveMethods.iterator().next();
return;
}
@@ -179,6 +182,19 @@
}
+ private Set<AnnotatedMethod<Object>> getNoArgsRemoveMethods()
+ {
+ Set<AnnotatedMethod<Object>> noArgsRemoveMethods = new HashSet<AnnotatedMethod<Object>>();
+ for (AnnotatedMethod<Object> removeMethod : getAnnotatedItem().getAnnotatedMethods(EJB.REMOVE_ANNOTATION))
+ {
+ if (removeMethod.getParameters().isEmpty())
+ {
+ noArgsRemoveMethods.add(removeMethod);
+ }
+ }
+ return noArgsRemoveMethods;
+ }
+
/**
* Validates the remove method
*/
@@ -223,7 +239,7 @@
try
{
DependentContext.INSTANCE.setActive(true);
- T instance = (T) manager.getInstanceByType(EnterpriseBeanLookup.class).lookup(ejbMetaData.getEjbName());
+ T instance = (T) manager.getInstanceByType(EnterpriseBeanLookup.class).lookup(ejbDescriptor.getEjbName());
bindDecorators();
bindInterceptors();
injectEjbAndCommonFields();
@@ -304,7 +320,7 @@
@Override
protected AbstractBean<? extends T, Class<T>> getSpecializedType()
{
- // TODO lots of validation!
+ // TODO: lots of validation!
Class<?> superclass = getAnnotatedItem().getType().getSuperclass();
if (superclass != null)
{
@@ -323,23 +339,13 @@
*/
private void checkEnterpriseBeanTypeAllowed()
{
- if (getEjbMetaData().isMessageDriven())
+ if (ejbDescriptor.isMessageDriven())
{
throw new DefinitionException("Message Driven Beans can't be Web Beans");
}
}
/**
- * Gets the EJB metadata
- *
- * @return The metadata
- */
- protected EjbMetaData<T> getEjbMetaData()
- {
- return ejbMetaData;
- }
-
- /**
* Gets a string representation
*
* @return The string representation
@@ -348,7 +354,8 @@
public String toString()
{
StringBuilder buffer = new StringBuilder();
- buffer.append("Annotated " + Names.scopeTypeToString(getScopeType()) + Names.ejbTypeFromMetaData(getEjbMetaData()));
+ // buffer.append("Annotated " + Names.scopeTypeToString(getScopeType()) +
+ // Names.ejbTypeFromMetaData(getEjbMetaData()));
if (getName() == null)
{
buffer.append(" unnamed enterprise bean");
@@ -362,13 +369,4 @@
return buffer.toString();
}
- public String toDetailedString()
- {
- StringBuilder buffer = new StringBuilder();
- buffer.append("EnterpriseBean:\n");
- buffer.append(super.toString() + "\n");
- buffer.append(ejbMetaData.toString() + "\n");
- return buffer.toString();
- }
-
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -46,7 +46,6 @@
import org.jboss.webbeans.CurrentManager;
import org.jboss.webbeans.ManagerImpl;
-import org.jboss.webbeans.MetaDataCache;
import org.jboss.webbeans.bean.AbstractBean;
import org.jboss.webbeans.bean.AbstractClassBean;
import org.jboss.webbeans.bean.BeanFactory;
@@ -58,6 +57,8 @@
import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
import org.jboss.webbeans.contexts.DependentContext;
import org.jboss.webbeans.ejb.DefaultEnterpriseBeanLookup;
+import org.jboss.webbeans.ejb.EJB;
+import org.jboss.webbeans.ejb.EjbDescriptorCache;
import org.jboss.webbeans.event.ObserverImpl;
import org.jboss.webbeans.introspector.AnnotatedField;
import org.jboss.webbeans.introspector.AnnotatedItem;
@@ -138,7 +139,7 @@
Set<AbstractBean<?, ?>> beans = new HashSet<AbstractBean<?, ?>>();
for (Class<?> clazz : classes)
{
- if (MetaDataCache.instance().getEjbMetaData(clazz).isEjb())
+ if (EJB.isEjb(clazz))
{
createBean(createEnterpriseBean(clazz, manager), beans);
}
@@ -153,6 +154,7 @@
return beans;
}
+
public void createBean(AbstractClassBean<?> bean, Set<AbstractBean<?, ?>> beans)
{
beans.add(bean);
@@ -218,6 +220,7 @@
throw new IllegalStateException("No WebBeanDiscovery provider found, you need to implement the org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery interface, and tell the RI to use it by specifying -D" + WebBeansBootstrap.WEB_BEAN_DISCOVERY_PROPERTY_NAME + "=<classname>");
}
registerBeans(webBeanDiscovery.discoverWebBeanClasses());
+ EjbDescriptorCache.instance().setEjbDescriptors(webBeanDiscovery.discoverEjbs());
log.info("Validing Web Bean injection points");
manager.getResolver().resolveInjectionPoints();
manager.fireEvent(manager, new InitializedBinding());
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/spi/EjbDescriptor.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -67,12 +67,22 @@
* @return An iterator over the remote business interfaces
*/
public Iterator<BusinessInterfaceDescriptor> getRemoteBusinessInterfaces();
-
+
/**
* Get the remove methods of the EJB
*
* @return An iterator the remove methods
*/
public Iterator<Method> getRemoveMethods();
+
+ public boolean isStateless();
+
+ public boolean isSingleton();
+
+ public boolean isStateful();
+
+ public boolean isMessageDriven();
+
+ public String getEjbName();
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/DefaultEnterpriseBeanLookup.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/DefaultEnterpriseBeanLookup.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/DefaultEnterpriseBeanLookup.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -17,18 +17,13 @@
package org.jboss.webbeans.ejb;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
import javax.webbeans.CreationException;
import javax.webbeans.Standard;
import javax.webbeans.manager.EnterpriseBeanLookup;
+import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
import org.jboss.webbeans.util.JNDI;
-import org.jboss.webbeans.util.Strings;
-import com.google.common.collect.ForwardingMap;
-
/**
* Provides lookup and metadata registration services for EJBs
*
@@ -38,69 +33,22 @@
@Standard
public class DefaultEnterpriseBeanLookup implements EnterpriseBeanLookup
{
- /**
- * An EJB name -> metadata map
- */
- private class EjbMetaDataMap extends ForwardingMap<String, EjbMetaData<?>>
- {
- private Map<String, EjbMetaData<?>> delegate;
- public EjbMetaDataMap()
- {
- delegate = new ConcurrentHashMap<String, EjbMetaData<?>>();
- }
-
- @Override
- protected Map<String, EjbMetaData<?>> delegate()
- {
- return delegate;
- }
-
- @Override
- public String toString()
- {
- return Strings.mapToString("EjbMetaDataMap (EJB name -> metadata): ", delegate);
- }
- }
-
- // A map from EJB name to EJB metadata
- private EjbMetaDataMap ejbMetaDataMap = new EjbMetaDataMap();
-
- /**
- * Looks up and EJB based on the name
- *
- * Gets the EJB metadata and calls helper method
- *
- * @param ejbName The EJB name
- * @return The EJB local home interface
- * @see javax.webbeans.manager.EnterpriseBeanLookup#lookup(String)
- */
public Object lookup(String ejbName)
{
if (ejbName == null)
+ {
throw new NullPointerException("No EJB name supplied for lookup");
- return lookup(ejbMetaDataMap.get(ejbName));
+ }
+ return lookup(EjbDescriptorCache.instance().get(ejbName));
}
- /**
- * Looks up an EJB
- *
- * First tried the EJB link JNDI name, if available, then the default JNDI
- * name. Throws an CreationException if it isn't found.
- *
- * @param <T> The type of the EJB
- * @param ejbMetaData The EJB metadata
- * @return The EJB local interface
- */
- public static <T> T lookup(EjbMetaData<T> ejbMetaData)
+ @SuppressWarnings("unchecked")
+ public static <T> T lookup(EjbDescriptor<T> ejbDescriptor)
{
try
{
- if (ejbMetaData.getEjbLinkJndiName() != null)
- {
- return JNDI.lookup(ejbMetaData.getEjbLinkJndiName(), ejbMetaData.getType());
- }
- return JNDI.lookup(ejbMetaData.getDefaultJndiName(), ejbMetaData.getType());
+ return (T) JNDI.lookup(ejbDescriptor.getEjbName());
}
catch (Exception e)
{
@@ -108,17 +56,4 @@
}
}
- // TODO: this method needs to get called at startup
- /**
- * Creates and registers EJB metadata for a class
- *
- * @param clazz The EJB class
- * @return the EJB metadata
- */
- public <T> EjbMetaData<T> registerEjbMetaData(Class<T> clazz)
- {
- EjbMetaData<T> ejbMetaData = new EjbMetaData<T>(clazz);
- ejbMetaDataMap.put(ejbMetaData.getEjbName(), ejbMetaData);
- return ejbMetaData;
- }
}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EJB.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -54,5 +54,11 @@
REMOVE_ANNOTATION = annotationTypeForName("javax.ejb.Remove");
ENTERPRISE_BEAN_CLASS = classForName("javax.ejb.EnterpriseBean");
}
+
+ public static boolean isEjb(Class<?> clazz)
+ {
+ return clazz.isAnnotationPresent(STATEFUL_ANNOTATION) || clazz.isAnnotationPresent(STATELESS_ANNOTATION) || clazz.isAnnotationPresent(SINGLETON_ANNOTATION);
+ }
+
}
Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbDescriptorCache.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -0,0 +1,65 @@
+package org.jboss.webbeans.ejb;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
+import org.jboss.webbeans.test.mock.MockEjbDescriptor;
+import org.jboss.webbeans.util.Strings;
+
+import com.google.common.collect.ForwardingMap;
+
+public class EjbDescriptorCache
+{
+ private static EjbDescriptorCache instance;
+
+ public static EjbDescriptorCache instance()
+ {
+ return instance;
+ }
+
+ static
+ {
+ instance = new EjbDescriptorCache();
+ }
+
+ private class EjbDescriptorMap extends ForwardingMap<String, EjbDescriptor<?>>
+ {
+ private Map<String, EjbDescriptor<?>> delegate;
+
+ public EjbDescriptorMap()
+ {
+ delegate = new ConcurrentHashMap<String, EjbDescriptor<?>>();
+ }
+
+ @Override
+ protected Map<String, EjbDescriptor<?>> delegate()
+ {
+ return delegate;
+ }
+
+ @Override
+ public String toString()
+ {
+ return Strings.mapToString("EjbMetaDataMap (EJB name -> metadata): ", delegate);
+ }
+ }
+
+ private EjbDescriptorMap ejbDescriptorMap = new EjbDescriptorMap();
+
+ public void setEjbDescriptors(Map<String, EjbDescriptor<?>> ejbDescriptorMap)
+ {
+ ejbDescriptorMap.putAll(ejbDescriptorMap);
+ }
+
+ public EjbDescriptor<?> get(String ejbName)
+ {
+ return ejbDescriptorMap.get(ejbName);
+ }
+
+ public void addEjbDescriptor(String ejbName, EjbDescriptor<?> ejbDescriptor)
+ {
+ ejbDescriptorMap.put(ejbName, ejbDescriptor);
+ }
+
+}
Deleted: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/ejb/EjbMetaData.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -1,276 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed 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.jboss.webbeans.ejb;
-
-import static org.jboss.webbeans.ejb.EJB.FAKE_MESSAGE_DRIVEN_ANNOTATION;
-import static org.jboss.webbeans.ejb.EJB.MESSAGE_DRIVEN_ANNOTATION;
-import static org.jboss.webbeans.ejb.EJB.REMOVE_ANNOTATION;
-import static org.jboss.webbeans.ejb.EJB.SINGLETON_ANNOTATION;
-import static org.jboss.webbeans.ejb.EJB.STATEFUL_ANNOTATION;
-import static org.jboss.webbeans.ejb.EJB.STATELESS_ANNOTATION;
-import static org.jboss.webbeans.ejb.EjbMetaData.EjbType.MESSAGE_DRIVEN;
-import static org.jboss.webbeans.ejb.EjbMetaData.EjbType.SINGLETON;
-import static org.jboss.webbeans.ejb.EjbMetaData.EjbType.STATEFUL;
-import static org.jboss.webbeans.ejb.EjbMetaData.EjbType.STATELESS;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.webbeans.DefinitionException;
-import javax.webbeans.Destructor;
-
-import org.jboss.webbeans.introspector.AnnotatedClass;
-import org.jboss.webbeans.introspector.AnnotatedMethod;
-import org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl;
-import org.jboss.webbeans.util.Strings;
-
-/**
- * EJB metadata
- *
- * @author Pete Muir
- *
- * @param <T>
- */
-public class EjbMetaData<T>
-{
- // The known EJB types
- public enum EjbType
- {
- STATELESS, STATEFUL, SINGLETON, MESSAGE_DRIVEN;
- }
-
- // The type of the EJB
- private EjbType ejbType;
- // The remove methods
- private List<AnnotatedMethod<Object>> removeMethods = new ArrayList<AnnotatedMethod<Object>>();
- // The destructor methods
- private List<AnnotatedMethod<Object>> destructorMethods = new ArrayList<AnnotatedMethod<Object>>();
- // The remove methods with no arguments
- private List<AnnotatedMethod<Object>> noArgsRemoveMethods = new ArrayList<AnnotatedMethod<Object>>();
-
- // TODO Populate this from web.xml
- // The EJB link jndi name
- private String ejbLinkJndiName;
-
- // TODO Initialize this based on the EJB 3.1 spec
- // The default JNDI name
- private String defaultJndiName;
-
- // TODO Initialize the ejb name
- // The EJB name
- private String ejbName;
-
- // The abstracted type
- private AnnotatedClass<T> type;
-
- /**
- * Constrcutor
- *
- * Creates a new abstracted class and delegates to another constructor
- *
- * @param type The type
- */
- public EjbMetaData(Class<T> type)
- {
- this(new AnnotatedClassImpl<T>(type));
- }
-
- /**
- * Constructor
- *
- * Initializes the class based on information from the abstracted class.
- * Detects the EJB type and remove/destructor methods
- *
- * @param type The abstracted class
- */
- public EjbMetaData(AnnotatedClass<T> type)
- {
- // TODO Merge in ejb-jar.xml
- this.type = type;
- if (type.isAnnotationPresent(STATELESS_ANNOTATION))
- {
- this.ejbType = STATELESS;
- // TODO Has to be done here? If they are not parsed, they can't be
- // detected later on (EnterpriseBean remove method init)
- if (type.getAnnotatedMethods(Destructor.class).size() > 0)
- {
- throw new DefinitionException("Stateless enterprise beans cannot have @Destructor methods");
- }
- }
- else if (type.isAnnotationPresent(STATEFUL_ANNOTATION))
- {
- this.ejbType = STATEFUL;
- for (AnnotatedMethod<Object> removeMethod : type.getAnnotatedMethods(REMOVE_ANNOTATION))
- {
- removeMethods.add(removeMethod);
- if (removeMethod.getParameters().size() == 0)
- {
- noArgsRemoveMethods.add(removeMethod);
- }
- }
- for (AnnotatedMethod<Object> destructorMethod : type.getAnnotatedMethods(Destructor.class))
- {
- destructorMethods.add(destructorMethod);
- }
- }
- else if (type.isAnnotationPresent(MESSAGE_DRIVEN_ANNOTATION) || type.isAnnotationPresent(FAKE_MESSAGE_DRIVEN_ANNOTATION))
- {
- this.ejbType = MESSAGE_DRIVEN;
- }
- else if (type.isAnnotationPresent(SINGLETON_ANNOTATION))
- {
- this.ejbType = SINGLETON;
- }
- }
-
- /**
- * Indicates if the EJB is a stateless one
- *
- * @return True if stateless, false otherwise
- */
- public boolean isStateless()
- {
- return STATELESS.equals(ejbType);
- }
-
- /**
- * Indicates if the EJB is a stateful one
- *
- * @return True if stateful, false otherwise
- */
- public boolean isStateful()
- {
- return STATEFUL.equals(ejbType);
- }
-
- /**
- * Indicates if the EJB is a MDB
- *
- * @return True if MDB, false otherwise
- */
- public boolean isMessageDriven()
- {
- return MESSAGE_DRIVEN.equals(ejbType);
- }
-
- /**
- * Indicates if the EJB is a singleton
- *
- * @return True if singleton, false otherwise
- */
- public boolean isSingleton()
- {
- return SINGLETON.equals(ejbType);
- }
-
- /**
- * Indicates if class really is of a know EJB type
- *
- * @return True if EJB, false otherwise
- */
-
- public boolean isEjb()
- {
- return ejbType != null;
- }
-
- /**
- * Gets the EJB link JNDI name
- *
- * @return The name
- */
- public String getEjbLinkJndiName()
- {
- return ejbLinkJndiName;
- }
-
- /**
- * Gets the default JNDI name
- *
- * @return The name
- */
- public String getDefaultJndiName()
- {
- return defaultJndiName;
- }
-
- /**
- * Gets the EJB name
- *
- * @return The name
- */
- public String getEjbName()
- {
- return ejbName;
- }
-
- public Class<T> getType()
- {
- return type.getType();
- }
-
- /**
- * Gets the list of remove method abstractions
- *
- * @return The list of remove methods. An empty list is returned if there are
- * none.
- */
- public List<AnnotatedMethod<Object>> getRemoveMethods()
- {
- return removeMethods;
- }
-
- /**
- * Gets a list of destructor method abstractions
- *
- * @return The list of destructor methods. An empty list is returned if there
- * are none.
- */
- public List<AnnotatedMethod<Object>> getDestructorMethods()
- {
- return destructorMethods;
- }
-
- /**
- * Gets the list of remove method abstractions that take no arguments
- *
- * @return The list of remove methods without arguments. An empty list is
- * returned if there are none.
- */
- public List<AnnotatedMethod<Object>> getNoArgsRemoveMethods()
- {
- return noArgsRemoveMethods;
- }
-
- @Override
- public String toString()
- {
- StringBuilder buffer = new StringBuilder();
- buffer.append("EJB metadata model\n");
- buffer.append("EJB name: " + ejbName + "\n");
- buffer.append("EJB type: " + ejbType + "\n");
- buffer.append("EJB link JNDI name " + ejbLinkJndiName + "\n");
- buffer.append("Default JNDI name: " + defaultJndiName + "\n");
- buffer.append("Type: " + type.toString() + "\n");
- buffer.append(Strings.collectionToString("Desctructor methods: ", getDestructorMethods()));
- buffer.append(Strings.collectionToString("Remove methods: ", getRemoveMethods()));
- buffer.append(Strings.collectionToString("No-args remove methods: ", getNoArgsRemoveMethods()));
- return buffer.toString();
- }
-
-}
Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Names.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Names.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/Names.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -11,8 +11,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.jboss.webbeans.ejb.EjbMetaData;
-
/**
* Utility class to produce friendly names e.g. for debugging
*
@@ -43,33 +41,6 @@
}
/**
- * Gets EJB type from metadata
- *
- * @param ejbMetaData The EJB meta data
- * @return The EJB type
- */
- public static String ejbTypeFromMetaData(EjbMetaData<?> ejbMetaData)
- {
- if (ejbMetaData.isMessageDriven())
- {
- return "message driven";
- }
- else if (ejbMetaData.isSingleton())
- {
- return "singleton";
- }
- else if (ejbMetaData.isStateful())
- {
- return "stateful";
- }
- else if (ejbMetaData.isStateless())
- {
- return "stateless";
- }
- return "unknown";
- }
-
- /**
* Counts item in an iteratble
*
* @param iterable The iteraboe
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/BoostrapTest.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -210,7 +210,7 @@
@Test(groups="bootstrap")
public void testDiscover()
{
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(Hound.class, Elephant.class, Panther.class, Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class)), null, null));
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(Hound.class, Elephant.class, Panther.class, Tiger.class, Tuna.class, Salmon.class, SeaBass.class, Sole.class)), null, new HashSet<Class<?>>()));
assert manager.getBeans().size() == 8 + MockManagerImpl.BUILT_IN_BEANS;
Map<Class<?>, Bean<?>> classes = new HashMap<Class<?>, Bean<?>>();
@@ -244,22 +244,21 @@
public void testInitializedEvent()
{
assert !InitializedObserver.observered;
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(InitializedObserver.class)), null, new HashSet<Class<?>>()));
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(InitializedObserver.class)), null, null));
-
assert InitializedObserver.observered;
}
@Test(groups="bootstrap")
public void testRequestContextActiveDuringInitializtionEvent()
{
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(InitializedObserverWhichUsesRequestContext.class, Tuna.class)), null, null));
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(InitializedObserverWhichUsesRequestContext.class, Tuna.class)), null, new HashSet<Class<?>>()));
}
@Test(groups="bootstrap")
public void testApplicationContextActiveDuringInitializtionEvent()
{
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(InitializedObserverWhichUsesApplicationContext.class, LadybirdSpider.class)), null, null));
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(InitializedObserverWhichUsesApplicationContext.class, LadybirdSpider.class)), null, new HashSet<Class<?>>()));
}
}
Deleted: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EjbMetaDataTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EjbMetaDataTest.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EjbMetaDataTest.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -1,36 +0,0 @@
-package org.jboss.webbeans.test;
-
-import org.jboss.webbeans.ejb.EjbMetaData;
-import org.jboss.webbeans.test.beans.Leopard;
-import org.jboss.webbeans.test.beans.Lion;
-import org.jboss.webbeans.test.beans.Tiger;
-import org.testng.annotations.Test;
-
-public class EjbMetaDataTest
-{
-
- @Test
- public void testStateless()
- {
- EjbMetaData<Lion> lion = new EjbMetaData<Lion>(Lion.class);
- assert lion.isStateless();
- assert lion.getRemoveMethods().isEmpty();
- }
-
- @Test
- public void testStateful()
- {
- EjbMetaData<Tiger> tiger = new EjbMetaData<Tiger>(Tiger.class);
- assert tiger.isStateful();
- assert tiger.getRemoveMethods().size() == 1;
- }
-
- @Test
- public void testMessageDriven()
- {
- EjbMetaData<Leopard> leopard = new EjbMetaData<Leopard>(Leopard.class);
- assert leopard.isMessageDriven();
- assert leopard.getRemoveMethods().isEmpty();
- }
-
-}
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-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/SimpleBeanModelTest.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -1,7 +1,5 @@
package org.jboss.webbeans.test;
-import static org.jboss.webbeans.bean.BeanFactory.createSimpleBean;
-
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.HashMap;
@@ -41,6 +39,7 @@
import org.jboss.webbeans.test.mock.MockManagerImpl;
import org.jboss.webbeans.test.mock.MockWebBeanDiscovery;
import org.testng.annotations.Test;
+import static org.jboss.webbeans.bean.BeanFactory.*;
@SpecVersion("20081206")
public class SimpleBeanModelTest extends AbstractTest
@@ -88,21 +87,21 @@
@Test
public void testClassesImplementingServletInterfacesNotDiscoveredAsSimpleBeans()
{
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(FilterBean.class, HttpSessionListenerBean.class, ServletBean.class, ServletContextListenerBean.class, ServletRequestListenerBean.class)), null, null));
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(FilterBean.class, HttpSessionListenerBean.class, ServletBean.class, ServletContextListenerBean.class, ServletRequestListenerBean.class)), null, new HashSet<Class<?>>()));
assert manager.getBeans().size() == MockManagerImpl.BUILT_IN_BEANS;
}
@Test
public void testClassesImplementingEnterpriseBeanInterfaceNotDiscoveredAsSimpleBean()
{
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(EnterpriseBeanWebBean.class)), null, null));
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(EnterpriseBeanWebBean.class)), null, new HashSet<Class<?>>()));
assert manager.getBeans().size() == MockManagerImpl.BUILT_IN_BEANS;
}
@Test
public void testClassExtendingUiComponentNotDiscoveredAsSimpleBean()
{
- webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(UIComponentBean.class)), null, null));
+ webBeansBootstrap.boot(new MockWebBeanDiscovery(new HashSet<Class<?>>(Arrays.asList(UIComponentBean.class)), null, new HashSet<Class<?>>()));
assert manager.getBeans().size() == MockManagerImpl.BUILT_IN_BEANS;
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/contexts/NormalContextTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/contexts/NormalContextTest.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/contexts/NormalContextTest.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -1,25 +1,11 @@
package org.jboss.webbeans.test.contexts;
-import static org.jboss.webbeans.bean.BeanFactory.createProducerMethodBean;
-import static org.jboss.webbeans.bean.BeanFactory.createSimpleBean;
-
-import java.lang.reflect.Method;
-
-import javax.webbeans.ContextNotActiveException;
-import javax.webbeans.manager.Bean;
import javax.webbeans.manager.Context;
-import org.jboss.webbeans.bean.BeanFactory;
-import org.jboss.webbeans.bean.ProducerMethodBean;
-import org.jboss.webbeans.bean.SimpleBean;
-import org.jboss.webbeans.contexts.AbstractContext;
import org.jboss.webbeans.contexts.RequestContext;
import org.jboss.webbeans.test.AbstractTest;
import org.jboss.webbeans.test.SpecAssertion;
import org.jboss.webbeans.test.SpecVersion;
-import org.jboss.webbeans.test.beans.SpiderProducer;
-import org.jboss.webbeans.test.beans.Tarantula;
-import org.jboss.webbeans.test.beans.Tuna;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -28,53 +14,161 @@
* @author Nicklas Karlsson (nickarls at gmail.com)
* @author Pete Muir
*
- * This class tests a basic context against section 8 of the specification
- *
+ * This class tests a basic context against section 8 of the
+ * specification
+ *
*/
- at SpecVersion("PDR")
+ at SpecVersion("20081206")
public class NormalContextTest extends AbstractTest
{
Context context;
-
+
@BeforeMethod
- public void initContext() {
- context = new RequestContext() {};
+ public void initContext()
+ {
+ context = new RequestContext()
+ {
+ };
}
-
- @Test(groups="contexts") @SpecAssertion(section="8.1")
- public void testGetWithCreateFalseReturnsNull() {
- Bean<Tuna> tunaBean = BeanFactory.createSimpleBean(Tuna.class, manager);
- assert context.get(tunaBean, false) == null;
+
+ /**
+ * return an existing instance of the given contextual type, or
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testGetReturnsExistingInstace()
+ {
+ assert false;
}
- @Test(groups="contexts") @SpecAssertion(section="8.1")
- public void testGetWithCreateTrueReturnsBean() {
- Bean<Tuna> tunaBean = BeanFactory.createSimpleBean(Tuna.class, manager);
- assert context.get(tunaBean, true) != null;
+ /**
+ * if the value of the create parameter is false, return a null value, or
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testGetWithCreateFalseReturnsNull()
+ {
+ assert false;
}
-
- @Test(groups="contexts", expectedExceptions=ContextNotActiveException.class) @SpecAssertion(section="8.1")
- public void testInactiveContextThrowsContextNotActiveException() {
- ((AbstractContext)context).setActive(false);
- context.get(null, false);
- assert true;
+
+ /**
+ * if the value of the create parameter is true, create a new instance of the
+ * given contextual type by calling Bean.create() and return the new
+ * instance.
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testGetWithCreateTrueReturnsNewInstance()
+ {
+ assert false;
}
-
- @Test(groups="contexts") @SpecAssertion(section="8.1")
- public void testReturnsCorrectExistingBean() {
- Bean<Tuna> tunaBean = BeanFactory.createSimpleBean(Tuna.class, manager);
- Tuna firstTuna = context.get(tunaBean, true);
- Tuna secondTuna = context.get(tunaBean, false);
- assert firstTuna == secondTuna;
+
+ /**
+ * The get() method may not return a null value unless the create parameter
+ * is false or Contextual.create() returns a null value
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testGetMayNotReturnNullUnlessCreateIsFalseOrContextualCreateReturnsNull()
+ {
+ assert false;
}
- @Test(groups={"contexts", "producerMethod"}) @SpecAssertion(section="8.1")
- public void testProducerMethodReturningNullOK() throws SecurityException, NoSuchMethodException {
- SimpleBean<SpiderProducer> producer = createSimpleBean(SpiderProducer.class, manager);
- manager.addBean(producer);
- Method nullProducer = SpiderProducer.class.getMethod("produceShelob");
- ProducerMethodBean<Tarantula> shelobBean = createProducerMethodBean(Tarantula.class, nullProducer, producer, manager);
- assert shelobBean.create() == null;
+ /**
+ * The get() method may not create a new instance of the given contextual
+ * type unless the create parameter is true
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testGetMayNotCreateNewInstanceUnlessCreateIsTrue()
+ {
+ assert false;
}
-
+
+ /**
+ * The Context implementation is responsible for destroying any contextual
+ * instance it creates by passing the instance to the destroy() method of the
+ * Contextual object representing the contextual type.
+ */
+ public void testContextDestroysBeansWhenDestroyed()
+ {
+ assert false;
+ }
+
+ /**
+ * A destroyed instance must not subsequently be returned by the get()
+ * method.
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testDestroyedInstanceMustNotBeReturnedByGet()
+ {
+ assert false;
+ }
+
+ /**
+ * When a scope is inactive, any invocation of the get() from the current
+ * thread upon the Context object for that scope results in a
+ * ContextNotActiveException.
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.2")
+ public void testInvokingGetOnInactiveContextFails()
+ {
+ assert false;
+ }
+
+ /**
+ * There may be no more than one mapped instance per contextual type per
+ * thread
+ */
+ @Test(groups = { "contexts", "stub" })
+ @SpecAssertion(section = "9.3")
+ public void testOnlyMappedInstancePerContextualTypePerThread()
+ {
+ assert false;
+ }
+
+ /*
+ * @Test(groups = "contexts")
+ *
+ * @SpecAssertion(section = "9.3") public void
+ * testGetWithCreateFalseReturnsNull() { Bean<Tuna> tunaBean =
+ * BeanFactory.createSimpleBean(Tuna.class, manager); assert
+ * context.get(tunaBean, false) == null; }
+ *
+ * @Test(groups = "contexts")
+ *
+ * @SpecAssertion(section = "8.1") public void
+ * testGetWithCreateTrueReturnsBean() { Bean<Tuna> tunaBean =
+ * BeanFactory.createSimpleBean(Tuna.class, manager); assert
+ * context.get(tunaBean, true) != null; }
+ *
+ * @Test(groups = "contexts", expectedExceptions =
+ * ContextNotActiveException.class)
+ *
+ * @SpecAssertion(section = "8.1") public void
+ * testInactiveContextThrowsContextNotActiveException() { ((AbstractContext)
+ * context).setActive(false); context.get(null, false); assert true; }
+ *
+ * @Test(groups = "contexts")
+ *
+ * @SpecAssertion(section = "8.1") public void
+ * testReturnsCorrectExistingBean() { Bean<Tuna> tunaBean =
+ * BeanFactory.createSimpleBean(Tuna.class, manager); Tuna firstTuna =
+ * context.get(tunaBean, true); Tuna secondTuna = context.get(tunaBean,
+ * false); assert firstTuna == secondTuna; }
+ *
+ * @Test(groups = { "contexts", "producerMethod" })
+ *
+ * @SpecAssertion(section = "8.1") public void
+ * testProducerMethodReturningNullOK() throws SecurityException,
+ * NoSuchMethodException { SimpleBean<SpiderProducer> producer =
+ * createSimpleBean(SpiderProducer.class, manager);
+ * manager.addBean(producer); Method nullProducer =
+ * SpiderProducer.class.getMethod("produceShelob");
+ * ProducerMethodBean<Tarantula> shelobBean =
+ * createProducerMethodBean(Tarantula.class, nullProducer, producer,
+ * manager); assert shelobBean.create() == null; }
+ */
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ejb/EnterpriseBeanSpecializationTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ejb/EnterpriseBeanSpecializationTest.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/ejb/EnterpriseBeanSpecializationTest.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -109,7 +109,7 @@
*/
@Test(expectedExceptions = DefinitionException.class, groups = { "stub", "specialization", "enterpriseBeans" })
@SpecAssertion(section = "3.3.6")
- public void EnabledSpecializationOverridesSpecialized()
+ public void testEnabledSpecializationOverridesSpecialized()
{
assert false;
}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockBootstrap.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -7,6 +7,8 @@
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.bean.AbstractBean;
import org.jboss.webbeans.bootstrap.WebBeansBootstrap;
+import org.jboss.webbeans.ejb.EJB;
+import org.jboss.webbeans.ejb.EjbDescriptorCache;
public class MockBootstrap extends WebBeansBootstrap
{
@@ -24,8 +26,15 @@
* @param classes The classes to create Web Beans from
* @return A set of Web Beans that represents the classes
*/
+ @SuppressWarnings("unchecked")
public Set<AbstractBean<?, ?>> createBeans(Class<?>... classes)
{
+ for (Class<?> clazz : classes) {
+ if (EJB.isEjb(clazz)) {
+ String ejbName = clazz.getSimpleName() + "/local";
+ EjbDescriptorCache.instance().addEjbDescriptor(ejbName, new MockEjbDescriptor(ejbName, clazz));
+ }
+ }
return createBeans(new HashSet<Class<?>>(Arrays.asList(classes)));
}
Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockEjbDescriptor.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -0,0 +1,75 @@
+package org.jboss.webbeans.test.mock;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import org.jboss.webbeans.bootstrap.spi.EjbDescriptor;
+import org.jboss.webbeans.ejb.EJB;
+
+public class MockEjbDescriptor<T> implements EjbDescriptor<T>
+{
+ private Class<T> type;
+ private String ejbName;
+
+ public MockEjbDescriptor(String ejbName, Class<T> type)
+ {
+ this.ejbName = ejbName;
+ this.type = type;
+ }
+
+ public String getEjbName()
+ {
+ return ejbName;
+ }
+
+ public Iterator<BusinessInterfaceDescriptor> getLocalBusinessInterfaces()
+ {
+ return new HashSet<BusinessInterfaceDescriptor>().iterator();
+ }
+
+ public Iterator<BusinessInterfaceDescriptor> getRemoteBusinessInterfaces()
+ {
+ return new HashSet<BusinessInterfaceDescriptor>().iterator();
+ }
+
+ public Iterator<Method> getRemoveMethods()
+ {
+ Collection<Method> removeMethods = new HashSet<Method>();
+ for (Method method : type.getMethods())
+ {
+ if (method.isAnnotationPresent(EJB.REMOVE_ANNOTATION))
+ {
+ removeMethods.add(method);
+ }
+ }
+ return removeMethods.iterator();
+ }
+
+ public Class<T> getType()
+ {
+ return type;
+ }
+
+ public boolean isMessageDriven()
+ {
+ return type.isAnnotationPresent(EJB.MESSAGE_DRIVEN_ANNOTATION);
+ }
+
+ public boolean isSingleton()
+ {
+ return type.isAnnotationPresent(EJB.SINGLETON_ANNOTATION);
+ }
+
+ public boolean isStateful()
+ {
+ return type.isAnnotationPresent(EJB.STATEFUL_ANNOTATION);
+ }
+
+ public boolean isStateless()
+ {
+ return type.isAnnotationPresent(EJB.STATELESS_ANNOTATION);
+ }
+
+}
Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java 2008-12-15 13:55:26 UTC (rev 531)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockWebBeanDiscovery.java 2008-12-16 07:36:02 UTC (rev 532)
@@ -11,21 +11,32 @@
public class MockWebBeanDiscovery implements WebBeanDiscovery
{
-
+
private Set<Class<?>> webBeanClasses = new HashSet<Class<?>>();
private Set<URL> webBeansXmlFiles = new HashSet<URL>();
-
- private Map<Class<?>, EjbDescriptor<?>> ejbs = new HashMap<Class<?>, EjbDescriptor<?>>();
-
- public MockWebBeanDiscovery(Set<Class<?>> webBeanClasses, Set<URL> webBeansXmlFiles, Map<Class<?>, EjbDescriptor<?>> ejbs)
+
+ private Map<String, EjbDescriptor<?>> ejbs = new HashMap<String, EjbDescriptor<?>>();
+
+ @SuppressWarnings("unchecked")
+ public MockWebBeanDiscovery(Set<Class<?>> webBeanClasses, Set<URL> webBeansXmlFiles, Set<Class<?>> ejbs)
{
super();
this.webBeanClasses = webBeanClasses;
this.webBeansXmlFiles = webBeansXmlFiles;
- this.ejbs = ejbs;
+ this.ejbs = new HashMap<String, EjbDescriptor<?>>();
+ for (Class<?> ejb : ejbs)
+ {
+ String ejbName = getEjbName(ejb);
+ this.ejbs.put(ejbName, new MockEjbDescriptor(ejbName, ejb));
+ }
}
+ private String getEjbName(Class<?> clazz)
+ {
+ return clazz.getSimpleName() + "/local";
+ }
+
public Iterable<Class<?>> discoverWebBeanClasses()
{
return webBeanClasses;
@@ -33,13 +44,13 @@
public Map<String, EjbDescriptor<?>> discoverEjbs()
{
- // TODO Implement EJB discovery for embedded EJB
- return null;
+ // TODO Auto-generated method stub
+ return new HashMap<String, EjbDescriptor<?>>();
}
public Iterable<URL> discoverWebBeansXml()
{
return webBeansXmlFiles;
}
-
+
}
More information about the weld-commits
mailing list