I don�t personally think that there is a simple or straightforward answer to your questions. I whish I could tell you in couple of sentences what went wrong with ejbs but the subject is little bit more complex than that. I may go later through some of those reasons if you whish. However in order to understand what I�m trying to say only remember that in little bit more than five years the ejb technology suffered couple of major refactorings and releases, trying to fill the gaps and improve. EJB 1.0 was little bit more than a disaster (especially entity ejbs) and sun "invented" local interfaces and improved the ORM capabilities of entity beans, filled up the asynchronous processing gap coming up with mdbs etc. No matter what, probably old ejb programmers could tell you that ejbs will mostly kill any good ood. And that�s not all; a new major refactoring of the ejb technology is still to come. Not sure if the ejb 3.0 specs have been released or not but I personally give 0 chances to ejb technology to succeed. Only the future will prove whether ejb technology will be deprecated or not. As for struts, is the same old story: happened to be in the right place at the right time. No other mvc framework was available at that time and this is why it was so successful. Today the story is little bit different because there are several pretty good mvc fremworks out there (Spring mvc is my choice for example). Again I do believe that struts is going to be deprecated as well and again only the future could prove it for sure. As for Spring let�s say this marks the beginning of a new "enlightenment" development era: the start of the lightweight development approach. When good quality code and code designed for testability should happen. Although in theory Spring is not a replacement for neither ejbs nor strut and it actually integrates pretty well with both of them, in practice... Well let me remind you this old way of saying: if you fool me once, shame on you. If you fool me twice, shame on me. Regards.
PS I've been through both heavyweight and lightweight development for a while now. Sometimes is not that you could chouse and you have to do what you have to do 'cause either one should pay for the bills. However if you really have the privilege to chouse between the two, then don't hesitate and go with the lightweight development. Believe me the difference is immense.