« Notes from the O' Reilly RailsConf Europe 2007 - Second day | Main | Creating an ObjectManager for improving the Flex interaction with Ajax or Javascript - 3rd part »

Automating ActionScript 3 classes generation from Java Beans in a LiveCycle Data Services context

In a Flex application that uses LiveCycle Data Services or the previous Flex Data Services to manage data from a remote server there is the requirement that Flex domain model classes have to match Java domain model, in structure, properties and types. Usually it means that for each Java class that is supposed to be configured as a remote alias one should write down an ActionScript class with the same properties, just as described in the Adobe livedocs at Livedocs
The documentation provides a mapping for ActionScript data types and Java data types and specifies that Java classes are dealt with through the Java Beans specification, that can be downloaded here: Javabeans

The Java class is serialized and all of its public properties and the ones with getter and setter methods are serialized. All other properties are not, including the ones without a getter. There is one thing related to the Java beans that worths a bit of attention, and it is bean attribute names that start with a lower case character followed by a upper case character: their getter and setter methods will have get/set followed by at least two upper case characters, for example "aFoo" will have "getAFoo" and "setAFoo". When the Java introspection mechanism, described in the above specification, finds these kind of properties, it will infer that the property is called "AFoo". That implies that inside the ActionScript class that matches the Java bean the property has to be called "AFoo", otherwise it will not be recognized. This usually translates on the flash log in a "ReferenceError: Error #1056: Cannot create property AFoo on [...]".

Consider the case where all of the properties of a class are declared in Java with a lower case followed by an upper case, one could easily convert into an ActionScript class that follows the same naming convention and, at runtime, there will be an empty object, with the right type but no contents; the ReferenceErrors in the flashlog will point out the problem and the solution, in this case, is to call ActionScript properties starting with two upper case characters: "AFoo".

Iin an enterprise application there can be many Java bean classes to be converted to ActionScript counterparts, a simpler way of solving this and possibly other problems related to Java to ActionScript conversion would be the use of an automatic tool. At the time of writing this blog post I personally did not find a tool that performs the conversion, a tool that can be easily integrated into an IDE, like Eclipse, or used as an Ant task, thus I'm considering writing one myself. The backend of this tool would use java.beans.Introspector to get the java.beans.PropertyDescriptor for each property of the bean, map the Java types to the ActionScript ones and generate the required imports. I'll keep the blog updated with progress on the tool, as well as interesting parts of the source code.

TrackBack

TrackBack URL for this entry:
http://blog.comtaste.com/mt-tb.cgi/26

Comments (8)

faisal:

Hey

Check xdoclet actionscript plugin.

Yep:

I've already written one. Maybe I'll put it out there some day, it's nothing too fancy but it works perfectly...

There is now a tool for doing this and it can be found at http://www.graniteds.org/confluence/display/DOC/2.5.+Gas3+Code+Generator

It's ready as an ANT task so easily fits into build scripts.

Eric Gravel:

I was wondering if you ever made progress on this code generation project or have heard of projects that do this?

We're about to use LCDS and realized the same things you did.

I started investigating and got names such as GraniteDS Gas3, WebORB for Java has one, R1-RPC/J, VASGen, J2AS BUT I don't know if they do what I want. Do they convert domain objects or are they gear towars service object conversion.

Any guidance would be appreciated.

Olivier:

hello,
did you find this kind of tools now?
regards

Derek:

I've had success using Gas3, then modifying the templates .gsp files not to be GraniteDS specific.

http://www.graniteds.org/confluence/display/DOC/2.+Gas3+Code+Generator


I have also used J2AS and GAS3, they both convert domain objects. GAS3 generated classes do include some extra code that LCDS / BlazeDS do not need, such as the IExternalizable interface.

Derek, how did you modify the .gsp templates? Would you share them?
Thanks

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)

About

This page contains a single entry from the blog posted on September 28, 2007 12:41 PM.

The previous post in this blog was Notes from the O' Reilly RailsConf Europe 2007 - Second day.

The next post in this blog is Creating an ObjectManager for improving the Flex interaction with Ajax or Javascript - 3rd part.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.33