Monday, June 30, 2008

J2Free 0.1 Alpha Preview

A couple months back, I wrote a post titled Java Complaints and Introducing the Redemption of Java: J2Free, in which I laid out a few of my complains about Java and introduced a new project, called J2Free, that Arjun and I had begun. Well, development of J2Free had stalled for a month or so while I was out of town and working on revamping an older site. But, much to my great pleasure, we now have the first previews of J2Free to show.

Today's preview is of the entity administration portion of the project, which uses a heavy amount of reflection to analyze the structure of persistent entities and expose a CRUD interface into your persistence layer without you ever having to write a line of code. For now, the only supported persistence provider is Hibernate. After including the J2Free jar, as well as the JSPs/CSS/JavaScript files, you can begin browsing and editing the entities stored in your persistence layer through a web interface.

Here's a view of the J2Free Entity Administration section when first loaded. The entities are listed in tabs across the top.

After clicking on a tab, the available entities of that type will be loaded via an AJAX call and populate a list along the left. Entities are loaded in batches of 100 for now, with an option to load more.

Selecting an entity on the left will open that entity for editing in form that is dynamically generated based on the fields within your entity. Read-only fields are set as such, and x-to-x mappings to other entities are represented by entity 'boxes'.

Editing a single-entity field, or a collection of entities is done via a third column, the entity browser. From there, entities can be dragged and dropped between a field and the entity browser column. Click save will save any changes, and clicking delete will delete the entity.

Any entity can be clicked to display that entities properties in read-only format (to keep confusion about which entity is being edited at a given time to a minimum).

At the top of the left-side entity list is a New button that will create a new instance of any type of entity and present you with the same form used for editing entities to populate the fields. New entities are not persisted until the saved from the edit view.

There's a lot that needs to be done; including improving the visual display of entity associations, editing one-to-many associations, proper display of embedded IDs, and improvements to handle larger amounts of entity types and larger quantities of entities. Additionally, there are plans to auto-generate Lucene indexes (with Hibernate search) on String fields to allow searching of all entities. I also want to include a box for submitting custom queries (in JPQL) that will return the results in the visual entity form.

Got a long ways to go... but it's far enough along now that it has become functionally useful to me! The most exciting part is that the reflection necessary to create an entity administration CRUD interface into a persistence structure with no knowledge of the composition is the basis of a lot of what will follow, including access controlled operations that can be exposed as components within a consumer facing site and a fully-functional REST API. Imagine that, creating an API into your site as easy as setting api.enabled=true (or for more fine-grain control, setting api.enabled.classes=com.mysite.dao.*). Excited yet?