Hi …,
I guess it is the same in any large corporate. People spend more time on meetings than on doing real work. There are some sound reasons why people need to communicate frequently in those industry giants, but in most of cases I believe those meetings are completely un-productive, if not, counter-productive. This may explain why Louis Gerstner list "strong bias for action" as one of "what it takes to run IBM". Those companies may be able to afford to such a waste of resources; if a small startup is also run this way, it will be destined to fail.
But anyway, enjoy it!
Here come my thoughts on light-weighted and EJBless framework.
Hibernate cannot be regarded as a framework in the same sense as Spring. It is more a tool for OR mapping. Although system concepts and services in Hibernate such as caching, session, concurrent and transaction control may also be helpful to application logics, it still mainly focus on object persistence. I am yet to use this tool in my projects, but I am pretty much sure that there is no issue of performance or threading in Hibernate. Clustering deployment may be a valid concern; however, load-balance and high- availability of the persistence layer is a challenge that the whole industry is currently facing. If you look at Weblogic's document, for the so-called read-write Entity Bean, Bea's claim is "load balancing and fail-over occur only at the home level". This does not really contribute much for application operations. The only solution in this front that I am aware of is c-JDBC from ObjectWeb. The architecture of c-JDBC looks to be sound, but the tricky part is implementation and I do not have knowledge on how it performs. You may know that the still-debated EJB 3.0 specification follows closely the architecture of Hibernate for EJB persistence. I personally believe that is the right direction.
About Spring framework. I read Rod Johnson's first book "J2EE Design and Development" immediately after it was published. That is a good book, particularly when compared with the others on the same topic available at that time in the bookstore. Lots of insights in the problems he chose to discuss and in the solutions he advocated, and all of them apparently came from long time real-life experiences. He did talk in the book about development without EJB. But most of the contents are about good practices in J2EE (including EJB). He came up a configuration framework based on JavaBean and following IoC principle. This can even be thought of as innovative. I always believe that development in Java without EJB can be the right thing for some projects; and my impression from reading Rod Johnson's first book is that he held the same opinion. Hence when he and people around him push the slogan "J2EE Development without EJB", and advocate removing EJB from J2EE in the industry, I think this is more a marketing and sales strategy than a sincere technical pursuit.
In my opinion, EJB as a technology is a great advance in programming paradigms. With EJB, developers are released from the error-prone developments on remoting, transaction, security and persistence. Since EJB container handles those system level requirements, developed code becomes purely business logic focused. And this is a big thing for software industry. There are issues with EJB. In my mind, first, the programming model (local or remote home, ejb interface with ejb-jar.xml) is obviously not clean enough. Security service is obviously not robust or rigorous particularly when we consider the fact that session beans are handling business level logics, entity beans are associated with data access and all of those are points where security requirements are high-lighted. Persistence service in EJB can be regarded as a failure if we compare the purposes of EJB and its usage in reality. Writing solid entity bean code (with fine-tuning carried out in ejb-jar.xml and other proprietary configuration files) is even more difficult than implementing persistence directly with JDBC. Also, abstracting system services from business code need to sacrifice flexibility to certain degree, and need to pay a price on performance in some cases. But with all of those shortcomings, I still believe EJB is a good technology. I am recently reading some scholarly books on concurrent, transactional and distributed systems development. The reading experience only makes me believe stronger that EJB technology does a lot of good to the software industry. In practice level, the issue with EJB is really when and how to use it.
Back to Spring framework. I completely agree with you on that OO is lost in J2EE. Looks to me Spring is not helpful either on bringing back OO or some other primitive programming elements. I am thinking Spring more as a toolkit for effectively developing Java application than as a completely new paradigm that is at the same degree of importance as EJB. Spring framework is something that may be marketed as "bringing technologies closer to the domain of business problems". Getting it wrong can cost those good developers a lot. J2EE technology and application servers are already well established and successful in business. A new revolution may come, but it will not have the flavor of Spring. Service delivery platform (or other things following the spirits of OSGi, Service Integration Bus etc..) has a better chance to replace the application servers. The concept of autonomic computing can also become an essential part in application server architecture in the future.
I am now reading Rod Johnson's second book, "J2EE Development without EJB". His points for the problems in current J2EE development practices are all sound; but the approaches he recommends to replace some of the services in J2EE are just not very convincing. Most of the solutions provided in Spring framework for specific problems are nice. I certainly think I can and should use them in my projects. However, suggesting building a carrier-strength systems relying on Spring framework is a totally different issue.
This is already a long email. Let me briefly share my ideas on logging/tracing/auditing for systems transaction. In business transaction systems, this is usually a requirement and we, as architects, usually do not have a choice. The real question is how to implement this such that it has minimal performance overhead. What I suggest is to isolate the persistence part of logging/tracing/auditing from the executing thread, and put it into a separate process. This can be achieved by a messaging mechanism. If data access performance is a concern, a different database should be used just as OLAP is never carried in operational data store.
I am not doing further work on OAM. It is a big disappointment to me that not all the features I planned for OAM were implemented, and the current implementation was messed with some non-essential stuff. Or else, this solution can be something really good. It is model-driven. With it, configuration and management become an orthogonal concern; therefore OAM is completely separated from business logics. In fact, when the implementation was finished, an article appeared in Bea dev2dev proposing an idea similar to the model concept in OAM architecture. ...
It is good to discuss with you.
Regards,
Young