Hello dear Spring Lovers and Gurus,
for some time I'm involved into porting a rather big and complex near-real-time system with asynchronous bus and clustering from EJB2 to EJB3, changing application container by the way (from weblogic to
jboss). While doing main parts of that job I have come up with some thesis:
-
EJB (be it 2 or 3) development is so implementation specific that system, once developed for one of application container and efficiently working, can "stuck" in most unpredictable part of processing even after rather accurate porting
- we have to use implementation specific things in any case (security, deployment structure), especially when it comes to efficiency
- moreover sometimes even architectural principles (that were efficient before) have to be changed because of the specifics of new application container
- why bother with standard-dependency and be afraid of 3rd-party-lib usage as "one more dependency" and/or "possibly unstable part of the system"
Now about what I think how Spring influences the situation:
- Spring covers most of the parts of J2EE standards (not to mention field and tremendous integration were EE has nothing to say)
- from my experience and guesses, if Spring is more lightweight, and gives (almost) the same services, I could replace most SessionBeans with SpringBeans gaining more Spring advantages than loosing EE ones
- you could say "and how about EE clustering features" I think "they are implementation specific" - so much work to convince JBoss to behave as before on Weblogic, and lost ALL of the simplifying features of EJB3 - all through JNDI, strong typecasting, etc.
I have a constant feeling that if we've used Spring as a core we wouldn't have those standards-compatibility issues.
So isn't the Spring more like a standard nowadays? It gained its position. Became a de-facto standard. At least for some category of projects, in some development processes, group of developers (the dynamic ones).
I'm so sad that this is not my situation.