Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces
Purpose
In this tutorial, you use Oracle JDeveloper 11g Version 11.1.1.2.0 to build a web application. To build the data model, you use the EJB diagrammer, utilizing EJB 3.0 and Java Persistence API (JPA). For the web client, JavaServer Faces (JSF) is used. A master-detail page, a query/edit page and a search page are included in the user interface.

Time to Complete
1 hour and thirty minutes

Topics
The tutorial covers the following topics: Overview Scenario Prerequisites Creating a Database Connection Building the Data Model using EJB 3.0 Creating a New Project for the User Interface Creating the Page Flow Creating a Master-Detail JSF Page Creating a Query Page Creating a Search Page Running the JSF Pages Summary

Viewing Screenshots
Place the cursor over this icon to load and view all the screenshots for this tutorial. (Caution: This action loads all screenshots simultaneously, so response time may be slow depending on your Internet connection.) Note: Alternatively, you can place the cursor over an individual icon in the following steps to load and view only the screenshot associated with that step. You can hide an individual screenshot by clicking it. Back to Topic List

Overview
The application reflects the Model-View-Controller architecture. The model is provided by EJB Components, while the view and controller are provided by JavaServer Faces.You use the ADF Faces set of JSF-compatible components to build a richer web interface. You first build the data model portion of the application. The Java Persistence API (JPA) provides a POJO persistence model for object-relational mapping. The Java Persistence API was developed by the EJB 3.0 software expert group as part of JSR 220, but its use is not limited to EJB software components. It can also be used directly by web applications and application clients, and even outside the Java EE platform, for example, in Java SE applications. Enterprise JavaBeans (EJB) technology is the server-side component architecture for Java Platform, Enterprise Edition (Java EE) that encapsulates business logic. EJB technology enables rapid and simplified development of distributed, transactional, secure and portable applications based on Java technology. The Java Persistence API is the standard API for the management of persistence and object/relational mapping. It provides an object/relational mapping facility for application developers using a Java domain model to manage a relational database. The Java Persistence API is part of the Java EE platform. It can also be used in Java SE environments. In the tutorial, you implement a persistence model by developing Session and Entity beans. These beans use the EJB 3.0
http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 1 of 88

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

annotations and JPA for model persistence. EJB 3.0 entities represent persistent data from the database, such as a row in a customer table or an employee record in an employee table. Entities are also sharable across multiple clients. You use the Entity Manager API to create, update, delete and query the persistence model. Session beans perform a distinct, decoupled task such as checking credit history for a customer. You then create a master-detail form for viewing Departments and Employees information. Following this basic master-detail page creation, you create a query page to find a particular employee, and you then edit the employee's record. You also create a search page to search for a particular department. While developing and testing the application, you use JDeveloper's embedded Java EE application server. Back to Topic List

Scenario
You create persistence objects for the DEPARTMENTS and EMPLOYEES tables. The persistence objects are implemented as Entity Beans. Default getter and setter methods are created for department and employee data. These methods are implemented as part of a session bean. Then you create a Master Detail JSF page based on Departments and related Employees, a Query/Edit JSF page enabling a search for, and update of an employee's data and a search page that allows input of search criteria to find a particular department. Back to Topic List

Prerequisites
1. Have access to or have installed Oracle JDeveloper 11g Version 11.1.1.2.0. You can download it from Oracle Technology Network.

2.

Have access to or have installed the Oracle Sample Schemas, included with the Oracle 10g or Oracle 11g database. The tutorial uses the HR schema. Specifically, the pages work with the DEPARTMENTS and EMPLOYEES tables. Instructions for installing the HR schema and creating a connection to it in JDeveloper are available online at: http://www.oracle.com/technology/obe/obe11jdev/11/common/connection11g.htm

3.

Start JDeveloper by selecting Start > All Programs > Oracle Fusion Middleware > JDeveloper Studio 11.1.1.2.0

4.

If the Migrate User Settings dialog box opens, click No. If prompted for a User Role, choose Default Role.

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 2 of 88

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

Close the Tip of the Day window. 5. The JDeveloper IDE should now be displayed.

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 3 of 88

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

Back to Topic List

Creating a Database Connection
Java Database Connectivity (JDBC) is a standard API that is used for connecting a Java application to relational databases. JDeveloper uses a connection navigator to maintain connection information for your application. The connection navigator makes it easy to create, manage, and test database connections. If you haven't already established a connection to the database, then do so by performing the following steps: 1. Click the Database Navigator tab on the Application Navigator. If the Database Navigator tab is not visible, choose View > Database > Database Navigator from the JDeveloper main menu.

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 4 of 88

3. Right-click the IDE Connections node and choose New Connection from the context menu. in the first section enter the following values: Connection Name Connection Type Username Password Save Password HRConn Oracle JDBC hr hr (checked) http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB. JPA. In the Create Database Connection Dialog.html Page 5 of 88 . and JavaServer Faces 1/14/11 7:16 PM 2.com/obe/jdev/obe11jdev/ps1/ejb/ejb.oracle.

If the database is available and the connection details are correct. JPA. you see the word Success! displayed in the Status window.Build a Web Application with JDeveloper 11g Using EJB. In the Oracle (JDBC) Settings section. and then retest the connection. enter the following values: Driver Host Name JDBC Port thin localhost 1521 Choose the solution that applies best to your environment by completing one of the 2 following lines: SID Service Name orcl XE 4.com/obe/jdev/obe11jdev/ps1/ejb/ejb. If an error occurs. make any necessary changes.oracle. verify the connection settings. Click Test Connection. http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM Note: It is secure to deploy the password since it gets encrypted. click OK to complete the connection.html Page 6 of 88 . If the connection is successful.

