It seems that we are missing one use case of annotation processing.
e.g. if you specify a stateful bean in the ejb-jar.xml and have a bean without a top-level annotation like:
public class RemoveBean
{
@Remove
public void remove()
{
}
}
public JBoss50MetaData create(Collection<Class<?>> classes)
{
// Create meta data
JBoss50MetaData metaData = create();
for(EnterpriseBeanMetaData bean : ejbJarMetaData.getEnterpriseBeans())
{
Class<?> ejbClass = classLoader.loadClass(bean.getEjbClass());
if(! classes.contains(ejbClass))
{
if(bean.isSession())
{
SessionBeanMetaData sb = (SessionBeanMetaData) bean;
JBossSessionBeanMetaData sessionBean = new JBossSessionBeanMetaData();
sessionBean.setEjbName(sb.getEjbName());
sessionBean.setEjbClass(sb.getEjbClass());
if(sb.isStateful())
{
StatefulProcessor processor = new StatefulProcessor(finder);
sessionBean.setSessionType(SessionType.Stateful);
processor.process(sessionBean, ejbClass);
metaData.getEnterpriseBeans().add(sessionBean);
}
else
{
sessionBean.setSessionType(SessionType.Stateless);
// ...
}
}
else if(bean.isMessageDriven())
{
// ...
}
}
}
processMetaData(classes, metaData);
return metaData;
}
I don't see how this could be done differently. Make it so.