Cloud Foundry: Design and Architecture
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Alex Blewitt on Nov 17, 2010
Oracle has announced the umbrella JSRs for Java 7/8, covering a number of the features known from the earlier Plan B. The way JavaSE and JavaEE specifications are defined are by reference to other JSRs, rather than defining new content directly – but often will do so after those referenced JSRs are completed. In this case, many of the referenced JSRs are still works-in-progress, or in the case of modularity, not even known at this stage.
JSR 336, Java 7, has proposed to include:
invokedynamic to the JVM (though not method handles)switch statementscatch block to handle multiple exception typesAutoCloseable, which will include IO streams)However, this is just a proposal – the top of the JSR says “The final Java SE 7 Platform Specification might not include all of these JSRs, and it might include some JSRs not listed here.” It goes on to list some that might be included, as well as impacting the general JSRs for the JVM (JSR 294) and the Java language (JSR 901). It also lists some maintenance reviews and new features, such as the Nimbus look-and-feel and JDBC 4.1, which will support the AutoCloseable for database connections. As Alex Miller writes, My God, it's full of JSRs!
JSR 337, Java 8, has proposed:
What's more interesting about Java 8 is that some of these are not only still works in progress, but also not even proposed yet. Whether members feel they can vote on a JSR which depends on non-existent JSRs remains to be seen. Perhaps Oracle is trying to finesse Eclipse's view on the Java 8 thoughts by making it palatable to vote for, and then change the contents after the vote has been made. Interestingly, the recent moves with IBM may have caused Oracle to add the following with regards to modularity in Java 8:
In the case of the proposed Java Platform Module System JSR, it is understood that there is already a significant investment within the Java community in applications and frameworks built using the module layer of the OSGi Service Platform. The extent to which the Java Platform Module System should adopt, interoperate with, or otherwise accommodate OSGi will be a topic for that JSR's Expert Group and the Java SE 8 Expert Group to discuss and decide.
Not all of the analysis is positive. Stephen Colebourne looks in more detail at the licensing surrounding the TCK; the license for the TCK is here:
The definition of a "product" contains what looks like an unusual part (highlighted). It appears that a "product" must meet three criteria beyond the basic ones:
- "have a principal purpose which is substantially different from a stand-alone implementation of that specification"
- "represent a significant functional and value enhancement over any stand-alone implementation of that specification"
- "not be marketed as a technology which replaces or substitutes for a stand-alone implementation of that specification"
I believe that Apache Harmony would fail all three of these tests (were the project to try and implement this JSR, which they probably won't). Since a "stand-alone implementation" would be OpenJDK/OracleJDK, the principal purpose of Harmony is clearly the same (not substantially different), Harmony does not offer significant functional enhancement, and Harmony would be marketed as a replacement for OpenJDK/OracleJDK.
He concludes with the observation that the Java system cannot be implemented by anyone other than Oracle:
To be honest, I'm surprised that the TCK license for Java SE 7 still contains any pretence that it can be implemented in open source by anyone other than Oracle. At least the restrictions are clear (and I suspect, but cannot prove, that very similar restrictions were offered for Java SE 5 in the Sun/Oracle vs Harmony dispute). The TCK license conflicts with the JSR! The JSR itself says:
So, the JSR is targetted at embedded environments! That's not what the TCK license says ;-)2.2 What is the target Java platform? (i.e., desktop, server, personal, embedded, card, etc.)
This JSR defines a release of the Java SE platform targeted at embedded, desktop, server, and cloud environments. ([Stephen's] highlights)
At this point, Apache will probably make a symbolic “no” vote on the Java JSRs (though they will probably vote for Project Coin and Project Lambda as a nod to the technical contributions they will make to the language). However, it is unlikely that other JCP members will do the same, and at that point Apache will follow through on their threat to resign.
Introducing SQLFire: a memory-optimized, high performance SQL database
Tools to unit test your JavaScript
App Server Evolution: REST, Cloud, and DevOps Support in Resin 4
VMware vFabric SQLFire - Test drive the data management system with memory speed, horizontal scalability and a familiar SQL interface
JSR 292, the introduction of invokedynamic to the JVM (though not method handles)
Does this mean that we can't dynamically invoke a method directly from Java code (without resorting to reflection and/or bytecode generation)?
There is again progress on the SE front, and the feedback from the devoxx (2010) conference is overall very positive. With IBM and Apple joining in the OpenJDK effort, it would be really great for the community at large to do the same and evolve the Java platform to the next level.
You can use these tools today without waiting for JDK 8 and they are backward-compatible. Unfortunately this was pushed to JDK 8 when most of the work was already done. JDK 7 had some support, but in the last JDK 7 build (b118), they were completely removed as it was pushed to JDK 8. Most of the work is done here: types.cs.washington.edu/jsr308/
I am one of the many developers who uses only the JVM and the JRE but not Java.
I couldn't care less about lambda expressions in Java, because all of the half dozen or so languages I use already have lambda expressions, some of them for more than half a century. What I do care about are Function Types. But AFAICS, they aren't even on the roadmap for Java 8, let alone Java 7.
Apart from invokedynamic, I don't really see anything interesting here for all the many non-Java JVM/JRE users. Where are the Tail Calls? Value Types? Function Types? Symbolic Freedom? Method Handles? When are we finally getting rid of Primitive Types and Covariant Arrays?
This is a postscriptum, since I just thought of some other things that would be nice to have on the Java platform: support for Immutable Types and support for Pure Functions and Total Functions. Also nice to have: a standardized Meta-Object Protocol for interoperability between languages. And getting rid of the hardcoded type system in the JVM, either making the JVM untyped or replacing it with Pluggable Type Systems and a kind-of "Meta-Type Protocol", again for interoperability.
When are we finally getting rid of ... Covariant Arrays?
I can see why the other issues would cause concern for you, but why does the possibility of covariance in arrays restrict you? Is it because in a dynamic language you would detect the error on read rather than write/assignment?
The Java 7.0 progress is very slow. I have been watching this development since few years back, still they are postponing the release dates. Also they have removed many of the good features. Hope it will be release beginning of 2011.
Do what oracle employee can able to do.... Dont try to pick mountain using fly...
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
Andrew Watson talks about the work of the OMG, where CORBA is alive and well (hint: in your car), UML and UML Profiles vs. custom Modeling languages, DDS and other middleware, and much more.
Sohil Shah discusses creating iPhone and Android enterprise mobile applications based on cloud services using the open source platform OpenMobster.
Paul Sanford presents the transformations supported by data throughout its life cycle, and how that can be better done with Splunk, an engine for monitoring and analyzing machine-generated data.
A common “best practice” for unit tests is to only write a one assertion in each test. I intend to question this advice by showing that multiple assertions per test are both necessary and beneficial.
John Rauser presents the architectural and technological evolution of Amazon retail websites starting with 1994 and ending with adopting Amazon Web Services.
Michael Stal discusses system architecture quality, how to avoid architectural erosion, how to deal with refactoring, and design principles for architecture evolution.
Every developer has had to integrate with another system, API or component. Tis article provides strategies to handle the change and for he separating system boundaries.
8 comments
Watch Thread Reply