In the next few steps. and JavaServer Faces 1/14/11 7:16 PM 5.com/obe/jdev/obe11jdev/ps1/ejb/ejb.0 Using the EJB Diagrammer The data model provides data access and validation for an application. The next section uses this connection. JPA. regardless of the client implementation.oracle. Back to Topic List Building the Data Model with EJB 3.Build a Web Application with JDeveloper 11g Using EJB.html Page 7 of 88 . The Database Navigator should look like this: You have just created a connection to the database that will supply data for the application you build in this tutorial. The data is always validated by the model. you create an application in JDeveloper and create a data model for your application. Create a New Application and Project http://st-curriculum. This cleanly separates the validation and business rules from the user interface.

Click the New Application icon. In the Application Navigator. and JavaServer Faces 1/14/11 7:16 PM Create the Persistence Model Create the Data Model and test it Run the Data Model outside Java EE container Create ADF data controls from EJB Session Beans Back to Topic List Creating a New Application and Project In JDeveloper. you always work with projects contained in an application.com/obe/jdev/obe11jdev/ps1/ejb/ejb. modify. access. under the application. It is considered best practice to use projects to separate the model code from the code written for the view. In the Create Application dialog box. JPA. you must first create an application and project.html Page 8 of 88 . A JDeveloper project is an organization structure used to logically group related files You can add multiple projects to your application to easily organize. and later on a second one for the JSF views.oracle. the directory name changes automatically. perform the following steps: 1. This creates an Application and a single nonconfigured project. projects are displayed as the second level in the hierarchy. you create one project for the EJB Components model. 2. Enter oracle as the Application Package Prefix. Notice that as you enter the application name. Select Generic Application from the Application Template list.Build a Web Application with JDeveloper 11g Using EJB. The application is the highest point in the control structure. To do this. Click the Application tab to go back to the Application Navigator. In this tutorial. http://st-curriculum. and reuse your source code. Before you create any components. enter the Application Name HR_EJB_JPA_App.

3. and JavaServer Faces 1/14/11 7:16 PM Click Next.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB.oracle. set Project Name to EJBModel then click Finish.html Page 9 of 88 . JPA. http://st-curriculum. In the Create Project dialog.

5. In the Navigator pane. click the Database Navigator tab.oracle. http://st-curriculum.html Page 10 of 88 .com/obe/jdev/obe11jdev/ps1/ejb/ejb. Select the HRConn connection in the IDE connections list and drag and drop it inside the HR_EJB_JPA_App node to make the connection available for your application. and JavaServer Faces 1/14/11 7:16 PM 4. JPA.Build a Web Application with JDeveloper 11g Using EJB.

and JavaServer Faces 1/14/11 7:16 PM 6. You see the application and project you just created.0 entity beans. In the Application Navigator. http://st-curriculum. right click the EJBModel node and select New from the context menu. JPA.0 entity beans. Click the Application Navigator tab. perform the following steps: 1. Back to Topic Back to Topic List Creating the Persistence Model In this section of the tutorial.Build a Web Application with JDeveloper 11g Using EJB.html Page 11 of 88 . To create EJB 3.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb. you create the persistence model for Departments and Employees using EJB 3.

0 -. In Select EJB Version. 3. then Next.html Page 12 of 88 .Build a Web Application with JDeveloper 11g Using EJB.oracle. In the New Gallery select the All Technologies tab.JPA Entities as the EJB version. and JavaServer Faces 1/14/11 7:16 PM 2. then select Business Tier | EJB as the category and double click the Entities from Tables item. JPA. select EJB 3. http://st-curriculum.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

select HRConn as the connection to use. JPA.Build a Web Application with JDeveloper 11g Using EJB. Click Next to skip the persistence unit definition. and JavaServer Faces 1/14/11 7:16 PM 4. 6. In the Database Connection Details page.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb. http://st-curriculum. Then click Next. In the Type of Connection page choose the Online Database Connection option. 5.html Page 13 of 88 .

JPA.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 14 of 88 . Click Query to retrieve the available objects for the HR schema. Then select DEPARTMENTS and EMPLOYEES and shuttle the selection in the selected pane using the right arrow button . http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB.oracle. Click Next. and JavaServer Faces 1/14/11 7:16 PM Click Next 7.

com/obe/jdev/obe11jdev/ps1/ejb/ejb. In this step.Build a Web Application with JDeveloper 11g Using EJB. http://st-curriculum. Click the Save All icon to save your work. then Finish. Right click the EJBModel node in the Application Navigator and select New.html Page 15 of 88 . 10. JPA. 11. 9. and JavaServer Faces 1/14/11 7:16 PM 8. In the Application Navigator one java file is created for Departments and one for Employees. Click Next.oracle. make sure the package name is oracle.

com/obe/jdev/obe11jdev/ps1/ejb/ejb. and JavaServer Faces 1/14/11 7:16 PM 12. In the New Gallery select Business Tier | EJB as the category and double click EJB Diagram (JPA/EJB 3. http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB.html Page 16 of 88 . JPA. change the default name for the diagram (EJB Diagram1) to EJB3 and verify oracle is the Package name.oracle. 13. In the Create EJB Diagram dialog.0).

