The rest of Citrus posse (Christoph, Martin, Ralf, Torsten) joined us
 (Marcel, Roland) yesterday, so we are able to spread over much more
 talks and will flood this blog with even more reports from interesting
 Java talks.
Please note, that we won’t cover the keynotes about Java 7
 & 8, State of the Web and Roadmap for JEE 7 since these are already
 covered in depth
 elsewhere. We
 are concentrating on the small pearl with a broad mix, also in order
 to give an impression about the trends going on in the Java world.
 BTW, the keynotes and selected talks will also be available as streams
 from Parleys.
Wow, what a fast, enjoying ride. Starting with what is the definition
 of a big language, what are big languages, where does Java come
 from, what got Java right, what got it wrong. From the lessons
 learned, a set of feature were extracted which should be avoided. In
 Java, new features has been compromised by exisiting features. So, for
 the core Java languages only small, evolutionary changes are
 possible. For the next NBJL, a balanced mixture of functional and OO
 features is needed. It will have a static, non-excessive type system.
 And other features, learned from the experiences with Java gained over
 the last decade. Finally Stephan compared the existing JVM languages
 out there and checked out whether they match the criterias
 setup. Clojure is not the NBJL since its too foreign to Java. Groovy
 neither, because its dynamic. It’s a good complement to Java but not a
 replacement. Final, the smack down came to Scala versus Fantom. Scala
 is a big jump from Java, whereas Fatom is a smaller step. So, the
 result is, that Scala is too complex with chances to become a
 write-only language. Fantom is closer to the NBJL, but the type system
 is not complex enough (e.g. no generics). Since neither Clojure,
 Groovy, Scala or Fantom meet all criteria, Stephan suggest to
 consider a new Java, giving up backwards compatibility. Maybe this
 could be JDK 9 ?
Entertaining talks with good arguments, but of course biased. A set of
 good and viable criterias has been presented which a new language
 needs to be measured against before it can become the next big JVM
 language.
Cassandra is a distributed, scalable database without a single point
 of failure. It combines the replication model from Dynamo (Amazon) and
 data model from Bigtable (Google). Cassandra’s focus is scaling and
 performance. It uses a Log-Structured Merge-Tree to avoid random IO
 on rows. There are various degrees of tuneable consistency levels. You
 don’t have to deal with stale data, if you don’t what to. Cassandra
 is fully monitorable via JMX. Since all column names are stored along
 with each name, schema changes can easily be performed. Dynamic column
 names can be used to do sophisticated queries (e.g. using column names
 as foreign keys, materialized queries). With so called SuperColumns
 (columns containing other columns), full denormalization is realized.
 Then he lost me ;-/
Quite complex stuff, quite a change of mindset is required
 to get the switched. It seems, that MonoDB has a smoother migration
 experience than Cassandra for someon coming from a RDBMS background.
 But there seems to be some highlevel API on the horizon (e.g. an JPA
 implementation) which might hide the complexity.
The talks starts with a recapitulation of Spring 3.0
 themes. Annotations everywhere: With the
 enhanced stereotype model, it is possible to combine multiple
 annotations into a single on by creating a custom annotation which
 itself is annotated with the Spring annotations it should
 represent. Expressions are available in component annotations, too
 which are especially useful with the @Value annotation. The
 declarative model validation allows for powerful validation via
 annotations. With @Scheduled methods can be marked with a cron
 expression.
Themes coming in 3.1 are:
All in all, nothing spectacular but a solid progress. The talk itself was a bit dry and anything but a firework. I appreciate Juergen’s technical style, though.
This talk covered the differences between the 1.0 and 2.0 releases of JPA.
The main additions covered included:
Other new features touched on included
There are definitely some nice additions in the 2.0 version, like the
 Criteria API, Validation and better support for legacy databases,
 however it seems that JPA 2.0 still hasn’t managed to shield the
 developer completely from differences in the underlying OR Mapper
 implementations.
Overall it wasn’t a particularly interesting session. The material was
 read off the slides and there were no insights privided into the next
 JPA 2.1 version.
