Everything except portablity can be resolved using
XMBeans and interceptors or other approaches.
Portability is the biggest issue.
I'm going to need to pool my XMBeans. I figure when I deploy them I'll
need some counter attribute so they won't have the same ObjectNames.
However will I have to write my own Dispatcher type class so as to distribute the workload or is their something already in JBoss that I can use?
They are aimed at differernt things.
EJBs are for building amazon.com, ie fast, high volume, transactional processing.
MBEans are for building systems. JBoss EJB container is made out of MBeans.
In order to do guarantee EJB performance there are major limits placed on them such as no threads (killer). The main difference is that an EJB is not alive unless somebody is talking to it.
The downside is that you have to roll a lot of your own stuff in the MBEan world - but then thats why you are using them - you have the choice to make them do whatever you want
JMX Mbeans are just as much a standard as EJB are. If you avoid the obscure corners of the JBoss implementation then you stuff should work in most JMX containers. In real life EJBs are not very portable either