On the Associate Diagram With Persistence Unit dialog. 14.jpr). click OK to accept the proposed Persistence Unit EJBModel (EJBModel. JPA. and JavaServer Faces 1/14/11 7:16 PM Click OK.html Page 17 of 88 . A new empty diagram opens in the diagram editor.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB.oracle. http://st-curriculum.

com/obe/jdev/obe11jdev/ps1/ejb/ejb. and JavaServer Faces 1/14/11 7:16 PM 15.Build a Web Application with JDeveloper 11g Using EJB. Select the Departments and Employees entities from the Application Navigator then drag and drop them onto the diagram. JPA.html Page 18 of 88 .oracle. http://st-curriculum.

html Page 19 of 88 . This results in a large amount of network traffic that negatively affects performance. http://st-curriculum.oracle. Click the Save All icon to save your work. client objects have to be changed as well. As a result. you create a session bean that implements a method to find employee and department records. select the EJB Components library and open the EJB Nodes. If you are performing remote access without a session facade. In addition.0 entities directly over the network.Build a Web Application with JDeveloper 11g Using EJB. dependencies and communication between clients and EJBs are reduced. 1. JPA.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Back to Topic Back to Topic List Creating the Data Model and Testing it A session facade presents client objects with a unified interface to the underlying EJBs (Enterprise JavaBeans). In this section. which resides on the server and invokes the appropriate EJB methods. The client interacts only with the facade. 17. and JavaServer Faces 1/14/11 7:16 PM 16. so that if the interface of an EJB changes. The diagram displays the EJB components that you just created from the Departments and Employees tables. In the Component Palette. without a facade the client depends directly on the implementation of the business objects. Reorganize the layout of the diagram to have both entities horizontally aligned. You can tidy the diagram by selecting relationships and using the Straighten lines option from the context menu. numerous remote calls are needed for the clients to access EJB 3.

In the EJB Name and Options step. Select the Session Bean component then drag and drop it onto the diagram. click Next on the Welcome step. set the EJB Name to HRFacade and make sure that the following values are properly set: Session Type Transaction Type Generate Session Facade Method Entity Implementation Stateless Container (Checked) JPA Entities http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM 2. If necessary. 3. JPA.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 20 of 88 .oracle.Build a Web Application with JDeveloper 11g Using EJB. The Create Session Bean Wizard opens.

JPA.Build a Web Application with JDeveloper 11g Using EJB. Page 21 of 88 http://st-curriculum.HRFacadeBean. and JavaServer Faces 1/14/11 7:16 PM Persistence Unit EJBModel then click Next. any entities in this project appear as a node in the tree control. and then click Next. In the Session Facade step. 4.com/obe/jdev/obe11jdev/ps1/ejb/ejb. then click Next. make sure that the full name for Bean Class is oracle. or expand the nodes and select a subset of methods. 5.html . Expand the Employees and Departments nodes and select the merge. You can select the checkbox to include all entity methods this entity exposes. remove and the getFindAll methods for each entity.oracle. In the Class Definition step.

html Page 22 of 88 .oracle. and JavaServer Faces 1/14/11 7:16 PM 6. The remote interface is used for client applications that run in a separate virtual machine. In the following step.Build a Web Application with JDeveloper 11g Using EJB. such as Web clients . JPA. 7. ensure that both Remote and Local interface implementations are selected.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Click Next to review the summary of the created classes and then Finish. The Application Navigator should look like this: http://st-curriculum. such as Java clients whereas local interface is used for client applications that run in the same virtual machine.

findAll". HRFacade describes the capabilities of the bean for remote clients and HRFacadeLocal describes the capabilities for the local client.contains the session bean code. Double click the Employees entity bean on the diagram to open the source code for the class. 8. and JavaServer Faces 1/14/11 7:16 PM The session bean is made up of three files: HRFacadeBean .oracle. JPA.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB. Named queries enable you to define queries at design time and then use them at run time. @NamedQueries({ @NamedQuery(name = "Employees. The wizard created one NamedQuery metadata statement in the Employee entity. 9. query = "select o from Employees o") http://st-curriculum.html Page 23 of 88 . This query retrieves all rows from the Employees table.

http://st-curriculum.NamedQueries library. use the ALT + Enter keystroke combination to import the javax.0 entity A query that can be used at run time to retrieve data Specifies the primary table for the entity Can define which property is the identifier for the entity Specifies a mapped column for a persistent property or field Specifies a type of foreign key relationship between tables Specifies the join column and referenced column for a foreign key relationship 10. and JavaServer Faces 1/14/11 7:16 PM }) Note: Any symbol in Java code beginning with @ is known as an annotation. query = "select o from Employees o where o.html Page 24 of 88 . Note: What makes these objects different from other Java files are the annotations that identify them as EJB entities.firstName like :p_name") So that the code looks like the following: @Entity @NamedQueries({ @NamedQuery(name = "Employees. A key feature of EJB 3. Examples of annotations follow: Annotation @Entity @NamedQuery @Table @Id @Column @ManyToOne @JoinColumn Description Identifies the file as an EJB 3. JPA. query = "select o from Employees o where o.firstName like :p_name") }) If required.com/obe/jdev/obe11jdev/ps1/ejb/ejb.persistence.findByName".findByName".0 and JPA is the ability to create entities that contain object-relational mappings by using metadata annotations rather than deployment descriptors as in earlier versions. Add the following statement: @NamedQuery(name = "Employees.Build a Web Application with JDeveloper 11g Using EJB. The use of annotations allows you to add metadata to your objects.findAll". Add a comma at the end of the last @NamedQuery statement. then add a query to the class that retrieves employees by name. query = "select o from Employees o") .oracle. @NamedQuery(name = "Employees.

12.Build a Web Application with JDeveloper 11g Using EJB.oracle. and JavaServer Faces 1/14/11 7:16 PM 11.java class. http://st-curriculum. JPA.Log window does not report any errors. Make sure that the Message . Click the Make icon to compile the Employees.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Add the new method to the session bean doing the following: Right-click the HRFacadeBean node in the Application Navigator and select Edit Session Facade from the context menu.html Page 25 of 88 .

Select it and click OK.Build a Web Application with JDeveloper 11g Using EJB.oracle. JPA. and JavaServer Faces 1/14/11 7:16 PM 13.com/obe/jdev/obe11jdev/ps1/ejb/ejb. http://st-curriculum.html Page 26 of 88 . Expand the Employees node of the dialog. Notice that the new named query getEmployeesFindByName appears as an exposable method.