Heinz showed by using many code examples (tricks) that reflection can be a very
 useful and flexible but also a dangerous thing to play with.
The dangers ly here for instance:
 * Complex code
 * Static compiling does not find typical errors (e.g. code written in XML and converted)
 * Runtime performance
Reflection should not be used very often but there are some use cases
 where reflection really makes sense. Heinz analyzed some use cases,
 where reflection really could make sense (he also showed alternatives
 to reflection):
and others.
Heinz warned not using reflection on non “static” but “final” fields
 because that wouldn’t have the expected effect. The reason is that
 “final” fields if they are bound at compile time will get
 inlined. That’s why you cannot expect that you have changed every
 occurance of that field in the code.
“Failure is a given”
Tom is the author of the book “Hadoop: The Definitive Guide”
 (O’Reilly). That’s why I expected him to be very competent in this
 field. Tom showed on a more high level way what is Hadoop is all
 about. Which means how it works and what eco system does belong to
 Hadoop. If you weren’t familiar with this theme (like me) you got an
 impressive insight into this complex world of Cloud and NoSQL.
In Hadoop we talk about clusters not machines.
For example:
Some other remarkable notes are:
HDFS in a nutshell:
Failure Modes:
MapReduce in a nutshell:
Mapping the Hadoop Ecosystem:
It was good introduction of Hadoop for someone like me who wasn’t
 familiar with this matter. And that was surely the intention of Tom
 to reach people like me which he had actually. For a specialist it
 would have been surely too high level.
I was the only guy of the citrus posse attending this talk - I went
 there mainly because of the speaker and not because of the topic
 itself.
My guess is that many others of the audience joined the talk for the
 same reason. I was very lucky finding a free seat fifteen minutes
 before the start - the most crowded talk so far.
In fact Mr. Bloch wanted to begin five minutes ahead of schedule but
 he wasn’t allowed - which was quite amusing.
The talk was very short - only half an hour instead of the scheduled
 hour - and had basically one message:
As systems get faster they get less predictable, so the only way to
 know what the performance of a system is like, is to measure it and
 apply statistics on the measurements.
Ok, got the message.
He explained why nowadays almost always using the & operator in Java
 is faster than using && - I didn’t really understand it in detail but
 the main point is that parallel processing of all parts of the &
 statement might faster lead to a result than evaluating possibly each
 part - one after another.
Mr Bloch then tried to demonstrate the unpredictability of execution
 times by a small example - a simple sort implementation which should
 vary in execution times at a range of about 20%. The example didn’t
 work - execution times were almost equal all the time. hmm… I belive
 him anyway.
He also mentioned that profilers are useless. Four different profilers
 identified four different hotspots in a test - he said. hmm… not
 sure if I belive him anyway.
As a solution to how developers should deal with their performance
 anxiety he proposed to just “live with it” - great idea!
This means measure your performance - do statistical work - repeat.
Finally he said that benchmarking is very hard, most benchmarks are
 useless and that the only guy on the planet who does it right is his
 colleague “Cliff Click” - sounds like a comic hero name to me. There’s
 also a framework - of course by google - which supports benchmarking.
 I didn’t had time to take a look at it but here’s the link.
To sum it up. The talk was quite entertaining, the message was clear
 but not very surprising. It was worth listening but not the best talk
 I attended so far…
Chet Hase talked about the new features in Flex4 and the major changes in this release. Basically his message was: Flex3 was brilliant for simple applications with a fine look and feel. A button looks like a button a textfield looks like a textfield. Flex4 ships with new effects and extended component models which opens a lot of great ways to customize your components. Though customization was also possible in Flex3 it was not very straight forward. So if you look at Flex4 you will find existing features and customizations that became much more easy to use. We will see this in some of Chet’s fine examples he has shown in his talk on Devoxx.
In Flex3 you need to go deep into the Flash layer in order to draw primitive graphics. Flex4 offers components in the Flex layer which resides to specific graphic XML tags for primitive graphics like line, rectangular, ellipse, etc.
<s:line xFrom="0"  xTo="250" yFrom="0" yTo="250">
  <s:stroke>
    <s.SolidColorStroke color="grey" weight="bold">
  <s:stroke>
