Recenlty had some sort of technical discussion with colleagues, there was one point I wanted to argue about which I didn't. Let's assume we're still talking about EJB 2.0: 3 xmls and 3 classes, why is it so difficult to create or maintain EJBs? I'd hope they did think of the benefits of using EJB before they throw this idea saying that medium-scale j2ee application shouldn't make use of EJB.
I agreed that if customer required to use Tomcat/JBoss (any free open-source servers) to host their non-critical application, then we must not code any EJB. But what if they are running those commercial servers like Weblogic, Webphere and even one minute downtime is not affordable?
My colleagues complained a lot on the code provided by outsourced programmers, didn't they? Just imagine you want them to take care of additional low-level features like transaction handling, security, persistence, etc. Someone would probably think of using some other great third party frameworks like Hibernate, Spring now, yes you can do that, if and only if the framework is stable, easy to maintain, learning curve is not too high, extendable, scalable and flexible enough.
If EJB 2.0 is not really up to your expectation, proceed to EJB 3.0 then, let us stick to j2ee specs when developing standard j2ee application.