Build a Web Application with JDeveloper 11g Using EJB. http://st-curriculum.com/obe/jdev/obe11jdev/ps1/ejb/ejb. and JavaServer Faces 1/14/11 7:16 PM 14. right click HRFacadeBean and select New Sample Java Client from the context menu.oracle. JPA. JDeveloper provides a way to test the EJB by creating a sample client. To do so.html Page 27 of 88 .

Build a Web Application with JDeveloper 11g Using EJB. JPA.html Page 28 of 88 .oracle. and JavaServer Faces 1/14/11 7:16 PM 15. Review the code of the HRFacadeClient class and correct the reported error for the getEmployeesFindByName() method by adding a value parameter "P%" so that it looks like the following: http://st-curriculum. 16. Click OK. Select IntegratedWebLogicServer as the Application Server Connection.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 29 of 88 . Right click the HRFacadeBean in the Application Navigator and select Run from the context menu to launch the facade bean in WebLogicServer. JPA. http://st-curriculum.oracle. and JavaServer Faces 1/14/11 7:16 PM Click the Save All icon to save your work. Wait until the WebLogicServer is started. 17.Build a Web Application with JDeveloper 11g Using EJB.

html Page 30 of 88 . and JavaServer Faces 1/14/11 7:16 PM 18. JPA. 19.com/obe/jdev/obe11jdev/ps1/ejb/ejb. The Log window returns the database data based on the three methods the client contains. http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB. Right click HRFacadeClient and select Run from context.oracle.

and ensure that no errors are returned. Your code should look something like this: 21.Build a Web Application with JDeveloper 11g Using EJB.html Page 31 of 88 . To better visualize the result of the findByName method.com/obe/jdev/obe11jdev/ps1/ejb/ejb. 22. http://st-curriculum. in the HRFacadeClient java class. Click the Make button to recompile the class. comment out the for loop corresponding to the getEmployeesFindAll() method. and comment out the for loop corresponding to the getDepartmentsFindAll() method. Right click the HRFacadeClient class and select Run from context. and JavaServer Faces 1/14/11 7:16 PM 20. JPA.oracle.

The Log window should now display the returned rows retrieved by your ' P%' clause. JPA. In this section. and JavaServer Faces 1/14/11 7:16 PM 23.html Page 32 of 88 . you create a session bean that implements a method to find employee and department records.0. Create a new persistence unit to run the java service outside the Java EE container. Back to Topic Back to Topic List Running the Java Service outside Java EE container A persistence unit can be configured to run inside or outside the container.oracle. Another reason is you may want to run a Swing application locally. you can run entities in a pure Java SE environment. 1. Right-click the META-INF | persistence. In EJB 3. http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB. perhaps) to test your entity behavior without the overhead of deploying/executing in an application server.com/obe/jdev/obe11jdev/ps1/ejb/ejb. One reason you might do this is to create a simple Java SE testbed (using JUnit.xml and select New Java Service Facade from the context menu. without using an application server.

html Page 33 of 88 .oracle. JPA. Click Next. and check the Generate a main() method checkbox. http://st-curriculum. Name the the Persistence Unit outside.Build a Web Application with JDeveloper 11g Using EJB. you can choose to create a new persistence unit (in the next panel) or use an existing unit. 3. and JavaServer Faces 1/14/11 7:16 PM 2.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Choose JDBC Connection and make sure the JDBC connection is set to HRConn. Select Choose a Persistence Unit or Create one in the next Panel. In the Java Service Class panel.

add a new line after the // TODO comment and enter the following statement: Employees a = javaServiceFacade.getLastName() inside the parenthesis so that your class now looks like the following: // TODO Employees a = javaServiceFacade.get(0). JPA. for the JavaServiceFacade class. http://st-curriculum. 4.Build a Web Application with JDeveloper 11g Using EJB. All methods should be selected by default. In the source editor window.out.html Page 34 of 88 . Add a. notice that you can use code coach to help you with typing the syntax (CTRL + space bar) Type sop and hit CTRL + Enter to insert a System.oracle.getEmployeesFindByName("P%").get(0).println() statement.com/obe/jdev/obe11jdev/ps1/ejb/ejb. and JavaServer Faces 1/14/11 7:16 PM Click Next. Click Next then Finish. Deselect some of them so that your selection looks like the following image. 5.getEmployeesFindByName("P%").

6. Double-click the META-INF | persistence.Build a Web Application with JDeveloper 11g Using EJB.html Page 35 of 88 . Right-click the JavaServiceFacade node in the Application Navigator and select Run from context.out. 8. Both persistence units are described. 9. 10.println(a.getLastName()). The default inside one and the newly-created for outside Java EE run. http://st-curriculum. returning the lastName of the first of the retrieved records (Payam Kaufling). The Log window displays the result of the execution of the class running outside Java EE container.oracle. and JavaServer Faces 1/14/11 7:16 PM System.xml node to display the contents of the file. Click the Make button to compile the class and save your work. 7. JPA. Click the Source tab to review details.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

html Page 36 of 88 . JPA.com/technology/products/adf To create ADF data controls from EJB Session Beans. This simplifies the way that you bind user interfaces to the EJB.Build a Web Application with JDeveloper 11g Using EJB. and JavaServer Faces 1/14/11 7:16 PM Back to Topic Back to Topic List Creating ADF Data Controls from EJB Session Beans You now expose the EJB as a data control for the Oracle ADF framework. Right-click the HRFacadeBean node in the Application Navigator and select Create Data Control from context. To learn more about the ADF Framework visit: http://oracle. http://st-curriculum.oracle. perform the following steps: 1.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

2.

In the Choose EJB Interface dialog, select Local, and click OK.

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 37 of 88

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

Click the Save All icon 3.

to save your work.

The Application Navigator should now look like this:

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 38 of 88

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

4.

You can collapse the EJBModel project node.

Back to Topic Back to Topic List

Creating a New Project for the User Interface
It is considered best practice to use projects to separate the model code from the code written for the view. For this reason you created one project for the EJB Components model, and you now create a second one for the JSF views. To do this, perform the following steps: 1. On the application name bar, click the Application Menu icon

select New Project from context.

2. In the New Gallery, select the Generic Project item.

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 39 of 88

Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces

1/14/11 7:16 PM

Click OK. 3. In the Create Project dialog, set Project Name to UserInterface then Finish.

http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html

Page 40 of 88

In the Application Navigator. right click the UserInterface node and select Project Properties from context.oracle. and JavaServer Faces 1/14/11 7:16 PM 4.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 41 of 88 . JPA.Build a Web Application with JDeveloper 11g Using EJB. http://st-curriculum.

In the Tag Libraries list. select the JSP Tag Libraries node. 6.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB.html Page 42 of 88 .oracle. JPA. In the Project Properties dialog. and JavaServer Faces 1/14/11 7:16 PM 5. Select Distributed libraries then press the Add button. select ADF Faces Components 11. http://st-curriculum.

The libraries are added to the project. In the Project Technologies tab. and JavaServer Faces 1/14/11 7:16 PM Click OK. select JSF in the http://st-curriculum.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb. select the Technology Scope node. 7. Still in the Project Properties dialog.html Page 43 of 88 . JPA.Build a Web Application with JDeveloper 11g Using EJB.

1. double click the UserInterface | Web Content | WEB_INF | faces-config.html Page 44 of 88 .JSP and Servlets) Click OK. and JavaServer Faces 1/14/11 7:16 PM Available pane. JPA. 8. http://st-curriculum.xml node to open a page flow diagram. click the save all icon to save your work. shuttle it in the Selected pane.oracle. and the navigation between them. In the Application Navigator. and using the right arrow button.Build a Web Application with JDeveloper 11g Using EJB. Then. The Application Navigator should now look like this: Back to Topic List Creating the Page Flow You now use JDeveloper's JSF Navigation Modeler to diagrammatically plan and create your application's pages. Notice that selecting JSF automatically propagates the required associated technologies (Java .com/obe/jdev/obe11jdev/ps1/ejb/ejb.

