"...I'm trying to come up with an architectural philosophy for my company with respect to the selection of COTS or Open-Source tools (mainly app server and messaging middleware)..." "...Also, I remember you mentioning a certain number of application servers becoming compliant with JEE6 in one of your JavaOne talks. Do you happen to have any reference information that I could site that documents how quickly vendors are implementing JEE6 compliant app servers?..."Choosing an application is not very different from choosing a Java SE implementation. I would start with the Sun's (o.k. Oracle's :-)) JDK, before I evaluate the Oracle's JRockit, IBMs, or previously BlackDown or kaffe (also I used kaffe in an interesting project) implementation.
The question is actually not what application server to use, but with what vendor the Proof Of Concept should be started. I would start with Glassfish v3. It is the Reference Implementation, and is already used in production. Glassfish is well composed mix of: Weld (RedHat), Mojarra, EclipseLink, Bean Validation (RedHat), Felix (Apache) or Equinox (Eclipse), Jersey, OpenMq (...). It is "interoperable" (smoke tested) with JBoss 6m5 and SIWpas. The interoperability with WebLogic will improve over time (with the support of Java EE 6 in WebLogic). The most interesting thing is the nature of the Proof Of Concept. I would suggest the following:
- Implement a common use case iteratively, evaluate also the developer experience (re-deployment times, stability, feedback)
- Also evaluate integration into a CI environment, Maven integration etc.
- Implement brutal (no think time, many concurrent clients) stress test. Measure the performance degradation, memory consumption, the amount of threads and transaction throughput over time. Stability is the key<./li>
- Performance actually doesn't matter - all major application servers are fast enough for enterprise applications.
- Check the support / licensing. It is important to your manager / client
I create a simple matrix (Wiki) and confront all stakeholders (operations, management, product owners, developers, architecture board) with the results. Sometimes the results are inconvenient, so you will have to escalate these.