Java Persistence API

Its been a while since I put up some stuffs in here, yet not to fear since I’ve just been drafting my writings. For this post, I’ll be going through my first hands- on experience in using ICEFaces Web Framework. You can view ICEFaces very details description here: Click Me.

For my hands-on experience, I tried putting up a simple Inventory Input Form like this:

The business case here is that the user must have the ability to create inventory items, the user must be able to automatically see the data in the table below after creating a new item.

Inserting a new Data using: Ice:Popup

A pre-defined (or in technical term, intrinsic function) libraries are included with the Framework. Its basically a new Web Framework that completely uses the Web 2.0 concepts as well as Ajax technologies to refine and define the user experience.

The popup dialog below is actually just a tag library call from the page itself. Pre-defined validation occurs (see those * there). After saving the entry, the dialog closes and the table underneath will automatically re-rendered to show the newly added entry.

Delete and Edit:

An entry will have buttons that will let user delete or edit data. The Edit button will re-use the popup dialog and pass the values to it.

After editing:

Note that no loading happened in this scenarios, all of which are Ajax driven and no Javascript was coded for this. It really showcased the power of JSF technologies for REAs Development.

Technologies Used:

Apache Tomcat 7 – I’m using Tomcat 7 as it supports the latest JEE6 Reference Implementation libraries required to run the application.

The ICEFaces Framework – showcased a lot of useful libraries for user interface. JSF really made its promise by minimizing the Javascript needed for development and for this case, I didn’t have to write any. Heres a link to the ICEFaces Library Showcase site: Click Me

To save you from trying to create this basic stuff, heres the link to the WAR file I created (includes the SQL File as well) along with the necessary libraries to run the application: POSv1.war

Just put it in your Apache Tomcat 7 webapps folder, create the database with a user: root / <no password> and your good to go!

Developers can create EJB / JPA Business components and expose it through Data Controls.

Data Controls are created to expose functionalities to Oracle ADF.

Once Data Controls are created, this can be used to create ADF based form components like Manager Forms and Graphs

Review: The tutorial is more of a declarative way of developing ADF applications. It first creates a Database Connection, then create an EJB Diagram to create Session Beans and JPA Entities. This beans will be the back bone (model) of our application for database transactions. Next, create Data Controls to expose EJBs for Oracle ADF. Then after exposing these, we can now use the ADF framework to create pages and combine very useful ADF components (accordion, data grids, graphs etc.)

This tutorial really showcased the power of Oracle ADF + the use of JDeveloper. Its completely a new way of developing Java EE applications. JDeveloper brings another level of development scheme as showed on the tutorial, its a very flexible IDE that support both declarative and narrative development method. The addition of full support on Oracle ADF sums up the whole package as it allows developers to drag and drop exposed ADF data controls and create components for it (graphs, forms, etc.).

I find EJB/JPA Development in Oracle JDeveloper too good to be true! 🙂 Seriously. I tried developing a new Java EE Application using JDeveloper:

The wizard created 2 components in the project. A ViewController package and a Model Package.

ViewController Package – Is where all JSF/JSP and Servlets go, basically the view and controller sources. Model – Business Components such as EJBs and JPA entities are placed in this package.

Lets try creating an end to end Person Registration! 🙂

1st Step: Design the Model.

Go to New > Offline Database

Start by creating a dummy database – developers can create an offline database (oracle database emulator) that will run with your application.

Then lets create a table on that offline database we just created.

Click on OK. After creating the table, new database components will be created on the project setup.

What we did with the first step is just to create a database and a table to store our Person Registration.

2nd Step: Create Model Diagram (EJB/JPA Diagram) and Components

After creating the database and table, we now need to create the components that will interact with the database from our application.

Create EJB/JPA Diagram: Developers usually skip the part of creating a diagram first – I would say that this process is one of the most under-rated process for any developer regardless of the platform (I sometimes wonder how one can develop without even doing some drawing to visualize the flow of their application logic).

After hitting “OK”, a blank diagramming canvass will be displayed. Note: This canvass I believe is one of the most powerful feature of Oracle JDeveloper! – Keep reading.

Next, drag the PERSON table on the canvass. This will create a new Entity Bean (JPA entity bean), create a new Persistence unit and a persistence XML for its definition.

Note: I move the generated entity class to a new package (this is one of the features I actually don’t like about all this automation stuff).

Create a simple Stateless Session Bean. Drag a new Session Bean from the EJB Component Palette on the right side to the canvass.

This will open up a wizard to create the new Session Bean.

Methods will be automatically generated. These generated methods will perform basic querying, insertion, delete and update.

Put the Session Bean on the beans package.

Remote and Local Interface (Both interface will be placed on the beansiface package).

Session Beans are now created. 🙂

We just created our Model Layer. We can now use the Session Beans to do Database Transaction from our Controller.

3rd Step: Develop the Page and ManagedBean

Open the faces-config.xml – We will create 2 JSP that will handle user input and a success page.

After creating creating the Page Flow, we now create the actual page. Right click on the diagram page component to create page.

Pages can be created from a template or a blank page. I will discuss Page template development in another post. 🙂

Create a ManagedBean – this is the controller class where in we put form fields and actual call to the business logic. From the faces-config.xml, right click on the canvas to create the managedbean. This will create a new ManageBean entry on the xml file.

After the ManagedBean is created, put the fields First Name and Last Name (Generate or create Accessors) in it. Put also the logic to insert the new Person data.

Create a Registration Form. Open the registerperson page to create the form and map the fields to its corresponding ManagedBean mapping.

Success Page:

4th Step: Test the Person Registration

Right Click on the Register Person Page.

Test the Person Registration:

As I’m trying this stuff, it took me a while to get a hang of getting my source running. The first thing I did was not to rely on automation scripts to really experience how to assemble each piece of components together. Yet as I go along some roadblocks and issues, I would really say that if I’ll be using this IDE for J2EE Development, I would rather build it using the automation tools available.

The Diagram tool is amazing, drag and drop your components and your off and running.

Offline database is cool. You don’t have to mind how much memory would it consume your terminal just to try a EJB/JPA, you can just use the offline database (which is basically just a file) and your good to go.

JSF Flow Diagram is great. I’ve use the faces-config diagram and its like mapping the flow of your pages. All drag and drop components are available, page and beans generate are also available.

One thing I didn’t like at all is the package management, it seems that if you have a convention of creating sub-packages, you’ll likely to be irritated by that fact that it can’t create sub-package for itself. You’ll have to create one sub-package after the other.

Overall, I’m impress how Oracle manage to put a lot of automation in the IDE. The Diagramming canvass is perfect for modelling (EJB and JPA generated), the offline database is too good to be true for development trials and the JSF Diagram canvass from faces-config and bean generators really did put the ease on developing view components.