</s:line>You can easily add strokes and fills on these graphic objects with linear and radial gradients that are impressively easy to use on these objects. The graphical effects take a further step in filters.
The new Flex 4 component model is capable of listening to changes in filters and automatically react to these changes. The direct link between filter effect and component enables you to have nice manipulations on multiple components at runtime by applying changes to the filter object attached to those components.
<fx:Declaration>
  <s:BlueFilter id="blur"/>
</fx:Declaraion>You can reuse this blur filter on several components. A change in the blur filter at runtime will automatically take effect on the components and cause a rendering refresh.
States are my personal highlight in this talk. I have never seen this state mechanism before in Flex - as I am not a Flex expert. But this fact that as a Flex newbie I was able to understand all demos and code examples in Chet’s talk was very impressive and proove the ease of use in Flex4. State definitions and state transitions are defined in Flex layer using new XML tags. A change in the application state effects components on the application layer. Components may disappear, change its color, animate their appearance within a state transition. The cool stuff comes with the code examples as they are so easy:
<s:states>
  <s:State name="myState"/>
</s:states>
<s:label includeIn="myState"/>
<s:text x="250" y="300" x.myState="150" y.myState="200"/>So in this example you can see how properties on components and visibility are linked to states in your application. The textfield has different x and y coordinates set for the state “myState”. What I like most on states is the combination with state transitions which put lovely animations on top of state changes:
<s:transitions>
<s:Transition toState="myState">
  <s:Sequence>
    <s:Fade target="myComponent"/>
    <s:Move target="myComponent"/>
  <s:Sequence/>
<s:Transition/>
<s:transitions/>Flex4 is able to use the new 3D effects in Flash10 which adds fine 3D animations (Rotate3D and Move3D) to your Flex application. Effects in demo were cool and very easy to use on components. Just a few lines (tags) in Flex layer.
Your component is able to point to alternate skin files. A skin fulfills a contract with the component so the skin has to support button specific states and properties for instance. Depending on the skinClass attached to your component you can change the look and feel very easy at runtime.
Chet’s talk was based on great demos and I liked it, because it showed the simple life in Flex4 with customization and component changes in Flex layer.
This talk covers NoSQL in general and gives a good introduction to the different data models supported.What is NoSQL? Its short for Not-Only-SQL, featuring a datastore with one or more of the following characteristics
Another question is Why now? The answer is exponential increase in non or semi structured data and throughput, which classical relational databases have problems in handling.
Cohen introduces the three most common NoSQL data models:
The talk finishes by quickly covering Gigaspaces,
 an In Memory Data Grid, with optional write behind to a secondary, durable storage.
 Well, no surprise since Cohen works for GigaSpaces - IMO the talk should have focused completely either on NoSQL or on GigaSpaces but not both.
At the beginning both made clear that Twitter replaced Ruby by Scala
 for some backend work now. I think Scala is becoming more and more
 mature and so is the version 2.8 more an evolution than a revolution.
Bill and Dick showed some enhancements when it comes to
 productivity. There are stronger tools now for coding pluggable into
 the various IDE platforms like IntelliJ, Eclipse and Netbeans like
 better highlighting and cross code completion. The latter works also
 from the REPL (scala’s command line interpreter).
Then they showed some coding in real time to demonstrate scala
 enhancements not without a lot of typos which they fixed at last. At
 least he audiance had fun with that ;-)
Here is an example which I liked:
case class Mnemonic(e: String,g: String, b: String, d: String, f: String)
Mnemonic = Mnemonic(e="every",g="good", b="boy",d="does", f="fine")which is equivalent to
Mnemonic = Mnemonic(e="every",g="good", b="boy", f="fine", d="does")Note that you can swap the parameters any way you want. Default values
 for parameters are now also supported and so it is possible just to set
 the parameters which differ from the default.
