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.