select JSF Page diagram where you want the page to appear. JPA. . Notice the Component Palette to the right of the diagram editor. Rename the page browse. 3. and JavaServer Faces 1/14/11 7:16 PM 2.Build a Web Application with JDeveloper 11g Using EJB.com/obe/jdev/obe11jdev/ps1/ejb/ejb. In the JSF Navigation Diagram page of the Component Palette. You use this to create components for the JSF Navigation Model. and click in the 4. Rename the page query.oracle. http://st-curriculum.html Page 45 of 88 . The empty diagram opens. drag and drop a JSF Page next to the previous one. From the Component Palette.

From the Component Palette. Rename the page search.oracle. Modify the default label. http://st-curriculum.html Page 46 of 88 . by clicking it and typing query over it. 7. and JavaServer Faces 1/14/11 7:16 PM 5. 6. JPA. 'success'. Click the icon for the source JSF page (browse). Select JSF Navigation Case in the Component Palette. This warning goes away when you create the respective pages. This is because you have not yet created the JSF pages and so indicates that the Navigation Case would be looking for a page that doesn't exist. Notice that there is a warning icon above the Navigation Case. and then click the icon for the destination JSF page (query) for the navigation case. drag and drop another JSF Page below the first one.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB.

Build a Web Application with JDeveloper 11g Using EJB. JDeveloper gives you three views of the faces-config. The <from-view-id> tag identifies the source page. but the same information is also accessible through a declarative dialog as well as directly in the source .oracle. and JavaServer Faces 1/14/11 7:16 PM 8. You have already used the diagram view. Click Navigation Rules in the left-hand table to display existing Navigation Rules.html Page 47 of 88 . Click the Source tab at the bottom of the screen.com/obe/jdev/obe11jdev/ps1/ejb/ejb.xml file. JPA. and the <toview-id> tag identifies the destination page. Click the Overview tab at the bottom of the screen. http://st-curriculum.

'success'. by selecting it and typing browse over it. Switch back to the diagram view by clicking the Diagram tab. and then click the icon for the destination JSF page (browse) for the navigation case.html Page 48 of 88 . In the same way add navigation cases between the browse and search JSF pages. search. 11. browse. and JavaServer Faces 1/14/11 7:16 PM 9. JPA. and select JSF Navigation Case in the Component Palette. Modify the default label. and the one that returns. Click the icon for the source JSF page (query).oracle. 10. Your diagram should now look something like the image below.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Back to Topic List Creating a Master-Detail JavaServer Faces Page http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB. Name the one that goes to the search page. Click the save all icon to save the diagram. 12.

On the Page Flow diagram. 2. Click Browse to choose a layout.oracle. JPA. 1. The file name should be browse. http://st-curriculum.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB. and JavaServer Faces 1/14/11 7:16 PM In the next few steps. and in the Initial Page Layout and Content area. double-click the browse icon to launch the Create JSF JSP wizard.html Page 49 of 88 . Check the Create as XML Document checkbox. It is best practice to use the quick start layouts to avoid display issues.jspx. you create a JavaServer Faces Page using ADF Faces components for the Departments Employees Master Detail page. click the Quick Start Layout radio button.

