The term "Cloud Computing" is even cloudier than SOA or Web 2.0 definitions. My understanding of clouds is:
- Elasticity: you can fire up new instances on demand.
- Management and Monitoring: especially applications in the "cloud" have higher requirements regarding management and monitoring. You should be able to pro-actively monitor the current state of your application.
- Vendor neutrality: you wouldn't like to be dependent on one vendor in the current economic situation.
- Standardized packaging and installation: you will have to package your application to install it to a "cloud". Standards are always good, otherwise you will end up in many negotiations and meetings.
- Failover capabilities: clouds do not have necessarily to be HA-aware. It is nice to have a clustering option.
- Easy administration: you will need remote administration tools. Using vi to edit files would probably not satisfy your customers.
- Low resource consumption: computing time and resources cost a lot. It is important to build as lean applications as possible to save money.
In case my cloud-understanding is correct Java EE 6 and even Java EE 5 would be perfectly suitable for cloud standardization:
- JMX is just built-in and standardized (J2EE management and monitoring). ...and you can nothing do against it :-). Every deployed Java EE component has to be published on every J2EE 1.4+ conform application server. You have only to leverage the information with JConsole, through Java 5 SE API, or tools like Hyperic or openNMS.
- You can start, stop and manage application servers on demand. e.g. GF v2 can do it through a centralized domain. If it is not sufficient, you can easily extend such capabilities with e.g. EHCache, JBoss Cache, RESTFul interface and leasing concepts.
- The portability of Java EE 5 applications is really good - and it will be even better in Java EE 6. I actually switch back and forth between WLS 10 and GF v2 in my current projects. Java EE 5 is already supported by JBoss, Geronimo, Glassfish, Weblogic, Websphere, SAP and even Spring (look at pitchfork).
- EARs, EJB-JARs, WARs and RARs are standardized. You don't even have to touch this archives migrating them from one server to another (reason: XML is no more necessary - server-dependent deployment descriptors are gone)
- Failover is supported by every application server I know.
- Easy administration: it cannot be easier than in Glassfish v2+. The webconsole is lean, fast and intuitive. Command line interface is available as well. Geronimo also comes with own console. The admin console for JBoss is available in the commercial package too.
- Low resource consumption: the EJB 3.1 container in GF v3 is exactly 420kB.... It can be loaded and unloaded on demand.