Another example they demonstrated is the package notation which now
 can be declared like in C# (the Java way is still possible)
package org {
    package scalatest {
    //here we are
    }
}They finished mentioning a new language feature called
 “Continuations”. People who worked with the Smalltalk web server
 project “Seaside” are already familiar with this. This is usefull if
 you want to rest a thread and then come back after a while to continue
 this thread just where it stoppped. This is useful for save web states
 for example and if you want the web application behave like a “normal”
 programm when pressing Back and Forward as in
 Seaside
A contract is important for testing WebServices. In SOAP WebServices
 you have WSDL, WADL, XSD for defining contracts between client and
 server. In RESTful WebServices things are different. Service specific
 contracts are not usual in REST environments. The speaker Jan
 Algermissen showed his view of testing RESTful WebServices and tries
 to give an idea on how to accomplish automated regression testing. To
 be honest his approach is very academic and is lacking of practical
 thoughts but more on this in my summary later.
First of all there are three layers of expectation in a RESTful
 WebService test:
The speaker concentrated on the resource layer. In his point of view
 message syntax (Http) is not likely to cause problems in the first
 place. I do not agree with that. Custom Http header information as
 well as content types do count for me as a tester.
In detail a RESTful WebService has following characteristics and properties that are testable:
After this short introduction the speaker tires to give an approach on
 how to accomplish tests for all these aspects. Basically his approach
 was to start with a static set of resource URIs defined by the
 tester. The test framework should start with this set and use a
 crawling mechanism to gather further information (resource semantics,
 variants, new resources, message syntax, and more.
Tests may fail in the above described fields link semantics, resource
 availability, resource semantics and variants. The gathered
 information as well as the test results go into a relational database
 for further regression testing.
Unfortunately the speaker did not come with practical thoughts and
 examples of how to do this testing approach. In general my opinion is
 that testing towards a clean run of data collection is not the best
 way to do testing. Of course tests grow fast in quantity but do they
 fit well in quality? What to do with code changes where your reference
 test data becomes invalid and how to separate those failing tests from
 real problems coming from the application? Do we have to run the clean
 data crawling again from scratch? Does the clean run data crawling
 mechanism really reflect the desired and expected behavior? I doubt
 that this testing approach will handle the software development
 process with changing code and changing expectations throughout
 time. Unfortunately the speaker did only give an academic idea on how
 to test RESTful WebServices, but was lacking of answering those
 questions coming from practical thoughts on automated testing.
Vaadin is a java framework for developing rich web applications. It is
 built on top of Google’s GWT and promises to allow java developers to
 focus on writing java code, hiding all the javascript, html and CSS
 implementation details. Programming is very similar to traditional
 desktop programming, using events and listeners rather than requests
 and responses.
So why use vaadin?
Yet another java web framework? Yes, but this one stands out from the
 others in my opinion. The client side code (javascript, html) is
 generated auto-magically by Vaadin (using GWT under the hood). The
 developer does not have to spend time debugging javascript
 incompatibilities between different browsers or synchronising state
 between the client and server models and can instead focus on the
 implementation logic. The low level implementation details - for
 example AJAX or data binding between widgets, is hidden from the
 developer. On top of that the online documentation is plentyful, an
 free e-book is available for getting up to speed quickly and there is
 lots of sample code available on how to use the individual
 widgets. Custom widgets developed by the active vaadin community are
 made available (via MVN) for other vaadin users.
On the down side Vaadin applications are not as scalable as
 traditional web applications. The memory footprint is higher due to
 all client state being stored on the server side. That said
 performance bottlenecks will occur in lower down layers long before
 they are present within the GUI. Support for RTL (right-to-left)
 languages is unfortunately missing and is not on the roadmap for
 future releases of Vaadin (yet).
My overall impression of the talk was very good. Joonas created a demo
 web application from scratch, demonstrating how easy and productive it
 is to develop with vaadin.