select the layout section and drag a Panel Stretch Layout component onto the page http://st-curriculum. 4. One Column layout category. In the Component Palette. You now have an empty browse.com/obe/jdev/obe11jdev/ps1/ejb/ejb. In the Component Gallery accept the default. This component displays a department along with the employees belonging to the department.html Page 50 of 88 . JPA.oracle. and JavaServer Faces 1/14/11 7:16 PM 3. ADF Faces library. you add a data-bound ADF Faces component to the page. Themes add color styling to some of the components used in the quick start layouts and create a nicer-looking page. and click Apply Themes in the Options pane.jspx page. Click OK to save the layout selection. In the next few steps.Build a Web Application with JDeveloper 11g Using EJB. In the Create JSF Page dialog click OK to create the page.

From the Component Palette. 6. then drag and drop the DepartmentsFindAll node within the first facet. and JavaServer Faces 1/14/11 7:16 PM 5. Open the Data Controls accordion and expand the HRFacadeLocal node. JPA.Build a Web Application with JDeveloper 11g Using EJB. drag a Panel Splitter component onto the middle of the page (the cursor should be to the left of the center tag).html Page 51 of 88 .com/obe/jdev/obe11jdev/ps1/ejb/ejb. http://st-curriculum.oracle.

oracle. select Forms | ADF Read-only Form 7.com/obe/jdev/obe11jdev/ps1/ejb/ejb. check the Include Navigation Controls option and delete all columns except the following: departmentId departmentName locationId http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM In the pop up menu.html Page 52 of 88 .Build a Web Application with JDeveloper 11g Using EJB. JPA. In the Edit Form Fields.

html Page 53 of 88 . select Panel Collection and drag and drop it into the second facet. JPA.oracle.Build a Web Application with JDeveloper 11g Using EJB. In the Component Palette. Layout group. and JavaServer Faces 1/14/11 7:16 PM Click OK. http://st-curriculum. 8.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

In the pop up menu. hiredate. JPA. In the Data Controls. expand the departmentsFindAll node. jobId. select the employeesList node and drop it in the second facet. select Tables | ADF Read-only Table 10. Filtering and Sorting options. and JavaServer Faces 1/14/11 7:16 PM 9. lastName. salary.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 54 of 88 . http://st-curriculum. In the Edit Table Columns dialog delete all columns except the following: commissionPct. firstName. employeeId. phoneNumber.oracle. and select Row Selection.Build a Web Application with JDeveloper 11g Using EJB. email.

and JavaServer Faces 1/14/11 7:16 PM Click OK.com/obe/jdev/obe11jdev/ps1/ejb/ejb. JPA. The page should now look like this: http://st-curriculum.html Page 55 of 88 .Build a Web Application with JDeveloper 11g Using EJB.oracle.

http://st-curriculum. JPA. In the Structure pane.Build a Web Application with JDeveloper 11g Using EJB. select the af:panelSplitter pane and in the Property Inspector. 12.html Page 56 of 88 .oracle. set the Orientation to vertical.com/obe/jdev/obe11jdev/ps1/ejb/ejb. In the Property Inspector set the Column Selection property of the table to single. and JavaServer Faces 1/14/11 7:16 PM 11.

for the Style | Box tabs set the Width to 600 Pixels and the Height to 400 Pixels. 14.Build a Web Application with JDeveloper 11g Using EJB. Reduce the height of the Departments block. JPA.oracle. and JavaServer Faces 1/14/11 7:16 PM 13.html Page 57 of 88 . http://st-curriculum. Select the af:panelStretchLayout tag and using the Property Inspector.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

In the Edit Property dialog.Build a Web Application with JDeveloper 11g Using EJB. (The Edit button is on the far right of the field).com/obe/jdev/obe11jdev/ps1/ejb/ejb. In the Properties Inspector. JPA.oracle. Use the shuttle buttons to add all four buttons to the selected list. and JavaServer Faces 1/14/11 7:16 PM 15. You want the employees section of this page to refresh when the user navigates between departments.Departments | facet (footer) | panelGroupLayout to expose the navigation buttons. click Edit for the Behavior | PartialTriggers property. Set the Partial Page Rendering trigger to fire when the user clicks any of those buttons. 16. http://st-curriculum.html Page 58 of 88 . expand facet (first) | panelFormLayout . Select the Employees table.

the employees list will refresh to reflect the employees within the displayed department. when the user clicks any of the 4 buttons. JPA. select the Panel Menu Bar component and drop it onto the Facet Top tag. and JavaServer Faces 1/14/11 7:16 PM Click OK. Click the Menu component then drag and drop it inside the Menu Bar. 18.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Now. in the Design view of the page. http://st-curriculum. 17.oracle. From the Component Palette.html Page 59 of 88 .Build a Web Application with JDeveloper 11g Using EJB. Common Components.

and JavaServer Faces 1/14/11 7:16 PM 19. http://st-curriculum. JPA. In the Structure Pane.html Page 60 of 88 .com/obe/jdev/obe11jdev/ps1/ejb/ejb.oracle. 20.Build a Web Application with JDeveloper 11g Using EJB. Click the Behavior tab and set the Detachable field to true. 21. In the Property Inspector change the Text from menu 1 to Options. right click the af:menu tag and from context select Insert Inside af:menu | MenuItem.

Build a Web Application with JDeveloper 11g Using EJB. using the Common tab. 23.oracle. Repeat step 21 to add another menu item.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Using the Property Inspector change the Text of this menu item to Search and from the drop down list set the Action to search.html Page 61 of 88 . In the Property Inspector. http://st-curriculum. change the Text to Query and from the drop down list set the Action to query. JPA. and JavaServer Faces 1/14/11 7:16 PM 22.

