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 Craig Wickesser on Mar 01, 2009
Actor Christopher Walken once performed a skit on Saturday Night Live in which he proclaimed he needed more cowbell to get rid of his "fever". In the same light, the Groovy team has certainly heard the calls for more Groovy and have recently released 1.6 of their award winning language. There are a slew of new features mentioned in the release including,
- great runtime performance improvements
- multiple assignments - optional return in if/else and try/catch blocks
- AST transformations and all the provided transformation annotations like @Singleton, @Lazy, @Immutable, @Delegate and friends
- the Grape module and dependency system and its @Grab transformation
- various Swing builder improvements, thanks to the Swing / Griffon (http://griffon.codehaus.org) team
- as well as several Swing console improvements
- the integration of JMX builder
- JSR-223 scripting engine built-in
- various metaprogramming improvements, like the EMC DSL, per-instance metaclasses even for POJOs, and runtime mixins
One of the primary focuses in this release was on performance and the Groovy team claims to have made significant improvements ranging from 150% to 460%. Another feature included in this release was the official integration of the JMX builder, which is just another example of community efforts helping to improve Groovy.
Below are some examples of several of the new features including multiple assignments and AST transformations.
// this class' properties are immutable once the object is constructed
@Immutable final class ServerConfig {
String url
int port
}
def getServerInfo() {
['http://home.net', 8080]
}
// attempts to set a property on an Immutable object
def setUrl(config, newUrl) {
try {
config.url = newUrl
}
catch (ReadOnlyPropertyException ex) {
ex
}
}
// multiple assignment
def (url, port) = getServerInfo()
assert url == 'http://home.net'
assert port == 8080
def config = new ServerConfig(url, port)
assert config.url == url
assert config.port == port
// try to change the property on the Immutable object
def result = setUrl(config, 'www.google.com')
// verify the property change failed
assert result instanceof ReadOnlyPropertyException
The example above shows how the @Immutable AST transformation provides a very simple way of creating a read-only object. The example also demonstrates using the new "multiple assignments" feature. For more information about the AST transformations you can visit the Groovy user guide, currently the section only covers the @Immutable transformation.
Now that you've seen a quick overview of what Groovy 1.6 has to offer, check out What's New in Groovy 1.6, an in-depth article about Groovy 1.6 written for InfoQ by the Groovy Project Manager, Guillaume LaForge. Guillaume covers each of the new features and provides plenty of code examples which help clarify all of the new capabilities.
Introducing SQLFire: a memory-optimized, high performance SQL database
Agile Maturity Model Applied to Building and Releasing Software
Continuous Delivery: Anatomy of a Deployment Pipeline
Improving Software Delivery Cycles: Pre-requisites and Inhibitors
Branching & Merging Efficiently: A Guide to Using Process-Based Promotional Patterns
VMware vFabric SQLFire - Test drive the data management system with memory speed, horizontal scalability and a familiar SQL interface
The build in dependency management makes life a lot easier, especially for scripting. Nice example on my blog with Apache Camel: Groovy and Grape - easiest way to send gtalk message with Apache Camel?.
But groovy need to improve startup speed.
gant is too slow so we have to rewrite it in python, or beanshell.
congrats to the groovy guys.
That is the question now.
That is the question now.
Groovy, of course ;-)
Why not both of them? :)
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.
6 comments
Watch Thread Reply