Applies to:
SAP Web Dynpro Java 7.1 SR 5. For more information, visit the User Interface Technology homepage.
Summary
The objective of this tutorial is to provide a simple example of a CRUD application using EJB 3 as model
layer and Web Dynpro as view/controller layer.
Author:
Author Bio
Isaas Cristiano Barroso has worked with SAP Technologies since 2007. He is an official
instructor for NetWeaver Java. The prior experience of Isaas has focused on various Java
technologies including development with open source frameworks and proprietary suites like
Oracle SOA Suite. Isaas has worked to many companies as System Architect in the last 5
years. Currently he is involved with technologies such as Composition Application
Framework, Visual Composer, Web Services and Web Dynpro, Process Integration,
NetWeaver Administration and researches about possibilities use of new NetWeaver features
NetWeaver Galaxy and Flash Islands) on the companies.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Table of Contents
Introducion ..........................................................................................................................................................3
Creating a dictionary project ...........................................................................................................................4
Step 1: Creating the project .........................................................................................................................................4
Step 2: Creating the table definition .............................................................................................................................7
Step 3: Deploying the dictionary ..................................................................................................................................9
Conclusion ........................................................................................................................................................79
Related Content................................................................................................................................................80
Disclaimer and Liability Notice..........................................................................................................................81
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Introducion
This document will cover the process to develop a simple CRUD (Create, Retrieve, Update and Delete)
application exploring the new characteristics of SAP NetWeaver CE 7.1 like Import of EJB Model, use of EJB
3 and JPA. The application will be developed to maintain a simple TODO list.
To develop and run this sample will be necessary NetWeaver Developer Studio 7.1 and NetWeaver
Application Server 7.1
This tutorial will be divided on follow sections:
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
On the next screen select the Local Development -> My Components and click next
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After this we need fill the information about the development component.
Then click Next and Finish. The DCs archive will be synchronized and a dialog can be show to change to
dictionary perspective, click yes, and the project will be show on the dictionary perspective like the follow
screen
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
To purpose of tutorial, on the next screen leave the prefix table as TMP and put the suffix as TODO, then
click on Finish. So a screen like the following will appear
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Repeat the add column step, for the other two columns (TODO_DESCRIPTION and TODO_PRIORITY)
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After rebuild, if no errors occur, is the time to create archive and deploy the dictionary, to SAP Application
Server.
Right click on dictionary project and choose Create Archive.
Right click on dictionary project and choose Deploy.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Note: To visualize the database schema was used the Database Development perspective of Developer Studio and a
connection was created using a MaxDB JDBC Driver. To reduce the number of tables listed, a filter was applied to
get only tables that name starts with T.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
On the next screen, select the Local Development -> My Components and click next
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After this, we need to fill the information about the development component.
Click on Next and another screen will appear to choose what is the JEE version will be used, keep 5.0 and
click on Finish.
Then click Finish. The DCs archive will be synchronized and a dialog can be show to change to J2EE
perspective, click yes, and project will be show on the J2EE perspective.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Right click on Databases node and select New, the following screen will appear to select the type of
connection:
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Choose DDIC Design time and click Next, after this, fills the name of connection, description and select the
option to Auto-connect as show on the following screen:
Then click Next and a screen with Summary will appear, click Finish.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After finish, verify if the dictionary information was retrieved with success, as show the following screen:
After this, go to Java EE perspective and right click on the EJB project and choose Properties-> Project
Facets, the screen bellow will appear with the current Facets:
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click Next, select Platform Generic and Connection TodoAppDict, this steps are show on screen bellow:
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click Ok, the project will be enabled to use JPA. When the JPA facet is added to EJB project, a file named
persistence.xml and orm.xml are created to configure information about JPA, in this project we will change
only persistence.xml, when this file is created the persistence unit name is a name of project, let's to change
its name to a friendlier name. To do it, open the EJB project -> ejbmodule-> META-INF and open
persistence.xml, after change the file as show bellow.
From:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit
name="LocalDevelopment~LocalDevelopment~todo(2fejb~demo.sap.com">
<mapping-file>
META-INF/orm.xml</mapping-file>
</persistence-unit>
</persistence>
To:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="todoUnit">
<mapping-file>
META-INF/orm.xml</mapping-file>
</persistence-unit>
</persistence>
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After click Finish, a new JPA Entity class will be generated on ejbmodule src folder. This class will contain
JPA Annotations.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After Finish, the interface and implementation to Session Bean will be generated like screen bellow.
After, declared methods on interface must to be implemented on the Session Bean, before to implement the
methods is important lets clear that JPA Entity Manager will provide methods to manipulate Todo Entity. The
JPA Entity Manager will be injected through the following annotation:
@Stateless(name="AgenciaGerServiceBean")
public class AgenciaGerServiceBean implements AgenciaGerServiceLocal {
@PersistenceContext(unitName="todoUnit")
private EntityManager em;
}
When the code runs, the attribute em will be initialized with a instance of Entity Manager according with
informations defined on persistence.xml file.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
The code bellow, shows the complete code to Session Bean class:
@Stateless(name="TodoServiceBean")
public class TodoServiceBean implements TodoServiceLocal {
@PersistenceContext(unitName="todoUnit")
private EntityManager em;
public Todo create(Todo todo) {
em.persist(todo);
return todo;
}
public void delete(Integer pk) {
Todo todo = em.find(Todo.class, pk);
em.remove(todo);
}
@SuppressWarnings("unchecked")
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public List<Todo> findByDescription(String description) {
Query query=em.createNamedQuery("Todo.findByDescription");
description = description == null ? "%%" : "%"+description+"%";
query.setParameter("description", description);
List<Todo> result=query.getResultList();
return result;
}
public Todo update(Todo todo) {
em.merge(todo);
return todo;
}
}
Note: The method findByDescription uses a named query Todo.findByDescription, this query needs to be defined on
Entity. The Entity named query declaration will be show bellow.
Todo.java Named Query
@Entity
@Table(name="TMP_TODO")
@NamedQueries({
@NamedQuery(name="Todo.findByDescription", query="SELECT t FROM Todo t
WHERE t.todoDescription LIKE :description")
})
public class Todo implements Serializable {
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
On the next screen, select the Local Development -> My Components and click next
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After this, we need fill the information about the development component.
After click Next, select what is the JEE version, in this case 5.0
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After click Next, select which the project will packed by this Enterprise Application, select the TODO EJB and
click Finish.
Before execute the build and deploy of Enterprise Application, is necessary put datasource information on
persistence.xml configuration file. To it open the ejb project -> ejbmodule-> META-INF and edit the file, we
need to input the <jta-data-source> as child of <persistence-unit> as showed bellow.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="todoUnit">
<jta-data-source>TODO/TODODS</jta-data-source>
<mapping-file>
META-INF/orm.xml</mapping-file>
</persistence-unit>
</persistence>
Note: TODO/TODODS must be an Alias to System Data source
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After successful deploy of Application, the last development component, Web Dynpro, will be created.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
The Enterprise Application uses only ASSEMBLY part, to import the EJB, we need of compilation part. To
see the current dependencies of Enterprise Application DC, select the todo/app then select tab
dependencies:
On the above image just ejbjar (ASSEMBLY) part was selected, now select the client (COMPILATION) and
on Dependency Details of right side select Build Time.
Now, the Application can access the public part COMPILATION from EJB DC, but, to Web Dynpro to access,
we need to create a Public Part on Enterprise Application DC of COMPILATION type, that point to Entity of
EJB DC.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Select todo/app, select Public Parts tab and click Add, put ejb_pp on Name and COMPILATION on Purpose,
as show screen bellow
After click Finish, right click on Public Part and select Reference Entities as screen bellow
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After, select My Components -> todo/ejb -> client as show screen bellow.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
On the next screen, select Local Development -> My Components and click next
After this, we need fill the information about the development component.
Then click next and Finish. The DCs archive will be synchronized and a dialog can be show to change to
Web Dynpro perspective, click yes and the project will be show on the Web Dynpro perspective.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Put the name of component as CrudApp, select the option Default Window and Views like screen bellow:
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After click Finish, the component will be created. At the screen bellow we have a view of the component.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click next and verify if Public Part is selected then click Finish
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, the EJB can be imported. To do it, open Web Dynpro perspective and Double Click CrudApp, then click
on Create Model option, and click on Component Diagram.
After this, a Wizard will open to select the model type, select Enterprise JavaBean Model.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click next and fill Model Name as EJBCrudModel and fill Model Package as
com.sap.demo.todo.wdp.model
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click on Next and a screen with the classes that will be generated will be show.
After, click on Next and the a screen with the classes will be show separated by groups, for each method will
be generated a corresponding Request object and, to each method that contain return, will generate a
Response object, finally Model classes will be generated at Others group.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click Finish and model will be generated and will appear on Component Diagram as screen bellow.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After, a screen with available methods will be show, select and drag and drop the update and
findByDescription methods to left side.
The next screen shows the process to findByDescription
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Repeat the process to update method. Note that return node has a problem, it occurs because already exists
a node with the name return and Response, that was created previously to findByDescription. To solve it
change the name of return node to returnUpdate and ResponseUpdate.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After complete the mapping the context will be like screen bellow.
Note: The EJB have 4 methods, and all method were imported, but just update and findByDescription were mapped to
context, all methods will be used on the simple crud application. But only these will need to bind to UI. The others
will be used just programmatically.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
To get the search screen working correctly will be necessary initialize the node
Request_TodoServiceLocal_findByDescription. To do it open the Java Editor of Custom Controller and
locate the method wdDoInit and put the following code.
At others section of the Web Dynpro code, declare and initialize the model that will be used for other
methods. This section can be found at end of file.
//@@begin others
EJBCrudModel model = new EJBCrudModel();
//@@end
//@@begin javadoc:wdDoInit()
/** Hook method called to initialize controller. */
//@@end
public void wdDoInit()
{
//@@begin wdDoInit()
EJBCrudModel model = new EJBCrudModel();
Request_TodoServiceLocal_findByDescription request = new
Request_TodoServiceLocal_findByDescription(model);
wdContext.nodeRequest_TodoServiceLocal_findByDescription().bind(request);
//@@end
}
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After this, the method to call the search method needs to be created on Custom Controller. Select the
Methods tab and click on New button, select Method and click next, after fill the name as searchTodo, after
click finish.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, the method searchTodo can be called by view. To do it, open CrudAppView and select Actions tab,
click on New Button and put name SearchTodo
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, we can create the UI to search. Open the CrudAppView and insert a Transparent Container as child of
RootElement. Change the layout of RootElement to FlowLayout.
Right click on it and select Apply Template, choose Form and click next
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Select Description and click next, after click Finish and the criteria input will show on search view.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, we need to put the response data on screen, to do it, select Root Element and select Apply Template
then choose the Table option.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After select the table and change the width property to 700px.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After this procedures, at outline of view, a screen like this should be appears.
Default Label
New Label
description_label
Description
todoId
ID
todoDescription
Description
todoPriority
Priority
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Set name CrudApp and click Next, select use existing component then Finish.
Now, select the application and choose Deploy new Archive and Run.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
A screen like bellow will appear, click on Search to make a simple test, no data will return, but It will certify
that all is ok. On the nest Step we will create the edit/create page of CRUD.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
On the next screen, select the option manually and fill the name with updateMode, then select type
boolean. This will indicate if the record is on update mode or create mode..
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
//@@begin javadoc:initCreate()
/**
* Method declared by application.
*/
//@@end
public void initCreate( ) {
//@@begin initCreate()
Request_TodoServiceLocal_update requestUpdate = new
Request_TodoServiceLocal_update(model);
Todo todo = new Todo(model);
requestUpdate.setTodo(todo);
wdContext.currentContextElement().setUpdateMode(false);
wdContext.nodeRequest_TodoServiceLocal_update().bind(requestUpdate);
//@@end
}
Note: Both methods are using the request update node, this strategy was adopted to reduce redundancy to build a view
to each one (edit and create). The data of operations are the same, so isnt necessary to duplicate the code. The
WDCopyServices was used to copy data of a node to another with the same structure. The updateMode attribute
is initialized according the operation.
The methods to initialize the context were created, now is necessary create a method to save the record, this
method must to decide if a update or insert operation will be called, this will based on updateMode attribute.
At the methods tab of CrudAppCust, create a new method named saveTodo, then File-> Save All. After, put
the code bellow in the method.
//@@begin javadoc:saveTodo()
/**
* Method declared by application.
*/
//@@end
public void saveTodo( ) {
//@@begin saveTodo()
try{
if (wdContext.currentContextElement().getUpdateMode()){
wdContext.currentRequest_TodoServiceLocal_updateElement().modelObject().execute();
} else {
Request_TodoServiceLocal_create requestCreate = new
Request_TodoServiceLocal_create(model);
requestCreate.setTodo(wdContext.currentRequest_TodoServiceLocal_updateElement().
modelObject().getTodo());
requestCreate.execute();
wdContext.currentContextElement().setUpdateMode(true);
}
wdComponentAPI.getMessageManager().reportSuccess("Operation was completed
with success");
} catch (Exception e){
wdComponentAPI.getMessageManager().reportException(e);
}
//@@end
}
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
To complete the CRUD, the remove operation must exists. To this, execute the previous
step to create a new method named removeTodo. After, put the code bellow in the
implementation.
//@@begin javadoc:removeTodo()
/**
* Method declared by application.
*/
//@@end
public void removeTodo( ) {
//@@begin removeTodo()
try{
Request_TodoServiceLocal_delete requestDelete = new
Request_TodoServiceLocal_delete(model);
Integer pk = wdContext.currentRequest_TodoServiceLocal_updateElement().
modelObject().getTodo().getTodoId();
requestDelete.setPk(pk);
requestDelete.execute();
wdContext.nodeReturn().removeElement(wdContext.currentReturnElement());
wdContext.nodeReturn().invalidate();
wdComponentAPI.getMessageManager().reportSuccess("Operation was completed
with success");
} catch (Exception e){
wdComponentAPI.getMessageManager().reportException(e);
}
//@@end
}
Note: To remove operation, the pk is retrieved of current record and passed to method of EJB. After, the current element
is removed of result list.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
The next step is create a new View to edit screen, select the Views of component, right click -> Create View
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, is necessary to map the context of CrudAppCust to CrudAppEditView context. To do it, open the
CrudApp component diagram. Click on Create Data Link and Drag and Drop the data link from
CrudAppEditView to CrudAppCust. A dialog to mapping will appear, in it drag and drop node update and
updateMode attribute.
Click on Finish and the mapping is ready. The diagram should be like screen bellow.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
To build the edit/create view, open the CrudAppEditView and remove the DefaultTextView of RootElement.
Insert a Group component child of RootElement, and right click and Apply Template.
On next screen, select Form and click Next, then select the input parameters.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click Finish and change the labels of fields according to table bellow.
Default Label
New Label
todoId_label
ID
todoDescription_label
Description
todoPriority_label
Priority
Group_Header
Todo Detail
Now, insert two buttons on RootElement with text Save , Cancel and Delete, at the later step we will set
the actions to they.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
In this sample the ID will be input by user, so the field can be edited only to new records. To make this
control, the attribute updateMode will be used. If in updateMode the field cant be edited. To do it, select the
id field and select the property readOnly, click on bind button and select the attribute updateMode..
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
After click OK, the readOnly property will use the attribute to control the edit status.
To navigate from a screen to another, the plugs need to be created, select the Window and double click,
initially only CrudAppView is on diagram..
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Click on Embed existing View, and then click on diagram. A dialog will open to choose what view must be
embedded. Select CrudAppEditView.
After click Finish, and the view will appear in the diagram.
Create an Outbound Plug on CrudAppView with name ToEditView, and create an Inbound plug with name
FromEditView.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Create an Outbound Plug on CrudAppEditView with name ToSearchView, and create an inbound plug with
name FromSearchView.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, create the last action, Delete. To this, create a new Action named Delete
Click Finish and then File-> Save All
Go to Implementation of Delete action.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Now, is necessary to set the actions to buttons Save, Cancel and Delete. To this, select the button and
change the property onAction to Save, Cancel and Delete respectively. After, the edit view is fully
configured. Now we need to add the edit and create actions to search view.
Open the CrudAppView and insert two new button, Create and Edit.
Note that buttons doesnt have actions associated. So lets to create the actions, select the Actions tab and
create a new action named Create and select Fire Plug ToEditView, click on Finish, then click on save menu
and goes to implementation method and put the following code.
//@@begin javadoc:onActionCreate(ServerEvent)
/**
* Declared validating event handler.
*
* @param wdEvent generic event object provided by framework
*/
//@@end
public void onActionCreate(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent
wdEvent )
{
//@@begin onActionCreate(ServerEvent)
wdThis.wdGetCrudAppCustController().initCreate();
wdThis.wdFirePlugToEditView();
//@@end
}
After, create a new action named Edit and select ToEditView for the Fire Plug option,
click on Finish. Click on save menu and goes to implementation method and put the
following code.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
//@@begin javadoc:onActionEdit(ServerEvent)
/**
* Declared validating event handler.
*
* @param wdEvent generic event object provided by framework
*/
//@@end
public void onActionEdit(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent
)
{
//@@begin onActionEdit(ServerEvent)
wdThis.wdGetCrudAppCustController().initEdit();
wdThis.wdFirePlugToEditView();
//@@end
}
With the actions created, set the actions to respective buttons (Create and Edit).
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Conclusion
This is a very simple application that shows the development using EJB 3 and Web Dynpro.
This can be improved with forms validation [Tutorial]
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro
Related Content
Getting Started with Java Persistence API and SAP JPA 1.0
SAP NetWeaver J2EE Preview: Application Development with the EJB 3.0 Programming Model
Basics of the Java Persistence API Understanding the Entity Manager
For more information, visit the User Interface Technology homepage.
How to Develop a Simple Crud Application Using Ejb3 and Web Dynpro