Build a Web Application with JDeveloper 11g Using EJB.html Page 62 of 88 .jspx. and in the Initial Page Layout and Content area. The file name should be query. JPA.oracle. Click the save all icon to save your work.com/obe/jdev/obe11jdev/ps1/ejb/ejb. 2. and double-click the query icon to launch the page wizard. you use ADF Faces to build a query page to edit Employees.xml tab). 1. Click Browse to choose a layout. click the Quick Start Layout radio button. Back to Topic List Creating a Query/Edit Page In the next few steps. http://st-curriculum. Switch back to the Page Flow diagram (click the faces-config. Check the Create as XML Document checkbox. and JavaServer Faces 1/14/11 7:16 PM 24.

com/obe/jdev/obe11jdev/ps1/ejb/ejb. and JavaServer Faces 1/14/11 7:16 PM 3.oracle.Build a Web Application with JDeveloper 11g Using EJB. JPA.html Page 63 of 88 . In the Component Gallery. http://st-curriculum. accept the One Column category and click Apply Themes in the Options pane.

html Page 64 of 88 .jspx page.com/obe/jdev/obe11jdev/ps1/ejb/ejb. In the Create JSF Page dialog click OK to create the page. under the HRFacadeLocal node. and JavaServer Faces 1/14/11 7:16 PM Click OK to save the layout selection. You now have an empty query. http://st-curriculum. select the getEmployeesFindByName(Object) node and drop it onto the page. 4.oracle. JPA.Build a Web Application with JDeveloper 11g Using EJB. In the Data Controls accordion.

Build a Web Application with JDeveloper 11g Using EJB. 6. The page design should look like this: http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM From the popup menu. In the Edit Form Fields click OK to accept the proposed fields. select Parameters | ADF Parameter Form.html Page 65 of 88 .com/obe/jdev/obe11jdev/ps1/ejb/ejb. JPA. 5.oracle.

check both checkboxes (Include Navigation Controls .Build a Web Application with JDeveloper 11g Using EJB.html Page 66 of 88 . From the popup menu.Include Submit Button) and delete all columns except the following: commissionPct. and JavaServer Faces 1/14/11 7:16 PM . In the Edit Form Fields.oracle. JPA. employeeId. 8. expand the getEmployeesFindByName node and select the Employees node. select Forms | ADF Form. http://st-curriculum. email. Drop it onto the page below the Parameter Form.com/obe/jdev/obe11jdev/ps1/ejb/ejb. firstName. In the Data Control accordion. 7.

Click OK. 9. JPA.com/obe/jdev/obe11jdev/ps1/ejb/ejb. hiredate.html Page 67 of 88 . jobId. and JavaServer Faces 1/14/11 7:16 PM firstName.Build a Web Application with JDeveloper 11g Using EJB. lastName.oracle. salary. The design for the query page should look like this: http://st-curriculum. phoneNumber.

oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb. JPA.html Page 68 of 88 . http://st-curriculum. and drop it onto the Submit button. to specify this.Build a Web Application with JDeveloper 11g Using EJB. select the mergeEmployees(Employees) method in the Data Controls pane. This page needs to be updatable. and JavaServer Faces 1/14/11 7:16 PM 10.

click the down arrow in the Value field and select Show EL Expression Builder.html Page 69 of 88 . the editor adds it to the expression in the top of the window. in the Parameters section. expand ADF Bindings | Bindings |getEmployeesFindByNameIterator | currentRow and select dataProvider. Notice that as you select each node in the expression. JPA. and JavaServer Faces 1/14/11 7:16 PM In the Edit Action Binding dialog. In the Variables dialog.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB. http://st-curriculum. 11.

oracle. click OK. 13. JPA. In the Confirm Component Rebinding dialog.Build a Web Application with JDeveloper 11g Using EJB. 12.html Page 70 of 88 . then click OK again.com/obe/jdev/obe11jdev/ps1/ejb/ejb. Back in the design view of the query page. select the mergeEmployees button http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM Click OK.

Advanced tab. 16.html Page 71 of 88 . http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM 14. set the the Action to browse from the drop down list. Common tab. right-click and choose Go To Page Definition from the context menu. In the Property Inspector.oracle. JPA. In the Page Definition file. set the Text value to Save and in the Button Action section.com/obe/jdev/obe11jdev/ps1/ejb/ejb. set the Refresh property to ifNeeded. select getEmployeesFindByNameIterator in the Executables box and in the Property Inspector.Build a Web Application with JDeveloper 11g Using EJB. 15. With the button still selected.

JPA.Build a Web Application with JDeveloper 11g Using EJB. Your page should now look like this: http://st-curriculum. 17.oracle. Click the Save all icon to save your work.html Page 72 of 88 . 18. and JavaServer Faces 1/14/11 7:16 PM Setting this property maintains row concurrency for ADF Faces and JSP/JSF pages.com/obe/jdev/obe11jdev/ps1/ejb/ejb.

