More Thoughts On Rich Internet Applications And Applications In General
“Develop Once, Run Everywhere”
Lost VMs or Containers? Too Many Consoles? Too Slow GUI? Time to learn how to "Google" and manage your VMware and clouds in a fast and secure HTML5 App.
Adobe Flex has done a fairly good job for Web. Even better the same code can be easily tweaked to run as a standalone application with Adobe AIR. This was once an expectation for Java when it first came out to run as an Applet. Somehow it didn’t succeed in its birth place, but gained its ground at the server side instead.
JavaFX from Sun is a nice try but too late in the game. More importantly, Sun is not a client software company like Microsoft who was also late with SliverLight but has client side expertise and managed to compete. I don’t think Sun will reclaim its already lost client market at all, and therefore JavaFX is likely a candidate to be axed after Oracle’s acquisition. The investment on JavaFX should have gone to Java Swing, which is a lackluster compared with IBM SWT.
Developing application once and packaging it in different forms makes a lot of sense. Kind of remind us the Java “Develop Once, Run Everywhere.” Logically the interactions should be very similar if not the same. The difference is the platforms either Web browser or OS. That may require different look and feels. This problem has been nicely solved by technologies like CSS, which can be externalized as themes.
So the future of RIA is not only about itself, but also about standalone application because under the hook they could be the same.
A modern application’s presentation layer should have 3 major parts:
- Layouts and widgets. It defines what layouts and which components to use in your application to present information, or ask for input. You can use XML to easily describe all these. XAML is a nice try there. It will be supported in Eclipse e4.
- Interaction behaviors. When clicking or typing something from the GUI, you expect some changes from GUI. It’s hard to describe with XML logic. Widget data binding can help to some extent, but in the end you still need to write some code for special behaviors.
- Themes. This specifies the combinations of fonts, colors, images, etc. Not critical at all from technical perspective. But it becomes more and more important as the application is more than a utility to get work done, but also something showing our identities like fashion.
Among all the three components, the first and last are supported in a cross language and cross platform way. Only the second is associated with a specific language or platform because you have to touch a specific programming language and APIs for defining behaviors. If the language and APIs are supported cross platform, the application is then cross platform as it is.
Of course, application is more than presentation. You will need application logics and data persistence in the back. Seamless integration is needed to create an application as a whole. In the Flex case, Spring BlazeDS Integration project seems on the right track to success.
In summary, I think the RIA and standalone application should and will share the same code base with slight tweak. You develop it once, and package it to both standalone and RIA.
One more important application type is missing here – the mobile applications. I will discuss it later.