um auf die Frage zu den EJB's was zu sagen, müßte noch geklärt werden ob die Kernfunktionalität in irgendeiner Art und Weise verteilt zur Verfügung stehen muss.
Wenn nicht, dann sind EJB's nicht wirklich notwendig.
Es wird nur einen Apache-Webserver geben. Der Apache-Webserver wird die HTTP-Anforderungen an den Webcontainer (Tomcat) delegieren. Ich würde mal sagen, dass man mit EJBs auf jeden Fall besser dran ist, falls man später Load Balancing & Failover – Verfahren benötigt.
Ich habe gute Erfahrungen mit Spring gemacht. Ich würde erstmal die Serviceinterfaces definieren und ganz ohne Container die Kernfunktionalität inklusive Transaktionen implementieren.
Die EJB-Schicht kann man im nachhinein dann sehr einfach einziehen bzw. aufsetzen, genauso wie die Webserviceschicht und den Webclient. Zur Lastverteilung kann man ja dann die gesamte Applikation - also inkl. der Webapplikation - clustern. Das geht dann auch sehr einfach mit dem Apache.