and double-click the search icon to launch the page wizard.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB.xml tab). you use ADF Faces to build a search page using the new ADF query feature.html Page 73 of 88 . JPA. 1. Switch back to the Page Flow diagram (click the faces-config. and JavaServer Faces 1/14/11 7:16 PM Back to Topic List Creating a Search Page In the next few steps. http://st-curriculum.oracle.

jspx. accept the One Column category and click Apply Themes in the Options pane.html Page 74 of 88 . click the Quick Start Layout radio button. In the Component Gallery. and JavaServer Faces 1/14/11 7:16 PM 2. http://st-curriculum. Click Browse to choose a layout. and in the Initial Page Layout and Content area.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB. Check the Create as XML Document checkbox. 3. The file name should be search.oracle. JPA.

oracle. In the Create JSF Page dialog click OK to create the page. expand the departmentsFindAll node and then the Named Criteria node. Select All Queriable Attributes and drag and drop it onto the page. You now have an empty search.jspx page.html Page 75 of 88 . and JavaServer Faces 1/14/11 7:16 PM Click OK to save the layout selection. under the HRFacadeLocal node.com/obe/jdev/obe11jdev/ps1/ejb/ejb. JPA.Build a Web Application with JDeveloper 11g Using EJB. http://st-curriculum. In the Data Controls accordion. 4.

select Query | ADF Query Panel with Table. 5. In the Edit Form Fields delete all columns except the following: departmentId departmentName locationId http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB.com/obe/jdev/obe11jdev/ps1/ejb/ejb.oracle.html Page 76 of 88 . JPA. and JavaServer Faces 1/14/11 7:16 PM From the popup menu.

Build a Web Application with JDeveloper 11g Using EJB. JDeveloper makes it easy to test JSF pages through a built-in http://st-curriculum. JPA.html Page 77 of 88 . The design for the search page should look like this: . Running the JSF Pages Now that you have built your application.com/obe/jdev/obe11jdev/ps1/ejb/ejb.oracle. and JavaServer Faces 1/14/11 7:16 PM 6. you need to test it.

Your page is loaded in your default browser and should look like the following: 3.oracle. 2. JPA. http://st-curriculum. Right click the browse page icon and select Run from the context menu. Click the Next button to find a department with several employees in its list. 1. Then click in the firstName column and experiment sorting the names in ascending/descending order using the up/down arrow icons. To test the pages. return to the page flow diagram. and JavaServer Faces 1/14/11 7:16 PM application server. The server is automatically launched when you test a page from within JDeveloper.html Page 78 of 88 . for example department 30.com/obe/jdev/obe11jdev/ps1/ejb/ejb. The next few steps take you through the testing process.Build a Web Application with JDeveloper 11g Using EJB.

Build a Web Application with JDeveloper 11g Using EJB.oracle. JPA.html Page 79 of 88 . http://st-curriculum. Scroll right to select the lastName column header and move it left to position it in the table just after the firstName column. and JavaServer Faces 1/14/11 7:16 PM 4. firstName.com/obe/jdev/obe11jdev/ps1/ejb/ejb. 5. Select the column headers and reorder the columns in this sequence: employeeId.

hireDate. click Options -->Query and move the menu to another location on your page. salary.html Page 80 of 88 . email. and JavaServer Faces 1/14/11 7:16 PM lastName. JPA..com/obe/jdev/obe11jdev/ps1/ejb/ejb. http://st-curriculum.. On the top left of the page.oracle. jobId. 6.. Then press the Query button. commissionPct.Build a Web Application with JDeveloper 11g Using EJB.

e. and JavaServer Faces 1/14/11 7:16 PM 7.com/obe/jdev/obe11jdev/ps1/ejb/ejb. In the queryEmployeesFindByName_p_name field enter any name or partial name. The query page opens in the browser. http://st-curriculum.html Page 81 of 88 .oracle.Build a Web Application with JDeveloper 11g Using EJB. JPA. A% then click the getEmployeesFindByName button. i.

html Page 82 of 88 . Experiment with the navigation buttons if your query retrieved more than one record.oracle. and JavaServer Faces 1/14/11 7:16 PM 8. 9. JPA. Click in the hireDate field to see the calendar component display.com/obe/jdev/obe11jdev/ps1/ejb/ejb.Build a Web Application with JDeveloper 11g Using EJB. http://st-curriculum.

http://st-curriculum. and JavaServer Faces 1/14/11 7:16 PM 10.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 83 of 88 . Increase Alexander's salary to 10000 and click the Save button to commit the change and take you back to the browse page. JPA.Build a Web Application with JDeveloper 11g Using EJB.

and this time select Search to navigate to the search page.Build a Web Application with JDeveloper 11g Using EJB. rerun the A% query to check that your update to Alexander's salary has been saved. http://st-curriculum.oracle. Then click the Options menu again.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 84 of 88 . and JavaServer Faces 1/14/11 7:16 PM 11. JPA. Back in the browse page.

and type IT in the departmentName field. http://st-curriculum. In the search criteria area.oracle.com/obe/jdev/obe11jdev/ps1/ejb/ejb. click the Any radio button in the Match field. Click Search.Build a Web Application with JDeveloper 11g Using EJB.html Page 85 of 88 . JPA. and JavaServer Faces 1/14/11 7:16 PM 12.

The search returns four departments that contain IT in their name. http://st-curriculum.Build a Web Application with JDeveloper 11g Using EJB.html Page 86 of 88 . and JavaServer Faces 1/14/11 7:16 PM 13.com/obe/jdev/obe11jdev/ps1/ejb/ejb.oracle. JPA.

com/obe/jdev/obe11jdev/ps1/ejb/ejb.0. and JavaServer Faces 1/14/11 7:16 PM Notice some of the other functionalities of the ADF query feature. You have successfully completed this OBE.0 and EJB diagram Create the page flow Create a Master-Detail JSF page Create a Query/Edit page Create a Search page Run the JSF pages Back to Topic List Place the cursor over this icon to hide all screenshots. You learned how to: Create a database connection Build the data model using EJB 3. EJB 3. and JSF pages.oracle.html Page 87 of 88 .Build a Web Application with JDeveloper 11g Using EJB. you created an end-to-end application using Oracle JDeveloper. http://st-curriculum. JPA. including advanced searches and the ability to save searches. JPA. 14. Close the browser window Back to Topic List Summary In this tutorial.

Build a Web Application with JDeveloper 11g Using EJB. and JavaServer Faces 1/14/11 7:16 PM http://st-curriculum.com/obe/jdev/obe11jdev/ps1/ejb/ejb.html Page 88 of 88 .oracle. JPA.

Sign up to vote on this title
UsefulNot useful