OPN Oracle SOA Suite 11g Implementation Boot Camp - Free

300
OPN Oracle SOA Suite 11g Implementation Boot Camp Activity Guide D64982GC20 Edition 2.0 December 2010 Oracle University and Digora use only THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Transcript of OPN Oracle SOA Suite 11g Implementation Boot Camp - Free

OPN Oracle SOA Suite 11gImplementation Boot Camp

Activity Guide

D64982GC20

Edition 2.0

December 2010

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Copyright © 2010, Oracle and/or its affiliates. All rights reserved.

Disclaimer

This document contains proprietary information and is protected by copyright and other intellectual property laws. You may copy and print this document solely for your own use in an Oracle training course. The document may not be modified or altered in any way. Except where your use constitutes "fair use" under copyright law, you may not use, share, download, upload, copy, print, display, perform, reproduce, publish, license, post, transmit, or distribute this document in whole or in part without the express authorization of Oracle.

The information contained in this document is subject to change without notice. If you find any problems in the document, please report them in writing to: Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065 USA. This document is not warranted to be error-free.

Restricted Rights Notice

If this documentation is delivered to the United States Government or anyone using the documentation on behalf of the United States Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTSThe U.S. Government’s rights to use, modify, reproduce, release, perform, display, or disclose these training materials are restricted by the terms of the applicable Oracle license agreement and/or the applicable U.S. Government contract.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Oracle Confidential. For authorized use only. Do not distribute to third parties.

SOA Suite 11g Boot Camp

End-2-End Purchase Order Processing

Table of Contents

1. Introduction and Setup

2. Creating the Credit Card Validation Service

3. Creating the Purchase Order Routing Service

4. BPEL Orchestration

5. Modifying the Mediator

6. Adding Human Workflow

7. Adding Business Rules

8. Adding Fulfillment

9. Adding JMS to Fulfillment

A. Deploying and Running applications

B. Managing the lifecycle of a SOA composite application

C. Unit Testing

D. Fault Handling

E. Enforcing Policies

F. Handling Business Events using EDN

G. Using Service Data Objects (SDO)

H. Adding BAM Activity Sensors

I. Integrating with Oracle B2B

J. Virtualize the Credit Validation Service on Oracle Service Bus

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Section 1.1 End-2-End Purchase Order Processing 1-1

1 End-2-End Purchase Order Processing

1.1 Introduction In this tutorial you will build a SOA composite application to process and approve

purchase orders. The purchase order details can come in from any source (in our case a

testing page), the credit card status for the customer is validated and if the credit card is

good, the order continues. An order for a large purchase price requires a manual

approval step. Finally, the order is written to a text file to be processed by the

fulfillment house. For approved orders, the order is sent to the fulfillment carrier.

This SOA composite application contains a database adapter, file adapter, JMS adapter,

Web services binding, mediator routing, BPEL process, Business Rule, and Human

Task. It introduces each component with a minimum of complexity. The complete

application is built in 9 steps.

There are three setup steps required before you begin: 1) install the database schema, 2)

create the JMS resources, and 3) create the database resources. These setup steps are

described later in this chapter.

1.2 How to use this tutorial This tutorial was written to provide the most flexibility for all types of users. The

ready-to-deploy solution at the end of each chapter is available so you may choose to

start the tutorial at any chapter, beginning with the solution for the previous chapter. In

addition, the instructions for each chapter are written at three levels of complexity: 1)

detailed step by step instructions, 2) high level functional and design notes, and 3)

quick-build list of objects.

This tutorial can be used in the following ways.

1. As a demo – You complete the setup described in this chapter and deploy chapter 9

to skip design time and to demo the multiple components of this application. Go to

the solutions folder for Chapter 9 to get the composites you need to deploy. If

needed, see Appendix A for more details on running the servers, deploying, and

testing the application.

2. Complete tutorial for new users – You complete each chapter sequentially using

the step by step instructions. When you are finished, you will have an introduction

to all of the many components of this application, both design and runtime. This

complete tutorial takes 4-6 hours, depending on your level of experience.

3. Selected tutorial for all users – To run any single chapter to learn about a particular

component, first complete the setup in this chapter and then simply open the

solution from the previous chapter and begin the next chapter. The time to

complete a chapter takes from about 10-60 minutes, depending on your experience.

4. Tutorial for advanced users – If you have experience with SOA 10g and or 11g you

may choose to design the solutions using only the introduction and design notes

available with each chapter. These notes describe the functional aspects of the

chapter and some details on the solution design. Of course, the advanced user

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

1-2 End-2-End Purchase Order Processing Section 1.3

could design the solution as desired. The time to complete this challenge for

experience users varies with their level of experience.

5. Quick build – Most chapters include a final section called Operations and naming

which lists the objects and their names used in the chapter. Experienced users can

use this quick-build list of objects to build the designed solution quickly,

completing the entire application in less than 2 hours.

1.3 Description of the application The application you will build is the back-end processing of a new order. The business

process to be implemented is as follows.

All orders will be written to a text file for later reference.

Small orders (defined as those under $1,000) are to be automatically approved.

Large orders (those greater than or equal to $1,000) go through a validation and

approval process.

- The customer's credit card must be validated.

- If the order is $5,000 or more, a customer service representative must

manually approve the order.

Approved orders shall have the status "approved".

Large orders with an invalid credit card shall have the status

"invalidCreditCard".

Large orders rejected by the customer service representative shall have the

status "rejected".

All approved orders are sent to the fulfillment service which uses the order

value to determine the fulfillment vendor: <1000 goes to USPS, >= 1000 and <

5000 goes to UPS, > 5000 goes to FedEx.

Figure 1 shows a visual representation of the business process.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Section 1.3 End-2-End Purchase Order Processing 1-3

Figure 1 Visual view of the business process

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

1-4 End-2-End Purchase Order Processing Section 1.4

1.3.1 SOA Components In terms of the SOA application, you will create the following

A service that accepts new orders in XML format.

A File Adapter service that can write XML messages (such as orders) to a file.

A BPEL service implementing the large order process

The credit card validation service used by the large order BPEL service to

validate a given credit card.

A Database Adapter service used by the credit card validation service to

retrieve the status of a given credit card from the database.

A BPEL service implementing the Fulfillment process

A JMS adapter service that produces messages for the fulfillment vendors

A content-based Mediator service to route small orders to the file adapter and

fulfillment process and large orders to the large order process.

The large order BPEL service also uses a Business Rule component to determine

if manual approval is required and seeks human approval using a Human Task

component.

The Fulfillment BPEL service also uses a Business Rule component to determine

the fulfillment vendor.

1.4 Prerequisites This tutorial requires the following:

Desktop or laptop machine with Internet access and a web browser.

Access to the Oracle PartnerNetwork (OPN) Enablement Environment

(OPNEE), a remotely-hosted, Linux-based environment where Oracle SOA

Suite 11g software has been installed and configured for you. All lab exercises

assume that you will be working in the OPNEE environment and not with

Oracle software installed on your local machine.

Internet Explorer on you local desktop or laptop machine if you want to do the

Oracle BAM lab

Lab materials, in the remote OPNEE environment, see:

/home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po

1.5 Project Files The lab materials po directory contains several directories and files:

input – a few files with sample input data

sql – database scripts used during setup

schemas – xsd files used when defining services

solutions – solution projects for each chapter

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Section 1.6 End-2-End Purchase Order Processing 1-5

Other directories and files used during the exercises

1.6 Setting up the tutorial This tutorial requires database and JMS resources setup.

1.6.1 Installing the database schema This demo requires a table in the database owned by the soademo user.

1. Make sure your database is running by right-clicking on the Start Database

icon on the desktop and selecting the Open option. No feedback is given.

2. In a Terminal window, create the soademo user. It is ok to run this script even if

the soademo user already exists.

. /home/oracle/bin/oracle_xe_env.sh

cd ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sql

sqlplus

SQL> connect

SQL> Enter user-name: sys as sysdba

SQL> Enter password: bootcamp

SQL> @create_soademo_user.sql

You’ll see the message: “Grant succeeded” and then will be disconnected from

the database.

3. Now, in the same terminal window, create the credit card info table. It is ok to run

this script again even if the table already exists. Be sure to run it with the soademo

user for proper ownership.

sqlplus soademo/soademo @create_creditrating_table.sql

You’ll see the message: “1 row created” 4 times and then will be disconnected

from the database. Don’t worry if you see a “name is already used” message as

the table may have already existed.

Exit the terminal window.

1.6.2 Creating the JMS resources This application requires a JMS resource. You create this using the WebLogic Server

console. First you create the JMS queue and connection factory and then a connection

pool for that connection factory.

1. Make sure your server is started by opening the Start/Stop Weblogic

Server(s) icon on the desktop. Click the Start radio button and click OK. When

prompted for which servers to start, select SOA and click OK. Watch the window for

feedback that the server has started.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

1-6 End-2-End Purchase Order Processing Section 1.6

2. In a browser, open http://localhost:7001/console by clicking on the Admin Console

bookmark on the toolbar to start the WebLogic Server Administration Console.

Login using weblogic/welcome1.

First add the JMS Queue.

3. In the WLS console, on left navigation bar, expand Services > Messaging and click

JMS Modules.

4. Click SOAJMSModule (click on the name, not the checkbox)

5. In the Summary of Resources table, click New

6. Select the resource type: Queue and click Next

7. Enter name: demoFulfillmentQueue and JNDI name: jms/demoFulfillmentQueue

8. Click Next

9. Select Subdeployment SOASubDeployment

10. Select JMS Server SOAJMSServer

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Section 1.6 End-2-End Purchase Order Processing 1-7

11. Click Finish. You may receive a message that the “bean already exists.” This

means that the queue was already setup for you.

Now add the Connection Factory.

12. In the Summary of Resources table, click New

13. Select the resource type: Connection Factory and click Next

14. Enter name: demoCF and JNDI name: jms/demoCF.

15. Click Next

16. Click Finish. You may see an error message. This probably indicates that the

connection factory was already setup for you. Move on.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

1-8 End-2-End Purchase Order Processing Section 1.6

You should see both the queue and the connection factory listed in the Summary of

Resources as shown here.

Now add the connection pool. The connection pool is configured in the JMSAdapter

application and uses a Deployment Plan. First, create a directory to contain that plan.

17. In the left navigation bar of the WLS console, click Deployments

18. Click JMS Adapter (click on the name, not the checkbox)

19. Click the Configuration tab and then the Outbound Connection Pools tab

20. Click New

21. Select the factory oracle.tip.adapter.jms.IJmsConnectionFactory

22. Click Next

23. Enter eis/Queue/demo. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Section 1.6 End-2-End Purchase Order Processing 1-9

24. Click Finish

Go back to the new connection pool to hook up the connection factory

25. Click the Configuration tab

26. Expand the factory: oracle.tip.adapter.jms.IJmsConnectionFactory

27. Click on eis/Queue/demo

28. View the cell on the far right for the property ConnectionFactoryLocation to see

that it contains the value jms/demoCF.

29. Click Save. You must use the Save button to save the value.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

1-10 End-2-End Purchase Order Processing Section 1.6

30. Now the adapter must be redeployed. Click Deployments in the left nav bar.

31. Select the checkbox next to JMSAdapter

32. Click Update at the top of the Deployment table.

33. Verify that the correct deployment plan is selected

34. Click Next

35. Click Finish

1.6.3 Creating the database resource This application requires a database data source. You create this using the WebLogic

Server console. First create the data source and then a connection pool for that data

source.

36. If it isn’t already open, open the WebLogic Server Administration Console

http://localhost:7001/console and login using weblogic/welcome1.

37. On the left navigation bar, Click Services > JDBC > Data Sources.

38. In the data source table, click New.

39. Enter the data source information

Name: soademoDatabase

JNDI Name: jdbc/soademoDatabase

Database Type: Oracle

The Database driver defaults to the correct driver: Oracle’s Driver (Thin XA) for

Instance connections

40. Click Next, click Next again. You will receive an error message that “a data source

with this name already exists,” to indicate that the data source is already set up for

you. Click Cancel.

Here are the details that have already been setup for you for the data source:

Database Name: XE (your database SID)

Host name: localhost (host where your database is running)

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

Section 1.6 End-2-End Purchase Order Processing 1-11

Port: 1521 (set according to your configuration)

Database user name: soademo (created in previous section)

Database user password: soademo

Now create the connection pool. You have to edit the database adapter application and

it uses a Deployment Plan.

41. In the left navigation bar, click Deployments.

42. Click the DbAdapter application (click the name, not the checkbox)

43. Click the Configuration tab, and then click the Outbound Connection Pools tab.

44. Click New

45. Select the radio button for javax.resource.cci.ConnectionFactory and click Next

46. Enter the JNDI Name as follows: eis/DB/soademoDatabase

Note that this is not the same value as in above step. It must match the value you

enter in your database connection you create when building your application later

using JDeveloper.

47. Click Finish

48. Now, edit the connection pool to reference the data source. Click the Configuration

tab, expand the connection factory and click your new connection pool:

eis/DB/soademoDatabase (click on the name, not the checkbox)

49. In the Properties table, view the box to the far right of xADataSourceName to see

that it specifies: jdbc/soademoDatabase.

50. Go back to the main Deployments page to Update the DbAdapter. Click

Deployments in the left navigation bar.

51. Select the checkbox next to DbAdapter.

52. Click Update.

53. Select Redeploy this application and confirm the deployment plan location.

54. Click Finish

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

1-12 End-2-End Purchase Order Processing Section 1.6

55. Confirm that the connection pool is added by going back to the Deployments >

DbAdapter > Configuration > Outbound Connection Pools and expand the

connection factory listed there.

You are ready to start building the SOA composites. Continue with Chapter 2.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.1 Creating the Credit Card Validation Service 2-1

2 Creating the Credit Card Validation Service

2 Creating the Credit Card Validation Service ...................................................................... 1 2.1 Introduction ...................................................................................................................... 1 2.2 Designing the flow .......................................................................................................... 2 2.3 Creating a new application ............................................................................................ 2 2.4 Adding the database adapter ......................................................................................... 6 2.5 Adding the Mediator Component ............................................................................... 16 2.6 Adding a transformation to the Mediator component ............................................. 25 2.7 Deploying the application ............................................................................................ 28 2.8 Testing the application .................................................................................................. 28 2.9 Operations and naming ................................................................................................ 30

2.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solut

ions/ch2-DBAdapter.

To run this solution, you must first complete Chapter 1 to set up the application.

In this section you will build a simple credit service. This service will

look up the status (valid or invalid) of a given credit card from a

database.

The implementation of this service uses a Mediator to route the request

to the database adapter that executes the query on the database and

returns a result. Once done, your Mediator flow will look like this.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-2 Creating the Credit Card Validation Service Section 2.2

2.2 Designing the flow You will create a new composite application that will be invoked as a

service from your main application to be designed later. This

synchronous composite queries the database for the credit card number

and returns its status.

2.3 Creating a new application 1. Start JDeveloper by right-clicking on the JDeveloper icon on the

desktop and selecting the Open option. When prompted for role,

accept the Default Role.

2. Create a new application. There are various ways and shortcuts to do

this, and in this case choose File > New… from the menu.

3. Select All Technologies in the top tab if present (only if you have a

project open).

4. From the Categories tree, click on General (don’t expand it).

5. Select Generic Application from the Items field.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.3 Creating the Credit Card Validation Service 2-3

6. Click OK.

7. In the subsequent Create Generic Application dialog set the

following fields, leaving the others with their default values:

Application Name: CreditCardValidation

Directory (accept the default):

/home/oracle/jdeveloper/mywork/CreditCardValidation

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-4 Creating the Credit Card Validation Service Section 2.3

8. Click Next.

9. When you create a new application you are prompted to create a

new project. Set the following fields:

Project Name: validationForCC

Directory: (accept the default)

Project Technologies: SOA (use the arrow to add SOA to the

Selected panel)

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.3 Creating the Credit Card Validation Service 2-5

10. Click Next.

11. The next step allows you to choose to start with an empty composite,

or with a component already added. In this case, select Empty

Composite.

12. Click Finish.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-6 Creating the Credit Card Validation Service Section 2.4

13. You will now have an empty canvas displaying three swim lanes:

services, components, and references.

2.4 Adding the database adapter 1. You can now start building the application. Drag-and-drop a

database adapter onto the External References swim lane. If you

don’t have the Component Palette open, from the menu select View

> Component Palette. If the Component Palette is not showing the

SOA components, select SOA from the drop down list.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.4 Creating the Credit Card Validation Service 2-7

2. This database adapter call will return a result of valid or invalid for a

given credit card from the database. A wizard takes you through the

steps of configuring the database adapter.

The title bar of the wizard dialog shows the step number. Click Next

on step 1.

3. Enter the following details on step 2:

Service Name: getCreditValidation

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-8 Creating the Credit Card Validation Service Section 2.4

4. Click Next to go to step 3.

5. The database adapter will connect to the database, and in order to do

that it needs a database connection which contains all the details

needed to connect to the database. You can pre-create a database

connection or create one on the fly. Since a database connection

hasn’t been created yet, you will create one from here.

Click the green plus icon to the right of the Connection drop-down

list to create a new database connection.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.4 Creating the Credit Card Validation Service 2-9

6. In the Create Database Connection dialog, enter the following

details:

Connection Name: soademoDatabase

Connection Type: Oracle (JDBC)

Username: soademo

Password: soademo

Save Password: Checked

Enter Custom JDBC URL: Unchecked

Driver: thin

Host Name: localhost

JDBC Port: 1521

SID: XE

7. Click the Test Connection button and verify that your connection

works. Look for the message: ‚Success!‛

8. Click OK to return to step 3 of the Database Adapter Configuration

wizard.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-10 Creating the Credit Card Validation Service Section 2.4

9. Make sure the JNDI Name matches the data source connection pool

JNDI Name you entered in Chapter 1. That is

eis/DB/soademoDatabase.

Click Next.

10. Set the following fields:

Perform an Operation on a Table: Selected

Select: Checked

All other fields should be unchecked.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.4 Creating the Credit Card Validation Service 2-11

11. Click Next.

12. In step 5 of the wizard, click the Import Tables button and then click

the Query button to retrieve the list of tables for the soademo user

from the database. If you do not see any tables, go back to Chapter 1

to make sure the tables were created properly.

13. Select the CREDITCARDINFO table and move it to the Selected

field by pressing the Add (arrow) shuttle button.

14. Click OK.

15. Back in step 5 of the Database Adapter Configuration wizard, click

the CREDITCARDINFO table to select it. Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-12 Creating the Credit Card Validation Service Section 2.4

16. Click Next.

17. Step 6 of the wizard lets you override or define the primary key for

your table. In this case no primary key is defined in the database, so

you’ll need to specify it. Check CCNUMBER and leave the rest

unchecked.

18. Click Next.

19. Step 7 lets you define relationships if you are selecting from multiple

tables. Since there is only a single table in our exercise here, there is

no relationship to define.

20. Click Next.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.4 Creating the Credit Card Validation Service 2-13

21. Uncheck all fields, in step 8, except status. That is the only column

we want to query from the database.

22. Click Next.

23. Step 9 is where you can specify your selection criteria. In this case

you will add a parameter to the query. The parameter will be set at

runtime to select the row for the credit card you want.

Click the Add button to add a new parameter called ccnb. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-14 Creating the Credit Card Validation Service Section 2.4

24. Now, back in step 9, click the Edit button to bring up the Expression

Builder dialog and click the Add button to add a new condition

25. Press the Edit button in the First Argument section (lower-left corner

of the window).

26. In the Query Key dialog select ccnumber.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.4 Creating the Credit Card Validation Service 2-15

27. Click OK.

28. In the Second Argument section (lower-right portion of window),

select Parameter.

29. Ensure ccnb is selected in the drop-down list.

30. Click OK.

31. Back in step 9 of the wizard, you see the summary of the query that

you specified. The parameter ccnb will be populated at runtime and

the query will select a row based on that parameter Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-16 Creating the Credit Card Validation Service Section 2.5

32. Click Finish.

The database adapter will process your choices and generate a

service that implements the operation you specified, which means

your project will now contain a new WSDL file to represent that

service: getCreditValidation.wsdl. The composite diagram has

been updated with this service.

2.5 Adding the Mediator Component The Mediator is the component in charge of routing in the SOA Suite.

You will add a Mediator component to route a request to the

getCreditValidation service you just created that uses the database

adapter.

1. Drag a Mediator component onto the composite diagram in the

Components swim lane.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.5 Creating the Credit Card Validation Service 2-17

2. In the Create Mediator dialog, specify these settings:

Name: RouteRequest

Template: Define Interface Later

A typical composite application will have many components, but

only some of them will have a publically exposed web services

interface. The composite editor in JDeveloper gives you the flexibility

to define the interface now, choose an existing interface, or to define

the interface later. We’ll elect to define the interface later.

3. Click OK.

4. You will create a Web Service interface to expose this service using

SOAP bindings. Drag a Web Service adapter to the Exposed Services

(left-side) swim lane.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-18 Creating the Credit Card Validation Service Section 2.5

5. In the Create Web Service dialog that appears, set the following

fields:

Name: getStatusByCC

Type: Service

6. Click the cog icon next to the WSDL File field to define the interface.

7. The Create WSDL dialog lets you specify the message invocation

types for the service. You have been given an existing XML schema

definition (XSD) that specifies the types of the input and output for

the service which you will reuse for this application.

Click the magnifying glass icon to the right of the URL field to

browse for the provided schema file.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.5 Creating the Credit Card Validation Service 2-19

8. In the Type Chooser dialog, click the Import Schema File button. It

is the left-most icon in the upper-right corner of the window.

9. In the Import Schema File dialog, click the magnifying glass to

browse for the schema file.

10. In the SOA Resource Lookup, make sure File System is selected.

11. Navigate to and select ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial

/po/schemas/creditcheck.wsdl.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-20 Creating the Credit Card Validation Service Section 2.5

12. Click OK.

13. Back in the Import Schema File dialog, make sure Copy to Project is

selected.

14. Click OK.

15. In the Localize Files dialog, deselect Maintain original directory

structure for imported files and click OK.

16. Back in the Type Chooser dialog, expand the Project Schema Files >

creditcheck.xsd nodes.

17. Select creditcardStatusRequest.

18. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.5 Creating the Credit Card Validation Service 2-21

19. The Create WSDL dialog is as shown. Do not click OK yet!

20. In a similar way, we’ll set the message types for the reply and fault

to creditcardStatus and error. The only difference is that you don't

need to import the schema definition again because it's now part of

your project. Proceed to set the message types for reply and then,

fault:

Click the Reply tab.

21. Click the flashlight icon to the right of the URL field.

22. Expand the Project Schema Files > creditcheck.xsd nodes.

23. Select creditcardStatus.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-22 Creating the Credit Card Validation Service Section 2.5

24. Click OK.

25. The reply message definition is as shown.

26. Click the Fault tab.

27. Using the same method, select the error type. The Fault message

definition is as shown.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.5 Creating the Credit Card Validation Service 2-23

28. Click OK to close the Create WSDL dialog.

29. The Create Web Service dialog should now look like the illustration

below.

Be careful here -- If you click the cog icon again you will have to set

all three of the invocation types again (request, reply, and fault).

30. Click OK.

31. Now the components can be connected -- or "wired" -- together. Wire

the inbound web service binding to the Mediator component by

clicking and dragging the mouse cursor between the two connection

points:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-24 Creating the Credit Card Validation Service Section 2.5

32. Wire the Mediator component to the database adapter service:

33. You may be prompted to choose the operations (only if you selected

more than one database operation when you set up the database

adapter service). If so, use these settings:

Mediator Operation: execute

Target Operation: getCreditValidationSelect

34. Click OK.

35. The composite diagram gives an overview of your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.6 Creating the Credit Card Validation Service 2-25

2.6 Adding a transformation to the Mediator component

In this section you will modify the RouteRequest Mediator component

to do an XSLT transformation on the message payload. That's because

the incoming message to our publicly exposed service (getStatusByCC)

is in a different format than the service created by the database adapter

(getCreditValidation).

Not only does the Mediator route requests between endpoints (which

you did by wiring them together) but it can also transform the data as it

passes through.

1. One way to drill down into a specific component is to double-click it

from the composite diagram. You can also right-click it and select

the Edit option. Double-click the RouteRequest Mediator

component to open the Mediator editor. The RouteRequest.mplan

window displays.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-26 Creating the Credit Card Validation Service Section 2.6

2. Click the transformation icon to the right of the Transform Using

field in the request section (that's the first Transform Using field).

3. Select Create New Mapper File and accept the default name.

4. Click OK to open the mapping editor.

5. Expand all the nodes on both sides. You can do it manually, or right-

click <sources> and select Expand All. Do the same for <target> on

the right-hand side.

6. Map CCNumber from the source side to ccnb on the target side by

dragging a wire from one element to the other.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.6 Creating the Credit Card Validation Service 2-27

7. Save All (second diskette icon in the upper-left corner of the main

window) and close the mapper by selecting the close window icon

on the right side of the tab. You may need to use the tab bar scroll

buttons to navigate right to get to the close window icon.

Alternatively you can press Ctrl-S to save the mapping, then Ctrl-W

to close it.

8. Back in the Mediator editor for the RouteRequest.mplan, click the

transformation icon to the right of the Transform Using field in the

Synchronous Reply section (that's the second Transform Using

field).

9. In the Reply Transformation Map dialog, select Create New

Mapper File and accept the default name.

10. Click OK to open the mapper.

11. Expand all the source and target nodes.

12. Map status from the source to creditcardstatus from the target. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-28 Creating the Credit Card Validation Service Section 2.7

13. Save and close the mapper to return to the Mediator editor.

14. Save and close the Mediator editor to return to the composite

diagram. You can use the toolbar buttons or the menu, or simply

press Ctrl-S to save and Ctrl-W to close this tab.

2.7 Deploying the application The first design iteration is complete and you are now ready to deploy

the composite. The steps to run and test a composite application are

explained in Appendix A Deploying and Running a Composite

Application. Read that document now if this is the first time you are

running and testing a composite application. Appendix A follows

Chapter 9. Perform sections A.1 through A.4 before moving on here.

2.8 Testing the application For additional details regarding testing an application, read the steps in

Appendix A in section A.7 titled “Running and testing the application

with EM.‛ However, for now, perform the following steps to see your

new application at work:

1. After you have deployed your composite, open Enterprise Manager

at the following link: http://localhost:7001/em or use the Enterprise

Manager bookmark in your browser.

2. Click the validationForCC link in the SOA section under soa-infra. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.8 Creating the Credit Card Validation Service 2-29

3. Open the Test page by clicking the Test button at the top-right of the

left-window. Scroll down to the Input Arguments section and make

sure that TreeView is selected.

4. In the CCNumber field, enter a credit card number. In this case,

enter 1234-1234-1234-1234 in the CCNumber field which is a valid

credit card and returns the status, ‘VALID.’

5. Click the Test Web Service button.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-30 Creating the Credit Card Validation Service Section 2.9

6. You will get a response from the service which will indicate if the

credit card is valid or not. Here is the output for a valid credit card:

7. Click Launch Message Flow Trace to see the details of the message

flow for this instance of your composite. This displays a new

window with the flow trace.

8. Close the Flow Trace window.

9. Try another value by clicking the Request tab. This time, enter 4321-

4321-4321-4321 in the CCNumber field which is an invalid credit

card.

10. Click the Test Web Service button to see the output. You’ll see that

this time, the reply value is INVALID.

11. In an upcoming chapter, you will create a new application that calls

this service, so you'll need to know the WSDL location for it. You can

see the WSDL location listed in the WSDL field at the top of the Test

page.

In this case, it looks something like:

http://localhost:8001/soa-infra/services/CreditCardValidation/

validationForCC/getStatusByCC?WSDL

2.9 Operations and naming This section gives you all of the operations and names for objects created

in this chapter. Experienced users can use this for creating the objects in

this chapter quickly. Any questions on details for a particular operation

listed here can be found in the preceding sections. The information is

divided by the sections in this document.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 2.9 Creating the Credit Card Validation Service 2-31

Section 2.3 Creating a new application

Application Name: CreditCardValidation

Directory:

/home/oracle/jdeveloper/mywork/CreditCardValidation

Project Name: validationForCC

Directory:

/home/oracle/jdeveloper/mywork/CreditCardValidation

/validationForCC

Project Technologies: SOA

Empty Composite

Section 2.4 Adding the database adapter

DbAdapter Service Name: getCreditValidation

Create Database Connection details:

- Connection Name: soademoDatabase

- Connection Type: Oracle (JDBC)

- Username: soademo

- Password: soademo

- Save Password: Checked

- Enter Custom JDBC URL: Unchecked

- Driver: thin

- Host Name: localhost

- JDBC Port: 1521 (or the port number of your database)

- SID: XE (or the SID of your database)

- Jndi name: eis/DB/soademoDatabase

Operation: Select

Import CREDITCARDINFO table

Primary key CCNUMBER

Attribute Filtering: status

Add a new parameter: ccnb

Add Where clause: ccnumber = #ccnb

Section 2.5 Adding the Mediator Component

Create Mediator: RouteRequest

Template: Define Interface Later

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

2-32 Creating the Credit Card Validation Service Section 2.9

Create Web Service: getStatusByCC

Type: Service

WSDL based on: ~/SOA11gFoundationTutorial

/SOA11gFoundationTutorial/po/schemas/creditcheck.xsd

Request: creditcardStatusRequest

Reply: creditcardStatus

Fault: error

Wire: service to mediator to adapter

Section 2.6 Adding a transformation to the Mediator component

Mediator transform: Map CCNumber from the source side to

ccnb

Mediator transform for reply: Map status from the source to

creditcardstatus from the target.

The application is completed. Continue with Section 2.7 above to deploy

and test your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.1 Creating the Purchase Order Routing Service 3-1

3 Creating the Purchase Order Routing Service

3.1 Introduction .................................................................................................................................................... 1 3.2 Designing the flow ......................................................................................................................................... 2 3.3 Creating a new application ........................................................................................................................... 2 3.4 Adding the service interface ......................................................................................................................... 4 3.5 Adding the routing component ................................................................................................................... 9 3.6 Adding the File Adapter ............................................................................................................................... 9 3.7 Wiring the components and adding a transformation ............................................................................14 3.8 Deploying the application ...........................................................................................................................18 3.9 Testing the application .................................................................................................................................18 3.10 Operations and naming .............................................................................................................................21

3.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch3-FileAdapter.

This solution does not require any setup.

You will now create another application that will accept new purchase orders and

forward them to the ordering system’s archive. In this case you will simulate the

archive with a file adapter that will capture to disk all processed purchase orders.

Ultimately, you will continue adding features to this composite application and

expand it to implement the full PO Processing application following the chapters of

this tutorial. For now, you begin with the first part, the archive.

The implementation of this service uses a Mediator that receives orders coming over

SOAP and writes them to file using the file adapter. Once completed, your

composite application will look like Figure 1 PO Processing service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-2 Creating the Purchase Order Routing Service Section 3.2

Figure 1 PO Processing service

3.2 Designing the flow This service is a one-way service, also called fire-and-forget. It does not return any

value. It takes a PurchaseOrder defined in po.xsd and writes data to a file using

type Order defined in internalorder.xsd. Data transformation from type

PurchaseOrder to Order is aided by a pre-defined dictionary named

po2internalorders-dictionary.xml (available in your schemas directory).

3.3 Creating a new application 1. Create a new application for your POProcessing composite. As an alternative,

instead of using the File/New menu, choose New Application from the

application list menu.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.3 Creating the Purchase Order Routing Service 3-3

2. Name your application POProcessing and accept the default directory location.

3. Click Next.

4. Name the project POProcessing and select SOA for the Project Technologies.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-4 Creating the Purchase Order Routing Service Section 3.4

5. Click Next and then click Finish to create the project with an empty composite.

3.4 Adding the service interface 1. Start by creating the service you will use to expose this composite over SOAP.

Drag and drop a Web Service activity onto the Exposed Services swim lane

2. Name it receivePO and create a WSDL from a schema by clicking the cog icon.

Creating a WSDL from a schema allows you to define the input data that your

service expects and at the same time, automatically create the WSDL interface.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.4 Creating the Purchase Order Routing Service 3-5

3. Use the magnifying glass icon and then the Import Schema File icon to browse

for the po.xsd schema (which you'll find under ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sche

mas), copy it to your project and open it to select the type.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-6 Creating the Purchase Order Routing Service Section 3.4

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.4 Creating the Purchase Order Routing Service 3-7

4. Select the PurchaseOrder element. This is the input data for your service. Click

OK.

This service is a one-way invocation type, also known as a fire-and-forget service. So

there is no need to specify a reply or callback.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-8 Creating the Purchase Order Routing Service Section 3.4

5. Click OK.

6. Click OK to close the web service binding dialog. The receivePO exposed service

is added to your composite.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.5 Creating the Purchase Order Routing Service 3-9

3.5 Adding the routing component 1. Now, add a Mediator to the composite by dragging one from the palette to the

canvas. Call it routePO and select the Define Interface Later template.

When you define the interface later, you can graphically connect the SOAP

service front end and file adapter service reference. The interfaces are implicit.

2. Click OK.

3.6 Adding the File Adapter 1. Drag-and-drop a File Adapter to the External References swim lane. This file

adapter will write each new order to a text file.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-10 Creating the Purchase Order Routing Service Section 3.6

2. Click Next in the Step 1 wizard window, and then, name the service

WriteApprovalResults in Step 2 of the wizard.

3. Click Next.

4. Select the option to Define from operation and schema (specified later)

This feature allows you to use the file operation and schema to define the WSDL

automatically. Alternatively, you could use an existing WSDL file if you had one

already created for the service reference.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.6 Creating the Purchase Order Routing Service 3-11

5. Click Next.

6. Select the Write File operation.

7. Click Next.

8. Specify the following settings, leaving all others with their default values:

Directory for Outgoing Files: /home/oracle/tmp

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-12 Creating the Purchase Order Routing Service Section 3.6

File Naming Convention: order_%SEQ%.txt to write the files with

increasing sequence numbering. You can see additional options for

numbering files in a drop down menu as soon as you enter % in the field.

9. Click Next.

10. Browse for the schema that represents the content we will write.

11. Click the Import Schema File button and navigate to ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sche

mas/internalorder.xsd to select and copy the schema file, and then select

Order from the Type Chooser dialog.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.6 Creating the Purchase Order Routing Service 3-13

12. Click OK

13. Click Next and Finish to complete the File Adapter wizard and return to the

composite.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-14 Creating the Purchase Order Routing Service Section 3.7

3.7 Wiring the components and adding a transformation 1. Next, wire the components to connect the service and reference to the mediator

and complete the interface definitions.

The wired components look like this.

2. Double-click (right-click and select Edit) the routePO Mediator component to

open the Mediator editor and create the mapping between the inbound PO and

the internal order format that you use to log to the file.

3. Click the icon to the right of the Transform Using field to display the Request

Transformation Map window.

4. Choose to Create New Mapper File with the default name.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.7 Creating the Purchase Order Routing Service 3-15

5. Drag a wire from Purchase Order on the source side to Order on the target side.

6. You are prompted for auto-mapping preferences:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-16 Creating the Purchase Order Routing Service Section 3.7

To help in the mapping, you are going to leverage a dictionary created by the

business analysts and that lists common synonyms in use across your data objects

(e.g., “qty” is sometimes used instead of “quantity”, some departments use “ID”

instead of “orderId”, etc.).

7. Uncheck Match Elements Considering their Ancestor Names

8. Click on Show Dictionaries.

9. Click Add.

10. Browse to and select /home/oracle/SOA11gFoundation/SOA11gFoundation/po/schemas/p

o2internalorders-dictionary.xml.

11. Click Open

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.7 Creating the Purchase Order Routing Service 3-17

12. Click OK.

As you can see in the mapper, the dictionary has helped match pairs of fields like

as CustID to customerId and productName to prodName.

Note that even without a dictionary, the auto-mapping feature will be able to

identify and automatically take care of many of these fields, but a dictionary,

customized to your company helps improve its accuracy.

The resulting mapping looks like this:

O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-18 Creating the Purchase Order Routing Service Section 3.8

13. Save and close both the mapping and the Mediator editor to return to the

composite.

14. At this point, you have a fully-functional Mediator-based composite application

that can be deployed and tested. In later chapters, you will add more

components to it.

3.8 Deploying the application Deploy the application in the same way as before. Read Appendix A Deploying and

Running a Composite Application to refresh your memory on how to deploy if you

need to. Remember, if you are prompted to login, the Username is weblogic and the

Password is welcome1.

3.9 Testing the application Test your new application using the instructions here. Read Appendix A Deploying

and Running a Composite Application for more details.

1. After you have deployed your composite, open Enterprise Manager at the

following link: http://localhost:7001/em (or use the Enterprise Manager

bookmark entry at the top of the browser window).

2. Click on POProcessing (under SOA/soa-infra) and the Test button to test your

service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.9 Creating the Purchase Order Routing Service 3-19

3. Enter a small order by doing one of the following:

Type the values into in to the HTML form OR

Click XML View in the Input Arguments section so you can paste in the

XML payload. This is the recommended way. Open the following file in a

text editor like gedit:

gedit

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/i

nput/po-small-Headsetx1.xml

Copy the entire contents and paste them into the large text field in Input

Arguments area, replacing the blank xml form that is there:

4. Click Test Web Service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-20 Creating the Purchase Order Routing Service Section 3.9

The Test Result screen won't have any response because this is a one-way

invocation with no reply or callback.

5. You can view the Flow Trace by selecting Launch Message Flow Trace.

In addition, the call to the File Adapter service will have resulted in a new file in

/home/oracle/tmp, called order_n.txt, where n is a sequence number like

1, 2, 3, etc.

You can open that file with a text editor like gedit and examine it. Notice how

field names have been translated by the mapping and are different from the

input xml.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 3.10 Creating the Purchase Order Routing Service 3-21

3.10 Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Section 3.3: Creating a new application

Application Name: POProcessing

Directory: default directory

Project Name: POProcessing

Project Technologies: SOA

Empty Composite

Section 3.4: Adding the service interface

Service: receivePO

Type: Service

WSDL based on: po.xsd

Request: PurchaseOrder

Section 3.5: Adding the routing component

Mediator: routePO

Define Interface Later

Section 3.6: Adding the File Adapter

File Adapter: WriteApprovalResults

Directory for Outgoing Files: /home/oracle/tmp

File Naming Convention: order_%SEQ%.txt

Schema file:

/home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sc

hemas/internalorder.xsd

Schema: Order

Section 3.7: Wiring the components and adding a transformation

Wire: service to mediator to adapter

Mediator transform: Map Purchase Order to Order

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

3-22 Creating the Purchase Order Routing Service Section 3.10

In Auto-complete: Uncheck Match Elements Considering their Ancestor

In Auto-complete: Add Dictionary

Dictionary:

/home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sc

hemas/po2internalorders-dictionary.xml

The application is completed. Continue with Section 3.8 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.1 BPEL Orchestration 4-1

4 BPEL Orchestration

4.1 Introduction .................................................................................................................................................... 1 4.2 Designing the flow ......................................................................................................................................... 1 4.3 Invoking the CreditCardStatus service ....................................................................................................... 2 4.4 Designing the BPEL approval process ........................................................................................................ 5 4.5 Modifying the Mediator component ..........................................................................................................14 4.6 Deploying the application ...........................................................................................................................20 4.7 Testing the application .................................................................................................................................20 4.8 Operations and naming ...............................................................................................................................24

4.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch4-BPEL.

To run this solution, you must first complete Chapter 1 to set up the application.

When receiving large orders (greater than $1000) we want to be more cautious and:

Validate the customer's credit card

Automatically accept or reject the order based on the credit card status

The tool for orchestrating these interactions is the BPEL process manager. The overall

flow of the application uses the credit validation service and the purchase order

processing service created earlier.

Once completed, your POProcessing composite will look like this:

4.2 Designing the flow We will modify POProcessing with the changes outlined above. We’ll start by

creating a reference to the service you created in chapter 2, the credit card validation

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-2 BPEL Orchestration Section 4.3

service, using SOAP. Then, we’ll create the BPEL process to orchestrate the call to

the credit card validation service and, based on the returned value, set the return

status on the order. Finally, we’ll wire the BPEL process to the Mediator and add a

routing rule so that it is called only when the order total is over $1000.

4.3 Invoking the CreditCardStatus service 1. If it is not already open, open your POProcessing application in JDeveloper.

Make sure there are no other files open. Then, open composite.xml for

POProcessing. Closing all composite.xml files first eliminates any possible

confusion as every composite has a composite.xml file.

2. Start your server and make sure your credit card validation service is running

there. See Appendix A for details about deploying.

3. Drag-and-drop a Web Service activity into the External References swim lane.

4. Set the following fields:

Name: getCreditCardStatus

WSDL File: The server must be running and the composite deployed that

hosts the validationForCC service.

Navigate to the service using the Resource Browser as follows.

1. Click the Find Existing WSDLs button next to the WSDL field

2. Select Resource Palette from the drop-down list at the top of the

Resource Browser

3. Navigate to the validationForCC service

4. Select getStatusByCC operation and click OK

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.3 BPEL Orchestration 4-3

Alternatively, you can simply paste the URL to the WSDL into the field. The

URL to the WSDL file can be obtained from the validationForCC test page in

EM. Be sure to remove any version numbering. It will be something like this. http://localhost:8001/soa-infra/services/CreditCardValidation/validationForCC/getStatusByCC?WSDL

Port Type: Once you have the WSDL URL, press the Tab key to move to the

next field. The Port Type will be updated automatically based on the WSDL.

5. Click OK. Your getCreditCardStatus external reference appears in the composite

diagram.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-4 BPEL Orchestration Section 4.3

Now, we’ll create a BPEL process to do orchestration for large order processing.

The input and output to the BPEL process is in the internal order format of the

purchase order.

6. Drag-and-drop a BPEL Process component onto the Components swim lane.

7. In the Create BPEL Process dialog, specify the following settings:

Name: approveLargeOrder

Template: Asynchronous BPEL Process

Service Name: approveLargeOrder_client

Expose as a SOAP Service: Unchecked

Input: Click the magnifying glass icon, expand Project Schema Files >

internalorder.xsd and select Order

Output: Use the Order type, like you did for Input above

The WSDL for this service is created automatically using this information. Note

that the input and output types specified here go into the WSDL for this service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.4 BPEL Orchestration 4-5

8. Click OK.

9. Wire the BPEL process to the getCreditCardStatus service. Wiring in the

composite automatically creates a partner link reference inside the BPEL process.

4.4 Designing the BPEL approval process Next, you'll build a simple BPEL process that calls the external getCreditCardStatus

service to determine if the card status is valid or not.

1. Double-click (right-click and select Edit) the BPEL component to open the BPEL

editor.

Notice the getCreditCardStatus partnerlink already in the References swim lane

because you wired it in the composite. The editors keep the references in sync

between the BPEL process and composite.xml.

2. Drag-and-drop an Invoke activity from the Component Palette to an insertion

point right under the receiveInput activity.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-6 BPEL Orchestration Section 4.4

3. Drag the wire from the Invoke activity to the getCreditCardStatus. This tells

your BPEL process to invoke that service.

4. In the Edit Invoke dialog that opens. Don’t be concerned about ‚Errors: 3‛

appearing at the top of the window. Specify the following to fix these ‚errors:‛

Name: invokeCCStatusService

Input Variable: Click the green plus icon and then click OK to create a new

global variable, accepting the default name and type.

The variable designated for the input will contain the data that will be sent to

the service when it is invoked. It is automatically created with the correct

type expected by the service.

Output Variable: Click the green plus icon and then click OK to create a new

global variable, accepting the default name and type.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.4 BPEL Orchestration 4-7

This variable contains the data that will be returned by the service, or the

output of the service. It is automatically created with the correct type.

5. Click OK.

6. Your BPEL process looks like this so far:

7. You have created the variables that will be used when interacting with the

getCreditCardStatus service, but they haven't been populated. The output

variable will be populated when the service returns a result, but you need to

populate the input variable yourself.

In BPEL, you use an Assign activity to assign data to a variable. In this case you

want to assign the credit card number that was passed into the POProcessing

service to the getCreditCardStatus service.

Drag-and-drop an Assign activity immediately above your Invoke activity.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-8 BPEL Orchestration Section 4.4

8. Double-click (right-click and select Edit) the Assign activity to edit it.

9. Click the General tab and change the name to assignCCNumber.

10. Click the Copy Operation tab.

11. Click the green plus icon and select Copy Operation to open the Create Copy

Operation dialog. Specify the following.

In the From (left) side, select Variables > Process > Variables >

inputVariable > payload > Order > creditCardInfo > cardNumber

In the To (right) side, select Variables > Process > Variables >

invokeCCStatusService_execute_InputVariable > request >

creditcardStatusRequest > CCNumber

12. Click OK.

13. Back in the Assign dialog, add a second copy operation by click the green plus

icon and selecting Copy Operation, and specify the following.

In the From (left) side, select Variables > Process > Variables >

inputVariable > payload > Order

In the To (right) side, select Variables > Process > Variables >

outputVariable > payload > Order

You are doing this because the BPEL process returns outputVariable when it

finishes. You will return the input data, as well as some updates which will be

made later in the BPEL process.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.4 BPEL Orchestration 4-9

14. The Assign dialog now looks like this:

15. Click OK to return to the BPEL process.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-10 BPEL Orchestration Section 4.4

16. Click the green check button in the upper left of the BPEL process to validate the

process. All the warnings (yellow flags) should go away. It now looks like this:

The input variable to getCreditCardStatus is now populated. The Invoke

activity will pass that data to the service. The next step is to process the return

data from the service, the output. The returned value can be VALID or

INVALID. You want a Switch statement so you can do something different for

each case.

17. Drag-and-drop a Switch activity right underneath invokeCCStatusService.

18. Double-click the name (Switch_1) of the Switch underneath the icon and rename

it to EvalulateCCStatus. Note: You can also double-click the Switch icon and

change the name in the subsequent dialog, but if you double-click the text itself

you can change the name in-place.

19. Expand the Switch by clicking the small plus icon next to it.

20. Click the View Condition Expression button to open the Condition Expression

window.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.4 BPEL Orchestration 4-11

21. Click the XPath Expression Builder button in the upper-right corner of the

Condition Expression window.

22. In the BPEL Variables field, expand Variables > Process > Variables >

invokeCCStatusService_execute_OutputVariable > reply and select

creditcardStatus.

23. Click the Insert Into Expression button (it's the wide button under the

Expression field).

24. Put your cursor in the Expression field (wide button above the BPEL Variables

area) and at the end, and add: = 'VALID'

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-12 BPEL Orchestration Section 4.4

25. Click OK. This specifies that the right-side branch of the Switch (the case

portion) is to be followed if the value of the credit card status is ‚VALID.‛ If the

value is not ‚VALID‛, the otherwise branch is be followed.

26. Click outside the Condition Expression pop-up window to close it.

If that condition is true, then BPEL will execute any activities in the <case> part

of the switch. If not, any activities in the <otherwise> section will be executed.

27. Drag-and-drop an Assign activity into the <case> section of the Switch.

28. Double-click the name of the new and rename it to assignApproval.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.4 BPEL Orchestration 4-13

29. Double-click the Assign icon to open the Assign dialog.

30. Click the green plus icon and add a new Copy Operation.

31. In the From section, change the Type drop-down list to Expression.

32. In the Expression field, type: 'approved' (with single quotes)

33. In the To section, select Variables > Process > Variables > outputVariable >

payload > Order > status.

34. Click OK.

35. Drag-and-drop an Assign activity into the <otherwise> section of the Switch.

36. Rename it to assignInvalidCC.

37. In the same way you just did above, assign the value 'invalidCreditCard' to the

status field of the outputVariable variable.

38. At the top of BPEL designer, click the green check mark to validate your process.

Any yellow flags you had should disappear and you should not have any

warning messages.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-14 BPEL Orchestration Section 4.5

39. Save the BPEL process and close the window to return to the composite.

4.5 Modifying the Mediator component 1. Wire the Mediator to the BPEL process.

2. Your composite now looks like this:

3. Now, the Mediator is routing requests to both the WriteApprovalResults service

and the approveLargeOrder BPEL process. Sometimes, this is what you want a

Mediator service to do, but in this case a new order should either be

automatically approved or have to be approved by going through the

approveLargeOrder process.

If you recall, orders under $1,000 should be approved automatically while orders

greater than or equal to $1,000 need to go through an approval process. The

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.5 BPEL Orchestration 4-15

Mediator is capable of providing a content-based routing service to enable this

kind of processing.

Double-click the routePO Mediator component to open the Mediator editor.

4. Click on the filter icon, called Invoke Expression Builder (which looks like a

funnel) for the WriteApprovalResults::Write request operation.

5. In the Expression Builder dialog, build up the following expression. Don’t copy

this text into your expression. Instead, use the Variables frame to select the

variables:

($in.request/inp1:PurchaseOrder/inp1:price *

$in.request/inp1:PurchaseOrder/inp1:quantity) < 1000

Note: The namespaces (inp1) may be different for you.

Hint: Expand the nodes in the Variables section to find the field you want and

either double-click or press the Insert Into Expression button to add them to the

expression.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-16 BPEL Orchestration Section 4.5

6. Click OK.

7. Similarly, click the filter icon for the request invocation of

approveLargeOrder/client::process

8. Add the following expression:

($in.request/inp1:PurchaseOrder/inp1:price *

$in.request/inp1:PurchaseOrder/inp1:quantity) >= 1000

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.5 BPEL Orchestration 4-17

9. Click OK.

10. You also need to set the callback of the asynchronous BPEL process to call the file

adapter service so that in the case of the large order processing, the order is still

written to a file for the fulfillment archive.

Click the cog icon next to the Target Operation field in the callback section.

11. In the Target Type dialog, click the Service button.

12. In the Target Services dialog, select POProcessing > References >

WriteApprovalResults > Write.

13. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-18 BPEL Orchestration Section 4.5

14. A transformation needs to be added for the operations. It's the same as the

transformation done earlier, but the namespaces are different so a new

transformation will need to be created.

Click the transformation icon in the request section:

15. Select Create New Mapper File and click OK.

16. Drag a wire from PurchaseOrder in the source to Order in target.

17. In the Auto Map Preferences dialog, simply click OK without changing

anything since you already added the dictionary earlier.

The resulting transformation looks like this:

18. Save and close the mapper to return to the Mediator editor.

19. You must also add a transformation for the callback. Click the transformation

icon in the callback section.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.5 BPEL Orchestration 4-19

20. Select Create New Mapper File and click OK.

21. Drag a wire from Order in the source to Order in the target.

22. In the Auto Map Preferences dialog, click OK.

The resulting transformation looks like this:

23. Save and close the mapper.

24. Save and close the Mediator editor to return to the composite.

25. Choose File > Save All from the menu or the toolbar (two diskettes icon) just to

make sure everything is saved.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-20 BPEL Orchestration Section 4.6

4.6 Deploying the application Deploy the application in the same way as before using the Deploy command on the

Project Menu. Read Appendix A Deploying and Running a Composite Application

to refresh your memory on how to deploy if you need to.

Since you already deployed POProcessing once before, you must either choose a new

version number or select Overwrite any existing composite when deploying. If you

do overwrite the previous composite, the existing instances for the version become

stale and can no longer be viewed.

4.7 Testing the application 1. After deploying, in the EM console, click on the POProcessing application

(under SOA/soa-infra) and then click Test to open the Test page.

2. In the Input Arguments section, click XML View.

3. In the previous chapter you submitted a small order which created an order file

directly. This time you'll create a large order which the Mediator will route to

the BPEL approval process.

Open the following file in a text editor:

~/SOA/SOA11gFoundationTutorial/SOA11gFoundtionTutorial/po/i

nput/ po-large-iPodx30.txt

Copy the entire contents and paste them into the large text field in the Input

Arguments section:

4. Click Test Web Service in the lower-right corner of the browser panel.

5. As before, the Test Result screen won't have any response because this is a one-

way invocation with no reply or callback. However a new order_n.txt file

will have been created in ~/tmp. You can open it in a text editor and view the

results (shown in Figure 1). Notice that the value of <status> on line 8 has been

set to approved.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.7 BPEL Orchestration 4-21

Figure 1 Output from order_n.txt file

6. Click the Request tab in the browser to return to the request page.

7. Re-run the application using the same input data, but this time change the credit

card number to 4321-4321-4321-4321 which represents an invalid credit card.

8. Click Test Web Service to run the application.

9. Open the new order file in /home/oracle/tmp and notice what the status is

this time. This is the result of the <switch> statement in your BPEL process.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-22 BPEL Orchestration Section 4.7

10. Click Launch Message Flow Trace to see the details of the message flow for this

instance of your composite. Alternatively, click on the application. In the Last 5

Instances section click on the most recent instance to see the execution flow.

Notice that the flow trace shows you the flow through both composites. You can

see the composite instance value on the far right.

11. You can click the approveLargeOrder link to look at the BPEL process instance

and you can click the various activities to see their results.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.7 BPEL Orchestration 4-23

An interesting one to click is the getCreditCardStatus invoke payload.

12. When you click the getCreditCardStatus invoke payload, the synchronous

request-response call, you see both the input to the service (i.e., what you're

passing to the service) and the output (i.e., what you're getting back from the

service).

In the screenshots, below, the input to the service is the credit card number 4321-

4321-4321-4321 and the output returned is INVALID.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

4-24 BPEL Orchestration Section 4.8

13. Back in the main screen of the EM console, run the Test page again and this time

use the small order that you used in the previous chapter, which can be found in /home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutor

ial/po/input/po-small-Headsetx1.txt

Note that the BPEL process does not get invoked and instead you only get a new

order file generated in /home/oracle/tmp. You know it didn’t get invoked

because the status is set to Initial in the order_n.txt file. Initial was the value

passed in for status in the po-small-Headsetxt1.txt file.

4.8 Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Invoking the CreditCardStatus service

Reference: getCreditCardStatus

WSDL using Resource Browser - Service: validationForCC > getStatusByCC

Designing the BPEL approval process

Name: approveLargeOrder

Template: Asynchronous BPEL Process

Service Name: approveLargeOrder_client

Expose as a SOAP Service: Unchecked

Input: internalorder.xsd - Order

Output: internalorder.xsd - Order

Wire the BPEL process to the getCreditCardStatus service

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 4.8 BPEL Orchestration 4-25

In BPEL Editor

- Invoke Name: invokeCCStatusService

- Wire: Invoke to getCreditCardStatus

- Input Variable: default

- OutputVariable: default

- Assign before Invoke: assignCCNumber

Copy 1 From: inputVariable > payload > Order > creditCardInfo >

cardNumber

To: invokeCCStatusService_execute_InputVariable > request >

creditcardStatusRequest > CCNumber

Copy 2 From: inputVariable > payload > Order

To: outputVariable > payload > Order

- Switch after Invoke: EvalulateCCStatus

- Case Expression:

bpws:getVariableData('invokeCCStatusService_execute_OutputVariable'

,'reply','/ns3:creditcardStatus') = 'VALID'

- Case Assign: assignApproval

Copy From: ‘approved’

To: outputVariable > payload > Order > status

- Otherwise Assign: assignInvalidCC

Copy From: ‘invalidCreditCard’

To: outputVariable > payload > Order > status

Modifying the Mediator component

Wire the Mediator to the BPEL process

Filter to Write: ($in.request/inp1:PurchaseOrder/inp1:price *

$in.request/inp1:PurchaseOrder/inp1:quantity) < 1000

Filter to approveLargeOrder: ($in.request/inp1:PurchaseOrder/inp1:price *

$in.request/inp1:PurchaseOrder/inp1:quantity) >= 1000

Callback Target Service: POProcessing > References >

WriteApprovalResults > Write

Request Map from PurchaseOrder to Order

Callback Map from Order to Order

The application is completed. Continue with Section 4.6 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 5.1 Adding Human Workflow 0-1

Adding Human Workflow

5.1 Introduction .................................................................................................................................................... 1 5.2 Designing the flow ......................................................................................................................................... 1 5.3 Adding a Human Task to the composite .................................................................................................... 2 5.4 Calling the Human Task from BPEL ........................................................................................................... 5 5.5 Creating the Task form for task details ......................................................................................................10 5.6 Deploying and Testing the application ......................................................................................................15 5.7 Operations and naming ...............................................................................................................................18

5.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch5-HW.

To run this solution, you must first complete Chapter 1 to set up the application.

In this next iteration of the application, you will add a Human Task to the composite

in order to review large orders manually.

Once completed, your POProcessing composite will look like this:

Designing the flow To review large orders manually, you add the Human Task to the BPEL process after

the credit card has been validated and only for VALID cards. You also create the

task form as a separate project in the application to be used at runtime with the

worklist application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-2 Adding Human Workflow Section 0

Adding a Human Task to the composite

1. In JDeveloper, drag-and-drop a Human Task component onto the composite.

2. Specify the following:

Name: ManualPOApproval

Namespace: Leave as default

Create Composite Service with SOAP Bindings: Unchecked

3. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-3

4. Wire the BPEL process to the Human Task.

5. Double-click (right-click and select Edit) the Human Task to open the Task

Definition editor.

6. Specify the following settings:

Title: Using the expression builder button at the right of the Title data entry

area, enter ‘Approve Order’ and click OK. You see <%'Approve Order'%>

entered as the value in the data entry area.

Description: Manual approval task for large orders

Parameters: Order

Use the green plus sign to open the Add Task Parameter dialog. Select

Element and then browse for the Order element in internalorder.xsd.

Editable via worklist: Checked (this is optional and only so that you can see

the functionality as it doesn’t really make sense for this application)

Click OK

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-4 Adding Human Workflow Section 0

7. In the Assignment and Routing Policy section, double-click the <no participant>

box in the diagram.

8. In the Add Participant Type dialog, specify the following:

Type: Single

Label: Large Order Approver

9. Use the green plus sign next to Participant Names to Add user

10. Set the Identification Type to User (already set)

11. Set Data Type By Name (already set)

12. In the Value Field enter: weblogic (no quotes)

Normally you would browse for users set in the server, however, there have not been

users set yet. To browse for users, you must create a server connection to the SOA

Managed server and, when you test that connection, some protocols will fail.

However, you will be able to browse for users using it.

13. Click OK

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-5

14. Save and close the Task Definition editor. Return to the composite.

Calling the Human Task from BPEL 1. Double-click the approveLargeOrder BPEL component to open the BPEL

designer.

2. Drag a Human Task into the <case> branch of the <switch>, underneath the

assignApproval <assign> activity (you will be moving this assign activity

shortly).

3. The Create Human Task dialog opens. Select ManualPOApproval from the Task

Definition drop-down list.

4. For Task Title, enter: Approve Order.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-6 Adding Human Workflow Section 0

5. Select the BPEL variable to pass the input parameter by clicking the […] button

on the right of Order.

6. Select Variables > Process > Variables > outputVariable > payload > Order.

outputVariable has all of our information collected so far.

7. Click OK.

8. Click OK.

9. You will have two new activities in your BPEL process: a Human Task and a

Switch activity. The Human Task handles getting the approval (or rejection)

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-7

from a user of the work list application. The Switch activity can then be used to

evaluate the results from the Human Task, for example, what to do if it's

approved or if it's rejected.

You just configured the Human Task, so the next step is to take appropriate

actions in the Switch.

Click the plus icon next to the Switch to expand it.

10. Notice the three outcomes for which this Human Task was configured:

APPROVE; REJECT; or EXPIRED, STALE, WITHDRAWN, or ERRORED. You

will set the status for each of those cases.

The approved case was already done earlier, so you can reuse that. Drag the

assignApproval Assign activity underneath the CopyPayloadFromTask Assign

activity in the APPROVE branch of the <switch>.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-8 Adding Human Workflow Section 0

11. Double-click (right-click and select Edit) the CopyPayloadFromTask Assign

activity in the REJECT branch.

12. Click the green plus icon and add a new Copy Operation.

13. Change the Type on the From area to Expression and set the status field of the

outputVariable variable to 'rejected'.

14. Click OK.

15. Click OK.

16. Now, for the third branch, double-click (right-click and select Edit) the

CopyPayloadFromTask <assign> activity in the EXPIRED, STALE,

WITHDRAWN, or ERRORED branch.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-9

17. Click the green plus icon and add a new Copy Operation.

18. Set the status field of the outputVariable variable to 'expired'.

19. Click OK.

20. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-10 Adding Human Workflow Section 0

The <switch> activity now looks like the following figure. Note that the

APPROVE branch could have been done the same way as the other two, but in

this case there are two separate <assign> activities. The end result is the same.

21. Save the BPEL process.

Creating the Task form for task details The Task data entry/display is an ADF form that is created in a separate project. You

create a JSF project to manage the task form and point it to the task file you create in

your composite.

Creating a form from a Human Task definition is quick and easy. Simply accept the

defaults for the different steps or customize as desired. A default form layout is

created automatically. You have the option to edit this as desired.

1. From the Application Menu, select New Project

2. Select General in the Categories column and Generic Project under Items.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-11

3. Click OK

4. Enter the project name: ApproveTaskDetails

5. Click Finish

6. Right-click on the new project (ApproveTaskDetails) and select New

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-12 Adding Human Workflow Section 0

7. In the New Gallery, expand the Web Tier category and select JSF. Under Items,

select ADF Task Flow Based on Human Task. Then, click OK.

8. In the SOA Resource Browser dialog, browse to the ManualPOApproval.task

file you created in the POProcessing project. Select it. This file is in the

POProcessing folder.

9. Click OK.

10. In the Create Task Flow dialog, accept all defaults and click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-13

11. The task details page is initialized and all of the artifacts needed for the form are

added to your new project.

12. Double-click on the taskDetails1.jpsx icon in the Task Flow view to finish

creating the task flow.

13. In the Create JSF Page dialog, accept all defaults and click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-14 Adding Human Workflow Section 0

After some processing, the empty task flow page is opened. You will drag the

task definition to this page to create all of the elements of the Order payload that

you specified as the task payload when you created the task in the composite

project.

14. Locate the Task definition in the Data Controls section of the Application

Navigator as shown in the figure below.

15. Drag the Task to the empty task flow page and drop it anywhere.

16. In the menu that opens, select Human Task -> Complete Task with Payload

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-15

17. In the dialog, Edit Action Binding, accept all defaults and click OK. Click OK

again to finish creating the task form.

18. Wait as processing occurs. The completed page layout will appear in the

taskDetails1.jspx window. Then, Save All and close all task windows that are

open.

In the Application Navigator pane, you see lots of files listed in the new task

form project. Scroll the pane to the top and left and close the folders for the

project to clean up the navigation view and allow you to see your composite

project again.

Deploying and Testing the application 1. Deploy the POProcessing composite from its project menu. Enter a new version

number or select the checkbox to overwrite the existing version. Read Appendix

A if you need more details about how to deploy and test your composite.

2. Next, we’ll deploy the ApproveTaskDetails task form project by selecting

Deploy from the Application menu in the toolbar.

Task forms are deployed using the Application menu, not the Project menu. You

can find the Application menu in the toolbar or you can right-click on the

application name to bring up the menu or you can click the drop down menu

icon to the right of the application name to open the application menu. Read

Appendix A for more details about how to deploy your task form.

3. If prompted in the Deployment Configuration dialog, set the managed server

soa_server1.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-16 Adding Human Workflow Section 0

4. Click OK.

If you chose to deploy the task form project from its project menu, you will see

an error message and deployment will not complete. You must deploy task

forms from the Application menu in the toolbar. Go back to step 2.

5. Once deployed, open the EM console to test the application using the input for a

large order as you did in the previous chapter. This will create a new order that's

over $1,000. Copy the input data into the XML View in the Test page from: ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/inpu

t/po-large-iPodx30.txt

6. As usual, the Response tab won't show any results as this is a one-way

invocation with no reply or callback. Notice, however, that a new order file was

not created in /home/oracle/tmp. That's because the application hasn't

completed running yet. To see what's going on, you need to look at the instance

audit trail.

7. Click Launch Message Flow Trace to see the details of the message flow for this

instance of your composite. Alternatively, click the latest instance from the

composite page. You’ll notice the status for approveLargeOrder and

ManualPOApproval are both still ‚Running.‛ They are waiting for the human

task to be processed.

8. Now it is time to "change hats" and log on to the worklist application as a

customer service representative to approve the task. Using your browser, open

http://localhost:7001/integration/worklistapp or click the

Worklist Application bookmark.

9. Logon using the following credentials:

Username: weblogic

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-17

Password: welcome1

The worklist application is an out-of-the-box application where users can view

and manage their tasks.

10. Click on the most recent task row to highlight it.

Selecting the task opens it in the lower frame of the worklist application. The

first time the task is opened there will be a delay while the form is compiled and

loaded.

11. When the form opens, you can see the task details and the different options.

Select Reject or Approve as desired. This will submit the task and notify the

BPEL process it can continue. If you have edited the task data, using the buttons

will also save the data before submitting. If you use the Actions menu to submit

the task, you must save manually first.

12. Return to the task flow in the Enterprise Manager console. If you still have it

open you can just refresh the page. By clicking the cycle icon in the upper-right

corner of the window. Notice that all steps are now ‚Complete.‛

13. You will also have a new order file in /home/oracle/tmp.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

0-18 Adding Human Workflow Section 0

Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Adding a Human Task to the composite

Name: ManualPOApproval

Namespace: Leave as default

Expose as Composite Service: Unchecked

Wire: BPEL to task

Title: <%'Approve Order'%>

(enter ‘Approve Order’ using the expression builder)

Description: Manual approval task for large orders

Parameters: internalorder.xsd > Order

Editable via worklist: Checked

Participant Type dialog, specify the following:

- Type: Single , Label: Large Order Approver, User: weblogic

Calling the Human Task from BPEL

In case statement, after assignApproval, Human Task: ManualPOApproval

Task Parameter: Variables > Process > Variables > outputVariable > payload

> Order

Move assignApproved to APPROVE branch after CopyPayloadFromTask

CopyPayloadFromTask Assign REJECT branch

- Copy from: 'rejected'

- To: outputVariable > payload > Order > status

CopyPayloadFromTask Assign Otherwise branch

- Copy from: ‘expired’

- To: outputVariable > payload > Order > status

Creating the Task form for task details

Right-click human task, select Auto-generate task form

Project Name: ApproveTaskDetails

OR

Application menu > New Project, generic project

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 0 Adding Human Workflow 0-19

Project Name: ApproveTaskDetails

Project menu > New

JSF > ADF Task Flow Based on Human Task

- POProcessing> POProcessing> ManualPOApproval.task

Double-click taskDetails1.jspx icon in Task Flow view, click OK

Open Data Controls > getTaskDetails > Return > Task

- Drag Task to the open task details page

- select Human Task -> Complete Task with Payload

Click OK on remaining dialogs, accepting defaults.

The application is completed. Continue with Section 5.6 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 6.1 Modifying the Mediator 6-1

6 Modifying the Mediator

6.1 Introduction .................................................................................................................................................... 1 6.2 Modifying the application ............................................................................................................................ 2 6.3 Deploying and testing the application ........................................................................................................ 4 6.1 Operations and naming ................................................................................................................................ 5

6.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch6-update.

To run this solution, you must first complete Chapter 1 to set up the application.

The application is almost complete, but there is an issue. For orders under $1,000,

the order is routed directly to the file adapter via the Mediator. For orders over

$1,000, the mediator routes the request to the BPEL process for approval before

sending it to the file adapter to be written.

Look at Figure 1 and Figure 2. They show the output for a small order and large

respectively. There is an important difference, do you see it?

Figure 1 Output file for a small order

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

6-2 Modifying the Mediator Section 6.2

Figure 2 Output file for a large order

In the case of the large order, the BPEL process sets the status. In this case, the status

is approved. However, in the case of small orders that get routed only through the

Mediator, the status is not updated and it still set at initial.

This creates inconsistent data. The application should be modified such that small

orders are always approved.

Where do you think this change should be made? Follow the next steps to find out.

6.2 Modifying the application 1. In the POProcessing composite.xml, double-click the routePO Mediator

component to open it.

2. Modify the existing transformation for the WriteApprovalResults::Write

operation by clicking the transformation button to the right of the Transform

Using field.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 6.2 Modifying the Mediator 6-3

3. Ensure that Use Existing Mapper File is selected, and click the edit button

represented by the pencil icon. This will open the existing transformation.

4. Click the mapping for status to highlight it.

5. Press the Delete key on your keyboard to remove it.

6. Right-click status on the target side (right side) and select Set Text and then

Enter Text…

7. Enter approved in the Text field.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

6-4 Modifying the Mediator Section 6.3

8. Click OK.

The status field has a visual cue to let you know a test value has been assigned.

9. Save and close the mapper.

10. Save and close the Mediator editor.

6.3 Deploying and testing the application 1. Deploy the POProcessing composite as you have before. Don’t forget to select to

“Overwrite any existing composites …” as you deploy.

2. In Enterprise Manager, test the application using the small order input (from ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/inpu

t/po-small-Headsetx1.xml).

3. Open the resulting output order file in ~/tmp and see that the status is

approved.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 6.1 Modifying the Mediator 6-5

6.1 Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Modifying the application

Edit Transform: PurchaseOrder_To_Order.xsl

Remove wire: status

Set Text on target: status

Value: approved

The application is completed. Continue with Section 6.3 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.1

7 Adding Business Rules

7.1 Introduction .................................................................................................................................................... 1 7.2 Designing the flow ......................................................................................................................................... 1 7.3 Adding a Business Rule to POProcessing .................................................................................................. 2 7.4 Deploying POProcessing composite ..........................................................................................................14 7.5 Running the application...............................................................................................................................15

7.5.1 Additional Test Cases ...........................................................................................................................16 7.1 Operations and naming ...............................................................................................................................16

7.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch7-Rules.

To run this solution, you must first complete Chapter 1 to set up the application.

In this chapter, you will add a business rule to the composite to make the decision on

whether the human task is required for manual approval or not. When you added

the human task, the BPEL process started calling it for orders > $1000. Now, the new

business rule will determine whether or not the human task is required.

When this chapter is completed, the composite will look like this.

7.2 Designing the flow The business rule uses the order total to determine whether or not manual approval

is required. Orders over $5000 require manual approval otherwise, the order is

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-2 Section 7.3

approved automatically. The BPEL process only sends to the business rule orders

that have already had the credit card validated.

7.3 Adding a Business Rule to POProcessing First you’ll add the business rule component to the composite and then, you will

invoke the rule from the BPEL process.

1. Add the Business Rule component to the composite by dragging it to the

Components section.

2. In the Create Business Rules dialog enter ManualApproval for the dictionary

Name.

3. Now, we’ll set the input and output schema. Selecting Input from the green

plus-sign drop down opens the Type Chooser for identifying the schema. Select

the Import Schema File button in the upper-right corner to import a schema and

then browse to the schema location: ~/SOA11gFoundationTutorial/ SOA11gFoundationTutorial/po/schemas/OrderBookingDiscount.xsd

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.3

4. Click OK to dismiss the Import Schema File window and select OK to close the

Localize Files window.

5. In the Type Chooser, select price for the input schema type.

6. Click OK.

7. Repeat the same steps to identify the output schema. Under the green plus sign

menu, select Output. This time you won’t need to import the schema type. Just

select the type discountandshipping.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-4 Section 7.3

8. Once the dialog is complete, click OK to close it. You’ll see the

ManualApproval rule component added to the composite.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.3

9. Double-click (right-click and select Edit) the new rules component to open the

rule editor. RuleSet_1 is selected.

10. Click the green plus sign to add a rule template.

11. Select <insert test> and then, select <operand> in the IF statement. Next, select

the price.price object.

12. Complete the test for >= 5000. Press Enter to enter the value and add the THEN

clause to create the return result.

13. Select <insert action> and select assert new. Select <target> and select

discountandshipping

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-6 Section 7.3

Select the <add property> box and a dialog comes up to set the property values.

Set the values as shown. We are not using discount or shipping in this

composite application so set those values to 0 (use Enter to enter the value).

For orders $5000 or more, set the approval required to true. Also set the price

value to the input price.

approvalRequired = true

discount = 0

price = price.price

shipping = 0

14. Repeat the process to add a second rule for orders under $5000. In this case,

approval is not required.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.3

15. Save and close the ManualApproval.rules file you were just editing.

16. Double-click the approveLargeOrder BPEL component in the composite to open

the BPEL process. You will be adding a rule activity just before the existing

human task. But first, let’s first create a variable to store the output from the

ruleset.

17. In the Structure palette, open Variables/Process and select the Variables node.

If the Structure palette is not open, select it from the View menu.

18. Select the green plus sign icon to add a variable named approvalRequired of type

discountandshipping. To select the type, click on the Element radio button and

browse to orderBookingDiscount.xsd/discountandshipping.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-8 Section 7.3

19. Click OK to dismiss the Create Variable dialog.

20. Now drag a Business Rule from the palette onto the BPEL process just before

the ManualPOApproval_1 human task within the case block of the switch

activity.

The Business Rule dialog opens. Set the Name to ApprovalRule and select the

ManualApproval Dictionary you just created in the composite.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.3

21. Now, let’s focus on the input and output facts. The input fact will be the total

price. Create an expression using the expression builder to multiply the item

price by the quantity. Start by selecting the Assign Input Facts tab and then

clicking the green plus icon to display the Decision Fact Map. Build the

expression as shown:

22. Click OK to dismiss the Decision Fact Map.

23. After the ruleset is evaluated, the output fact is returned. Start by selecting the

Assign Output Facts and clicking the green plus sign icon. Set the value of the

output fact to the variable you just created. Make sure to select the whole

payload to copy all the values over. However, we are really only interested in

the approvalRequired value.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-10 Section 7.3

24. Click OK to close the Business Rule dialog.

25. Now, drag a Switch activity from the palette to right below the ApprovalRule

activity. Then, click the plus icon to the left of the switch to expand the case

blocks.

26. Select Save All before continuing.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.3

You will be moving the human task and switch statement into the case block of

this new Switch activity. Before you do that, we’ll drag a Sequence activity to

keep the moved activities in the proper order.

27. Drag a Sequence activity from the palette into the case block.

28. Move the ManualPOApproval human task into the Sequence block for this

switch so that it only executes when the test case is true.

29. There was a Switch activity that followed the human task for processing the

results that set the status to approved or rejected. Move this into your new

sequence block in the switch activity case statement as well.

30. Select Save All before continuing.

31. Use the Expression Builder to set the test case expression in the case block. You

want to invoke the human task only when manual approval is required. This is

the result from the ApprovalRule evaluation above. Start by clicking the

expression editor icon in the upper-right corner of the case block. Build this

expression: bpws:getVariableData('approvalRequired','/ns5:discountandsh

ipping/ns5:approvalRequired') = ‘true’

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-12 Section 7.3

32. Next, add an Assign activity in the Otherwise block of your new Switch. Name

this new assign: AutoApproved. This assigns the status value ‚approved‛ for the

case where the manual task is not required.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.3

33. Save All your changes.

34. Your completed BPEL changes look like the illustration below:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-14 Section 7.4

Review the logic of the changes you made. Recall that when the credit card is

valid, you ask the rule to tell you if manual approval is required. If manual

approval is required, you call the human task service to take care of that and set

the status based on the returned value. If manual approval isn’t required, you

auto approve the order in the otherwise block.

You have completed all changes and are ready to deploy. Continue with the

next section.

7.4 Deploying POProcessing composite 35. In the same way as you did before, deploy your newly updated POProcessing.

When you see the Deployment Plan dialog, enter a new version or select the

Overwrite Version checkbox and click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.5

7.5 Running the application 36. Once the application is deployed, you are ready to try running it. Open the EM

console at http://localhost:7001/em

37. Click on POProcessing and then the Test button to test your service.

38. Enter an extra large order ( >= 5000) by

Clicking XML View so you can paste in the XML payload. This is the

recommended way. Open the following file in a text editor:

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/i

nput/po-xtralarge-HDTVx10.txt

Copy the entire contents and paste them into the Input Arguments field in

your browser, replacing the defaulted xml:

39. Click Test Web Service.

40. As you recall, the Response panel won't have any response because this is a

one-way invocation with no reply or callback.

There is also no file written to the output directory. That's because the

application hasn't completed running yet. To see what's going on, you need to

look at the instance audit trail.

41. Click Launch Message Flow Trace to see the details of the message flow for this

instance of your composite. You’ll notice the status for approveLargeOrder and

ManualPOApproval are both still running. They are waiting for the human

task to be processed.

42. Login to the worklist application at

http://localhost:7001/integration/worklistapp (use the Worklist Application

bookmark) with user weblogic/welcome1 and approve the task.

43. Return to the task flow in the EM console. If you still have it open, you can just

refresh the page (refresh cycle icon in the upper-right corner of the page). Notice

that all steps are now complete.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Adding Business Rules 7-16 Section 7.1

7.5.1 Additional Test Cases We have now used four test cases for your application depending on the input data

value of the total price (price X quantity):

Under $1000 – auto approval without BPEL component involved

Invalid credit card – auto rejection using BPEL but no business rule and no

human task components involved

1000 to under 5000 - auto approval using BPEL with business rules but no

human task involvement

5000 and over – manual approval using BPEL including both the business

rule and human task components

You just exercise the fourth test case above. Spend a few minutes and exercise the

other three to make sure your BPEL process is working as expected.

Here are the test cases you can use:

Under $1000 – po-small-Headsetx1.txt

Invalid credit card – po-large-iPodx30.txt but change the credit card number

in Tree View to: 4321-4321-4321-4321

1000 to under 5000 – po-large-iPodx30.txt

5000 and over – po-xtralarge-HDTVx10.txt

7.1 Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Adding a Business Rule to POProcessing

Composite Business Rule: ManualApproval

- Input: OrderBookingDiscount.xsd > price

- Output: OrderBookingDiscount.xsd > discountandshipping

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

7.1.1.1 Section 7.1

RuleSet_1: Rule 1: If price >= 5000 then assert new discountandshipping

with approvalRequired = true.

RuleSet_1: Rule 2: If price < 5000 then assert new discountandshipping with

approvalRequired = false.

BPEL variable: approvalRequired of type discountandshipping

Business Rule just before the Human Task

BusinessRule: ApprovalRule, ManualApproval

- Input fact: price*quantity to price

- Output fact: discountandshipping to approvalRequired >

discountandshipping

Switch below Rule

Case expression: bpws:getVariableData('approvalRequired','/ns5:discountan

dshipping/ns5:approvalRequired') = true()

Case: add Sequence, move Human Task and human task switch

Otherwise: Assign: AutoApproved

- Copy From: ‘approved’

- Copy To: outputvariable > status

The application is completed. Continue with Section 7.4 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.1 Adding Fulfillment 8-1

8 Adding Fulfillment

8.1 Introduction .................................................................................................................................................... 1 8.2 Designing the flow ......................................................................................................................................... 2 8.3 Add a BPEL Process and a Business Rule .................................................................................................. 2 8.4 Define the Business Rule ............................................................................................................................... 5 8.5 Define the BPEL Process ..............................................................................................................................10 8.6 Invoke FulfillmentProcess ...........................................................................................................................11 8.7 Deploying the application ...........................................................................................................................16 8.8 Testing the application .................................................................................................................................16 8.9 Operations and naming ...............................................................................................................................17

8.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundation/

SOA11gFoundation/po/solutions/ch8-DT.

To run this solution, you must first complete Chapter 1 to set up the application.

In this chapter you will add a BPEL process to the composite with a business rule

using a decision table to make the decision of which fulfillment carrier to use for

fulfilling the order. Orders under $1000 use USPS, orders from $1000 and under

$5000 use UPS and orders over $5000 use FedEx.

When finished, the composite will look like this:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-2 Adding Fulfillment Section 8.2

8.2 Designing the flow The business rule uses the order total to determine which fulfillment vendor to

choose. Three order total ranges are used, which means there would be multiple IF-

THEN clauses to create to cover all of the cases. Instead, you use a decision table to

create the three values in the bucketset and create only three rules.

The fulfillment process must be called whenever the order is approved. This is in the

BPEL approveLargeOrder process, but it is also in the first case, in the routePO

mediator when the order is under $1000 and is automatically approved.

8.3 Add a BPEL Process and a Business Rule You first add the BPEL process component to the composite and then you add the

business rule.

1. Add the BPEL process component to the composite by dragging it to the

Components section. Complete the dialog as follows.

- Name: FulfillmentProcess

- Template: Asynchronous BPEL Process

- Service Name: fulfillmentprocess _client

- Expose as a SOAP Service: Unchecked

- Input: Click the flashlight icon. In the Type Chooser dialog,

click the Import Schema File button and import ~/SOA11gFoundation/SOA11gFoundation/po

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.3 Adding Fulfillment 8-3

schemas/fulfillment.xsd in the same way as you have previously

imported an xsd. Select Fulfillment as the input type.

- Output: Select CarrierSelection in fulfillment.xsd as the output type

2. Click OK.

3. Now, drag a business rule component to the Components section. Complete the

dialog as follows.

- Name: FulfillmentRules

- Package: fulfillmentrules

- Input: Fulfillment

- Output: CarrierSelection

- Advanced tab>Service Name: OracleRulesFulfillment

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-4 Adding Fulfillment Section 8.3

4. Click OK.

5. Drag a wire from the new FulfillmentProcess BPEL component to the new

FulfillmentRules rule.

6. Drag another wire from ApproveLargeOrder BPEL component to the new

FulfillmentProcess BPEL process.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.4 Adding Fulfillment 8-5

8.4 Define the Business Rule Now, you can define the business rule. You need a rule that will distinguish

between the three carriers based on the order total. Rather than write out

multiple exclusive if-then statements in the ruleset, you can do this more easily

with a decision table.

First, we’ll define the three ranges of the order total that you want to use for

evaluation. Then, we’ll use those ranges in the decision table to determine the

carrier.

7. In the composite, double-click the FulfillmentRules business rules component to

open the rule editor.

8. Click Bucketsets in the left-side palette.

Notice that one bucketset has already been created. In the fulfillment.xsd

schema, CarrierValue is a restricted String type and is therefore represented as a

Java enum. All imported Java enums are used to create a bucketset of their

values. You use this bucketset to assign the return value, CarrierSelection.

9. As shown below, add a List of Ranges and then click edit to define the values in

the new bucketset.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-6 Adding Fulfillment Section 8.4

10. Enter the Name as OrderTotal and Data Type as double.

11. Click the green plus icon (next to the red X) twice to add two buckets and edit

the values as follows.

- Endpoint: 5000, Alias: xtralarge

- Endpoint: 1000, Alias: large

- Endpoint: -Infinity, Alias: small

12. Click OK.

13. Now, you have to associate this bucketset with the input fact. Click Facts and

select and edit FulfillmentType.

14. Set the value in the Bucketset column for total property to: OrderTotal by using

the drop-down list.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.4 Adding Fulfillment 8-7

15. Click OK.

16. Select CarrierSelection and click edit. You see the value carrier has already been

associated with the bucketset CarrierValue. All imported Java enums are

automatically associated with properties of their type.

17. Click OK.

18. Now, you are ready to create the decision table. Click Ruleset_1 in the left-side

palette. Use the drop -down menu on the green plus icon to select Create

Decision Table.

19. Click <insert condition>. Right-click <edit condition> and select Edit Condition.

Then, choose FulfillmentType.total:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-8 Adding Fulfillment Section 8.4

20. Click the cell under R1 and choose small – the range you created previously.

21. Select the menu for the green plus icon just above the rule and select Rule to

add a second rule. The R2 column appears. Click in the cell under R2 and set

this rule name to large.

22. Add a third rule and set its name to xtralarge. These three rules, which are the

ranges defined earlier, are evaluated against the condition FulfillmentType.total.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.4 Adding Fulfillment 8-9

23. Now, let’s set the Actions for these three rules. Click <insert action> and select

Assert New. Right-click the assert new ( text and select Edit. In the Action

Editor window, select CarrierSelection

24. Select the checkbox for Parameterized.

25. Select the checkbox for Always Selected.

26. Click OK.

27. Now set the values. Select the cell for each of the three rules and set the carrier

value for each one: small=USPS, large=UPS, xtralarge=FED_EX

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-10 Adding Fulfillment Section 8.5

28. That’s it! The decision table is complete. Save All and close the rule editor.

8.5 Define the BPEL Process Now, we’ll define the fulfillment BPEL process that will use this business rule.

At first, this simply calls the business rule you just created. In the next chapter,

you add additional functionality to send the fulfillment message.

29. Double-click FulfillmentProcess BPEL component to open the BPEL editor.

30. Drag a Business Rule activity to the process flow. Place it right after the

receiveInput activity.

31. In the Business Rule dialog, leave the default name and select the

FulfillmentRules from the Dictionary drop-down list.

32. In the Assign Input Facts tab, click the green plus icon to add an assignment to

map the BPEL inputvariable to the rule input fact.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.6 Adding Fulfillment 8-11

33. Click OK to close the Decision Fact Map.

34. In the Assign Output Facts tab, assign the output fact to outputvariable.

35. Click OK to dismiss the Decision Fact Map.

36. In the Business Rule dialog, click OK. Your new BusinessRule_1 appears in the

BPEL process.

37. Save All your work.

8.6 Invoke FulfillmentProcess Now, we’ll need to invoke your new fulfillment process. It should be called

whenever you have an approved order. There are two places to call it: once in

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-12 Adding Fulfillment Section 8.6

the approveLargeOrder BPEL process and once in the routePO mediator for small

orders that are automatically approved.

38. You’ve already wired it to ApproveLargeOrder so let’s start there. In the

composite, double-click the approveLargeOrder BPEL component to open the

BPEL editor.

39. Locate the switch branch for valid credit cards. Drag an Invoke at the end of

this branch inside the branch scope.

40. Wire the Invoke to the partnerLink for FulfillmentProcess which was added for

you when you wired the rule to the process earlier. You might want to

maximize (right-click the tab and select Maximize) and change the Zoom level

in order to better navigate the process model.

41. In the Edit Invoke dialog, set the Name to Invoke_Fulfillment and use the green

plus icon to create the input variable using the default values.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.6 Adding Fulfillment 8-13

42. Click OK and see that the Invoke_Fulfuillment is connected to the partner link.

43. Do you remember what input the FulfillmentProcess service is expecting? It is

the FulfillmentType which contains customer id, order id and order total. The

easiest way to set this input value is to use a Transform. Drag a Transform

activity just before the new Invoke_Fulfillment activity.

44. Edit the new transform. You will need to make sure your Zoom level is set to

100% in order to see the Transform window. Use the green plus icon to set the

Source for the transformation to inputvariable and its Part to payload. Set the

Target Variable to Invoke_Fulfillment_process_InputVariable with a Target Part of

payload. Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-14 Adding Fulfillment Section 8.6

45. Click the green plus icon next to the Mapper File to create the mapper file.

46. Perform mappings to copy the customer id and order id values.

47. For total, you have to multiply price and quantity so use a mathematical

function. First, drag the multiply function from the Mathematical Functions tab

into the middle area. Then, drag the wires for price and qty values into the

function. Finally, drag a wire from the function to total.

48. Save and close the transformation mapper.

Take a look at the process. It isn’t quite complete because there should be

fulfillment only when the human task is approved. You need to add a switch

statement to check for the approved status for both the auto-approved or human

task approved cases. Once the switch has been added, we’ll rearrange things a bit

so the Invoke_Fulfillment is executed after the human approves the task.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.6 Adding Fulfillment 8-15

49. Drag a Switch activity directly below the Invoke_Fulfillment. Name it

Switch_Fulfillment, and expand the switch to see its case and otherwise branches.

50. Since you are going to move both the Transform and the Invoke activities into

the case branch of the Switch, drag a Sequence activity block into the case

branch to hold them.

51. Drag the Transform_1 and Invoke_Fulfillment activities into the Sequence

block within the case branch.

52. Use the View Condition Expression icon and XPath Expression Builder icon to

add the condition statement to the case block to check the status. It should look

like this in the Expression Builder:

bpws:getVariableData('outputVariable','payload','/ns2:Order/ns2:status') = 'approved'

53. Remove the otherwise branch because there is no action to take here. Just right-

click on the otherwise branch and select Delete.

54. The changes to the BPEL process are complete. Save All and return to the

composite.

55. Now, you need to invoke fulfillment from the mediator to take care of the case

when an order is auto-approved. So, double-click on routePO to open the

mediator editor.

56. Select the green plus icon and choose static routing rule.

57. Select Service as the type and in the dialog, navigate to POProcessing > BPEL

Processes > FulfillmentProcess > Services > fulfillmentprocess_client > process.

58. Click OK.

59. A new routing rule is added to the bottom of the table. You want to call

fulfillment from here only in the auto-approval case so you need to set the filter

to the same thing as in the first case, that is, for orders under 1000. Click the

filter icon (the funnel) to open the Expression Builder and enter:

($in.request/inp1:PurchaseOrder/inp1:quantity *

$in.request/inp1:PurchaseOrder/inp1:price) < 1000

60. Click OK to dismiss the Expression Builder.

61. Click the transform icon on the right (next to the Transform Using drop-down

menu) and create a transformation mapping, as youd did earlier, using the

multiply function to set the value for total.

62. Save and close the transformation mapper.

The new routing rule is complete. You don’t need to set the callback because

you are not interested in the return value here.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-16 Adding Fulfillment Section 8.7

63. Save and close the mediator routing rule editor.

You are all done! Now, you are ready to test.

8.7 Deploying the application Deploy the POProcessing in the same way as before using the Deploy command on

the Project Menu. Don’t forget to elect to Overwrite any existing components. If you

need to, read Appendix A Deploying and Running a Composite Application to

refresh your memory on how to deploy.

8.8 Testing the application So far, the fulfillment process determines the delivery carrier but doesn’t really do

anything with the information so you have to use the flow trace view in the EM

console to see that everything is working correctly.

64. Open the Enterprise Manager console and click on POProcessing under

SOA/soa-infra.

65. Click Test.

66. Using the input files in

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/input, run

three tests with small (po-small-Headsetx1.txt), large (po-large-iPodx30.txt) and

extra large orders (po-xtralarge-HDTVx10.txt).

67. Click Launch Message Flow Trace to view the instance data.

68. For the extra large order, submit the approval task to complete the process.

69. Verify that the FulfillmentRules component returns USPS (small), UPS (large)

and FedEx (extra large) as the delivery carrier appropriately.

70. Submit a second extra large order and this time Reject the order approval.

Verify that Fulfillment is not called.

71. Submit an order with an invalid credit card (ccNumber: 4321-4321-4321-421)

and verify that Fulfillment is not called.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 8.9 Adding Fulfillment 8-17

8.9 Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Add a BPEL Process and a Business Rule

BPEL Name: FulfillmentProcess

Template: Asynchronous BPEL Process

Service Name: fulfillmentprocess _client

Expose as a SOAP Service: Unchecked

Input: ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/s

chemas/fulfillment.xsd > Fulfillment

Output: CarrierSelection

Rule Name: FulfillmentRules

Package: fulfillmentrules

Input: Fulfillment

Output: CarrierSelection

Advanced tab>Service Name: OracleRulesFulfillment

Wire: FulfillmentProcess to FulfillmentRules

Wire ApproveLargeOrder to FulfillmentProcess

Define the Business Rule

Bucketset: List of Ranges

Name: OrderTotal

Data Type: double.

Endpoint: 5000: Alias: xtralarge

Endpoint: 1000: Alias: large

Endpoint: -Infinity: Alias: small

Facts: FulfillmentType > Bucketset: total to OrderTotal

Ruleset_1: DecisionTable_1: Condition: FulfillmentType.total

R1: small, R2: large, R3: xtralarge

Actions > Assert New: CarrierSelection

Checkboxes: Parameterized, Always Selected

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

8-18 Adding Fulfillment Section 8.9

Values: small=USPS, large=UPS, xtralarge=FED_EX

Define the BPEL Process

FulfillmentProcess: Business Rule: FulfillmentRule, FulfillmentRules

- Input fact: inputvariable>Fulfillement to Fulfillment

- Output fact: outputvariable>CarrierSelection to CarrierSelection

Invoke FulfillmentProcess

BPEL: ApproveLargeOrder

Drag Invoke: into switch branch for valid credit cards

Wire Invoke: to FulfillmentProcess

Name Invoke_Fulfillment

Input variable: defaulted

Transform before Invoke: inputvariable to

Invoke_Fulfillment_process_InputVariable

Wire: customer id and order id values

Multiply: price*quantity wired to total

Switch: Switch_Fulfillment below Invoke_Fulfillemnt

Case expression: outputVariable>status = 'approved'

Case: add Sequence, move Transform and Invoke

Otherwise: delete branch

Mediator. routePO

static routing rule > Service: FulfillmentProcess > fulfillmentprocess_client >

process

Filter: orders < 1000

Transform: PurchaseOrder_To_Fulfillment.xsl

The application is completed. Continue with Section 8.7 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 9.1 Adding JMS to Fulfillment 9-1

9 Adding JMS to Fulfillment

9.1 Introduction .................................................................................................................................................... 1 9.2 Designing the flow ......................................................................................................................................... 2 9.3 Add the JMS adapters ................................................................................................................................... 2 9.4 Invoke the services from BPEL .................................................................................................................... 8 9.5 Deploying the application ...........................................................................................................................11 9.6 Testing the application .................................................................................................................................11 9.7 Operations and naming ...............................................................................................................................12

9.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch9-JMSAdapter.

To run this solution, you must first complete Chapter 1 to set up the application.

In this chapter you will send the fulfillment information to a JMS queue at the end of

the fulfillment process. The delivery carrier was determined in Chapter 8 and you

send a message to a queue depending on the carrier. To make this easier to test,

however, just use the same queue configuration for all three carriers. When finished,

the composite will look like this:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

9-2 Adding JMS to Fulfillment Section 9.2

9.2 Designing the flow The way we left the fulfillment process in the last chapter was that it determined the

carrier to be used, but it didn’t do anything with that decision. In this exercise, we’ll

add the action: updating a JMS queue. To add the JMS messaging, we’ll add the

three JMS services for USPS, UPS, and FedEx and then invoke the appropriate service

from the BPEL process.

9.3 Add the JMS adapters If you didn’t do it at the outset of the lab exercises, you’ll first need to set up the JMS

queue using the WebLogic console. You have to create a JMS destination queue, a

JMS connection factory and also a JMS connection pool. Follow instructions in

Chapter 1 if you haven’t already done so.

Next, you’ll add a JMS adapter for each carrier. If you have your server running, the

adapter wizard will be able to lookup the JMS destination queue.

1. In JDeveloper, open the POProcessing composite.xml.

2. Drag a JMS Adapter to the External References section of the composite.

3. Click Next to advance the wizard. Then, name the service: JMS_USPS

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 9.3 Adding JMS to Fulfillment 9-3

4. Click Next

5. Select the OEMS service Oracle Weblogic JMS

6. Click Next

7. Select the Service Connection

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

9-4 Adding JMS to Fulfillment Section 9.3

8. Click Next

9. For the Adapter Interface, select the radio button for defining this later.

10. Click Next

11. For the Operation, select Produce Message

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 9.3 Adding JMS to Fulfillment 9-5

12. Click Next

13. For the Produce Operation Parameters, click Browse to lookup the JMS

destination queue and select demoFulfillmentQueue.

14. Click OK

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

9-6 Adding JMS to Fulfillment Section 9.3

15. Enter the JNDI name associated with the JMS Adapter: eis/Queue/demo

16. Click Next

17. For the message schema, use the magnifying glass to browse to fulfillment.xsd

and select the Fulfillment element.

18. Click Next and then click Finish. The JMS_USPS external reference is added to

your composite.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 9.3 Adding JMS to Fulfillment 9-7

The first adapter service is complete.

19. Repeat the steps you just used for JMS_USPS to create two more services,

JMS_UPS and JMS_FedEx. You’ll end up with a total of three JMS-related

external references displaying in your composite.

20. From FulfillmentProcess BPEL component, drag a wire to each of the three JMS

services.

21. Save All your work.

These services represent the three carriers and the message that is sent is the order

information for fulfillment.

As mentioned earlier, normally the three carriers would all have individual

destination queues. However, for easier testing, just use one queue for all of them.

Your composite now looks like this:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

9-8 Adding JMS to Fulfillment Section 9.4

9.4 Invoke the services from BPEL Next, we’ll go into the BPEL process and see that we invoke the three services

according to the value of carrier returned from the decision service.

22. Open the FulfillmentProcess BPEL process and drag a Switch activity below the

BusinessRule_1 activity.

23. Expand the Switch and use the Add Switch Case icon (shown below) to add

two more case branches:

24. Double-click on the first <case> bar and set the Name to USPS.

25. Select the Expression Builder icon to set the condition expression for the first

case. Using the Insert Into Expression button, build the expression as follows

bpws:getVariableData('outputVariable','payload','/ns2:CarrierSelection/ns2:carrier') =

'USPS'

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 9.4 Adding JMS to Fulfillment 9-9

26. Click OK. Repeat for the next two cases, setting the condition for ‘UPS’ and

‘FedEx’ respectively.

27. Drag an Invoke activity into the first case for USPS. Drag a wire from the

Invoke to the JMS_USPS partner link. The Invoke dialog opens.

28. Set the Name to Invoke_USPS and use the green plus sign icon to create the

input variable using the default values. Click OK.

29. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

9-10 Adding JMS to Fulfillment Section 9.4

30. Repeat the above steps to add invokes for UPS and FedEx.

Now, you need to assign data to the input variables for the three service

invokes.

31. Drag an Assign activity into the first case just before the Invoke_USPS.

32. Open the Assign and create a copy operation to copy the fulfillment data to the

input variable for the USPS service.

33. Click OK twice.

34. Repeat the same steps for the remaining two services (UPS and FedEx).

The final path, the otherwise branch, can be handled in one of two ways. You could

choose to do something at this point such as raise a fault. That would be

appropriate if, in the future, there is a fourth carrier setting returned from the rule

and you wanted to be sure to flag it so that code could be added to handle it.

Instead, for now, just do nothing. You can either remove the otherwise block or put

an Empty activity along this branch.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section 9.5 Adding JMS to Fulfillment 9-11

35. Remove the otherwise branch to do nothing in the otherwise part of the switch.

36. Save All your work.

And that completes the JMS addition to the fulfillment process. Give it a try.

9.5 Deploying the application Deploy the POProcessing in the same way as before using the Deploy command on

the Project Menu. Remember to elect to overwrite any previous version. Read

Appendix A Deploying and Running a Composite Application to refresh your

memory on how to deploy if you need to.

9.6 Testing the application Again, use the flow view in the EM console to see that everything is working

correctly.

1. Open Enterprise Manager (EM) console and click POProcessing. Click Test.

2. Using the input files you will find in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/inpu

t, run three tests, one each with small, large and extra large orders.

3. View the instance data using EM console. For the extra large order, you have to

submit the approval task to complete the process.

4. By using Launch Message Flow Trace, verify that the FulfillmentRules returns

USPS, UPS and FedEx as the delivery carrier appropriately.

Verify the JMS message is sent appropriately by viewing the instance flow details

and by using the WLS Console (use the Admin Console bookmark)

1. Open Services/Messaging/JMS Modules/SOAJMSModule

2. Click demoFulfillmentQueue/Monitoring

3. Select checkbox for SOAJMSModule!demoFulfillmentQueue

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

9-12 Adding JMS to Fulfillment Section 9.7

4. Click Show Messages to view the messages waiting in the queue.

9.7 Operations and naming This section gives you all of the operations and names for objects created in this

chapter. Experienced users can use this for creating the objects in this chapter

quickly. Any questions on details for a particular operation listed here can be found

in the preceding sections. The information is divided by the sections in this

document.

Add the JMS adapters

In composite: JMS Adapter: JMS_USPS

OEMS service Oracle Weblogic JMS

Service Connection: MyApplicationServer

Define this Adapter Interface later

Operation: Produce Message,

Produce Operation Parameters: demoFulfillmentQueue.

JNDI name: eis/Queue/demo

Message schema: fulfillment.xsd > Fulfillment

Repeat for: JMS_UPS and JMS_FedEx, wire all from FulfillmentProcess

Invoke the services from BPEL

FulfillmentProcess BPEL process > Switch below the Business Rule

Expand the Switch and add two more switch cases.

Double-click on the <case> bar and set Name: USPS

Expression:

bpws:getVariableData('outputVariable','payload','/ns2:CarrierSelection/ns2:carrier'

) = 'USPS'

Repeat for the next two cases, setting the condition for ‘UPS’ and ‘FedEx’

respectively.

Invoke: Invoke_USPS inside case block, wire to the JMS_USPS

Input variable: defaulted

Repeat for UPS and FedEx.

Assign: Assign_USPS just before Invoke_USPS.

Copy From: inputvariable > fulfillment ,

Copy to: Invoke_USPS_Produce_Message_InputVariable.

Repeat for UPS and FedEx.

The application is completed. Continue with Section 9.5 above to deploy and test

your application.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.1 Deploying and Running applications A-1

A Deploying and Running applications

A Deploying and Running applications ...................................................................................................... 1 A.1 Introduction ........................................................................................................................................ 1 A.2 Start the Oracle WebLogic Server .................................................................................................... 1 A.3 Create a Connection to Oracle WebLogic Server .......................................................................... 2 A.4 Deploying Composites to the Application Server ......................................................................... 5 A.5 Deploying Human Task form to the Application Server ............................................................. 8 A.6 Running and testing the application with EM ............................................................................... 9 A.7 Getting the service description (WSDL) ........................................................................................13

A.1 Introduction A SOA composite application first has to be deployed to an application server

container and then run from there. A Human Task form project is not a SOA

Composite and has different deployment steps. You will find the details in the

following sections.

A.2 Start the Oracle WebLogic Server You need to start both the admin server and the SOA managed server.

1. Open the Start/Stop Weblogic Server(s) icon on the desktop. The Server Control

window appears.

2. Select the Start radio button as the action and click the OK button. The Start WLS

Servers window appears.

3. Toggle on the checkbox beside SOA and click the OK button. The Starting Servers

window appears and gives you feedback as first, the admin server is started and

then, the SOA managed server is brought to life. Wait until “OK” appears in the

window to let you know that startup is complete.

4. Close the Starting Servers pop-up window. Then, close the Checking Server Status

pop-up window.

Once the servers are up, you can use these links to control your environment:

The link for the WebLogic console is

http://localhost:7001/console (login with weblogic/welcome1) The link for the EM console is

http://localhost:7001/em (login with weblogic/welcome1)

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-2 Deploying and Running applications Section A.3

The link for SOA worklist app http://localhost:7001/integration/worklistapp When you want to stop your servers, complete the following.

1. Open the Start/Stop Weblogic Server(s) icon on the desktop. The Server Control

window appears.

2. Select the Stop radio button as the action and click the OK button. The Stop WLS

Servers window appears.

3. Toggle on the checkbox beside SOA and click the OK button. The Stopping

Servers window appears and gives you feedback as first, the admin server and

SOA managed server are stopped. Close all pop-up windows.

A.3 Create a Connection to Oracle WebLogic Server You need to create a connection from JDeveloper to the Oracle WebLogic Server

configured for Oracle SOA Suite in order to deploy from JDeveloper.

From the Application Menu, select New.

In the New Gallery, in the Categories tree, select General, and then

Connections.

Select Application Server Connection

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.3 Deploying and Running applications A-3

Click OK.

The Create Application Server Connection Type page is displayed.

Enter MyAppServerConnection in the Connection Name field and select

WebLogic 10.3 from the Connection Type list.

Click Next.

The Connection Authentication page is displayed.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-4 Deploying and Running applications Section A.3

Enter weblogic for the User Name and and welcome1 in the for Password.

Click Next. The Configuration page displays.

Enter the following values:

Weblogic Hostname (Administration Server): localhost

Port: 7001

WLS Domain: domain1

Click Next. The Test page displays.

Click Test Connection.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.4 Deploying and Running applications A-5

The following status should appear:

If the test is unsuccessful, ensure that Oracle WebLogic Server status is

RUNNING, and retry the test.

Click Next, and in the Finish page, click Finish.

A.4 Deploying Composites to the Application Server After you have created your own composite, you can deploy it to the server. See the

next section to deploy a Human Task form project which has a different procedure.

The Deploy command rebuilds the app and writes the binary to disk. It also brings

up the deployment plan dialog before deploying. When the server is stopped and

restarted, the applications will remain deployed.

1. In the project menu – right-click on the project name - select Deploy and follow

the menu to select MyAppServerConnection. Make sure you have the project

menu and not the application menu in order to see this option.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-6 Deploying and Running applications Section A.4

2. Check for this error.

It means your SOA managed server is not running. If you think both the

Admin Server and the SOA Servers are running, restart JDeveloper and stop the

servers and restart them in the right order (start first the Admin Server and

then the SOA Server).

3. SOA Deployment Configuration Dialog opens. If you are redeploying your

application, you must either select the checkbox to overwrite the previous

version or you can enter a new version. Otherwise the deployment will fail.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.4 Deploying and Running applications A-7

4. Click OK.

5. If this is the first time you are deploying since server startup or if the connection

has timed out, you are prompted for the admin user name (weblogic) and

password (welcome1):

6. Enter the values and click OK

Next the application is built and deployed. If there are no compilation errors, you

will see on the SOA log, BUILD SUCCESSFUL and then the deployment starts.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-8 Deploying and Running applications Section A.5

In the Deployment log, view the details of the deployment.

Wait for your application to be deployed and then you can run and test it.

A.5 Deploying Human Task form to the Application Server If you want to deploy an application that is not a SOA composite to the

application server, you can do that from JDeveloper too. The deployment steps

are slightly different.

The Human Task form is a Java application that is separate from the composite.

You must follow these instructions to deploy the form.

1. In JDeveloper, open the Application Menu not the Project menu. Do not right-

click on the project. You can find the Application menu in the toolbar or you can

right-click on the application name to bring up the menu or you can click the

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.6 Deploying and Running applications A-9

drop-down menu icon to the right of the application name to open the

application menu. You will see your Human Task application listed in the menu

(see image).

2. Select the Human Task application and then select the application server

connection.

3. Watch the Deployment log and wait for the application to finish deploying.

A.6 Running and testing the application with EM Often you'll have an application or some GUI-based front end to invoke your

service so you can test it. But usually you will start developing your services first

and won't have an application to test them with. The Oracle Enterprise Manager

console allows you to run your service with any input so you can test it anytime.

1. Open your browser and navigate to EM.

http://localhost:7001/em

(The first time these screens are run after starting the server they will be slow as

the page is unpacked, compiled, and loaded into memory.)

Login with weblogic/welcome1

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-10 Deploying and Running applications Section A.6

The Enterprise Manager opens to the “farm” view, containing all of the managed

servers managed by this Admin Server. You can see the status of your SOA

Server as well as the deployed Java applications and SOA composites.

In this view, you can see the BAM managed server has not been started. The

SOA composites are listed in two places.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.6 Deploying and Running applications A-11

2. Select your composite from the list of composites on the main farm view or on

the left navigation bar. The composite page opens.

On this page, you can see the Recent Instances (none yet), Faults, the

Component Metrics (there is only one component in this composite), and the

Services and References Metrics.

3. Click Test button at the top of the screen. The Test page opens.

You can see the WSDL location, Operations list, and two tabs, Request and

Response.

Scroll down to the Input Arguments section.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-12 Deploying and Running applications Section A.6

4. Specify your values for the payload. You can use the HTML form on the Tree

View, which is default, or the XML source on the XML View. For smaller

amounts of the data, using the HTML form view is probably easier. But for large

payloads, it's easier to copy-and-paste your data into the XML View.

5. Enter the data and click Test Web Service.

When the composite completes, the screen changes to the Response tab and the

returned value shown. From here, you can jump directly to this particular

composite instance and view the flow.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section A.7 Deploying and Running applications A-13

6. Click Launch Message Flow Trace

The Flow Trace screen opens and you can see the flow of your composite and the

status of each service, component and reference.

7. Click on the component to drill down into the Instance Details of the component

Close the Flow Trace window, click on your composite to return to the composite

page. You can see your Instance ID listed. You can return to the Flow Trace screen

by selecting the Instance ID.

A.7 Getting the service description (WSDL) You can get the service description, or WSDL, of your composite from the Test page.

This is useful because you may need it for applications to access your service, or to

expose your service to others.

1. Open the Test page for the composite you are interested in. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

A-14 Deploying and Running applications Section A.7

2. In the Test page you see the WSDL location. You also can see the Endpoint URL

for each of the Operations defined in the WSDL.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section B.1 Managing the lifecycle of a SOA composite application B-1

B Managing the lifecycle of a SOA composite application

B.1 Introduction to SOA lifecycle

This lab exercise will give you a brief introduction to various techniques that can be

used to manage the lifecycle of SOA composite applications.

Oracle SOA Suite provides multiple facilities to help in this area:

Variety of deployment methods:

o JDeveloper, the development environment

o Enterprise Manager, the management & monitoring environment

o Command line, in an interactive fashion

o ANT or Python scripts

Ability to simultaneously deploy multiple versions of a given composite,

and specify a default version

Configuration plans to customize environment-specific values (ex: a web

service URL that is different in the test environment than in the production

environment)

Built-in support in JDeveloper for version control systems such as

Subversion.

B.2 Lab overview In this lab you will create a configuration plan which surfaces a property that can

take on different values. This simulates the process of deploying with different

values to your different environments: Development, Test and Production. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

B-2 Managing the lifecycle of a SOA composite application Section B.3

B.3 DEVELOPMENT environment

B.3.1 Surfacing binding properties at the composite level

1. In JDeveloper, open your previously completed POProcessing composite (or the prebuilt solution for chapter 9).

2. Open composite.xml

3. Select the WriteApprovalResult external reference.

4. View the properties using the Property Inspector in the lower-right pane. You may need to enlarge or scroll the pane to see all of the sections. If you do not see the Property Inspector, select it from the View menu in the toolbar.

5. Using the Property Inspector, we are going to add a binding property. Scroll to the Binding Properties section and select the Add icon (green plus sign).

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section B.3 Managing the lifecycle of a SOA composite application B-3

6. Select FileNamingConvention from the drop-down menu for the property Name and enter test_%SEQ%.xml for the Value.

7. Click OK.

8. Check the source (click Source tab) of composite.xml to see that you have surfaced a binding property in composite.xml.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

B-4 Managing the lifecycle of a SOA composite application Section B.3

9. Save All

B.3.2 Generating and validating a deployment plan

10. From the Projects Explorer, select composite.xml

11. Right-click on composite.xml and choose Generate Config Plan

12. Name your plan POProcessing_dev_cfgplan.xml

13. Click OK. The plan should automatically open in text mode in JDeveloper.

14. Locate the reference for WriteApprovalResults and edit the FileNamingConvention property to orderoutput_%SEQ%.xml

15. In addition, in the wsdlAndSchema section, add the PhysicalDirectory jca property. This is the directory that you configured for the file adapter to write to. Enter another directory, for instance: “/home/oracle/tmp/out”.

Note that you can restrict the scope of this global replace to a single file by only

leaving WriteApprovalResults_file.jca in the list of files to consider for this search &

replace.

Now it is time to validate your new config plan to ensure it works as expected:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section B.3 Managing the lifecycle of a SOA composite application B-5

16. Save All.

17. Right-click on composite.xml

18. Select Validate Config Plan

19. Select OK in the Composite Configuration Plan Validator dialog.

20. The report.log opens automatically. You should see the following:

21. Finally, deploy from JDeveloper and attach this deployment. Give this new deployment a different revision ID like 2.0. See that your configuration plan is automatically selected, at the right side of the window, for use:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

B-6 Managing the lifecycle of a SOA composite application Section B.4

22. Click OK to start deployment.

23. Use Enterprise Manager to test your application to ensure that the file adapter now writes all message to /home/oracle/tmp/out with a name orderoutput_<number>.xml.

B.4 TEST environment

B.4.1 Compiling and packaging from the command-line with ANT Administrators typically do not want to work with IDEs and prefer to operate from

the command line or with scripts. Let’s take the role of an administrator in this

section and exclusively work from the command line.

24. First, open a terminal window (on the desktop:

Applications/Accessories/Terminal) and set your environment for command

line deployment via ANT.

export PATH=/home/oracle/Middleware/modules/org.apache.ant_1.7.0/bin:$PATH

export JAVA_HOME=/home/oracle/Middleware/jdk160_11

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section B.4 Managing the lifecycle of a SOA composite application B-7

25. Navigate to the following directory

cd /home/oracle/JDevHome/jdeveloper/bin

26. Look at the available ANT commands and explore ANT help:

ls ant-sca*

ant-sca-compile.xml ant-sca-deploy.xml ant-sca-mgmt.xml

ant-sca-package.xml ant-sca-test.xml ant-sca-upgrade.xml

Use ant –f <command> help (like ant –f ant-sca-package help) to get usage information for a given command.

27. Compile and package POProcessing using the ant-sca-package command.

This command also sets the version number.

ant -f ant-sca-package.xml

-DcompositeDir=/home/oracle/jdeveloper/mywork/POProcessing/POProcessing

-DcompositeName=POProcessing

-Drevision=6-cmdline

-Dscac.application.home=/home/oracle/jdeveloper/mywork/POProcessing

If successful you should see a “BUILD SUCCESSFUL” message.

28. Check for the [jar] message that will tell you where the script is writing the

resulting SAR file. We’ll need this in the next step.

[jar] Building jar:

/home/oracle/jdeveloper/mywork/POProcessing/POProcessing/deploy/sca_POProcessing_rev6-

cmdline.jar

B.4.2 Deploying from the command line with ANT Now, we’ll deploy this SAR file from the command-line using ant-sca-deploy.xml.

29. Use ant-sca-deploy.xml to deploy the previously packaged SAR file:

ant -f ant-sca-deploy.xml

-DserverURL=http://localhost:7001

-

DsarLocation=/home/oracle/jdeveloper/mywork/POProcessing/POProcessing/deploy/s

ca_POProcessing_rev6-cmdline.jar

-Doverwrite=true

-Duser=weblogic

-Dpassword=welcome1

-DforceDefault=true

-

Dconfigplan=/home/oracle/jdeveloper/mywork/POProcessing/POProcessing/POProcess

ing_dev_cfgplan.xml

Watch the feedback and look for the “Deploying composite success” message.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

B-8 Managing the lifecycle of a SOA composite application Section B.5

B.5 PRODUCTION environment

B.5.1 Deploying from Enterprise Manager In this section we will explore the deploy options from Enterprise Manager.

In Enterprise Manager, right-click on soa-infra and select the SOA Deployment / Deploy

option:

Point Enterprise Manager to your local SAR file and configuration plan. The local

SAR file is at: /home/oracle/jdeveloper/mywork/POProcessing/POProcessing/deploy/sca_POProcessing_rev6-cmdline.jar

The configuration plan is at: =/home/oracle/jdeveloper/mywork/POProcessing/POProcessing/POProcessing_dev_cfgplan.xml

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section B.5 Managing the lifecycle of a SOA composite application B-9

Click Next to proceed.

Click Next again to accept the default target for deployment.

An error message appears indicating that the SAR file is already deployed and that it

needs to be undeployed before it can be deployed. Just click OK. You can use the

Enterprise Manager to undeploy the application (right-click on soa-infra and select

the SOA Deployment / Undeploy option ) and then retry deployment if you have time.

Otherwise, just move on. We trust you understand the spirit of this deployment

exercise using Enterprise Manager.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section C.1 Unit Testing C-1

C Unit Testing

C.1 Introduction................................................................................................................................................. 1 C.2 Designing the flow ..................................................................................................................................... 2 C.3 Create the Unit Test .................................................................................................................................... 2 C.4 Set the inbound message ........................................................................................................................... 3 C.5 Set the simulated message ......................................................................................................................... 5 C.6 Set the assertion for success ...................................................................................................................... 6 C.7 Set the assertion for failure ........................................................................................................................ 8 C.8 Deploying the application ........................................................................................................................10 C.9 Testing the application..............................................................................................................................10

C.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/apC-UnitTest

To run this solution, you must have completed labs through chapter 9. Alternatively

you can do the setup in chapter 1 and use the solution from chapter 9 located at ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutio

ns/ch9-JMSAdapter

The test framework supports testing at the SOA composite level. In this type of

testing, wires, binding component services, service components (such as BPEL

processes and mediator) and binding component references are tested.

In this chapter, you create a Unit Test for the POProcessing composite, including

1. An inbound message for receivePO.

2. A simulation of a callback message returned by a service

3. An assertion to verify the order status at completion

4. An assertion that will always fail for the input we provided in this test case

When completed, the unit test looks like this in JDeveloper:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

C-2 Unit Testing Section C.2

C.2 Designing the flow You will modify POProcessing to add a unit test that sets the inbound message, the

simulation message, and the two assertions. The inbound message will be a valid

order (valid credit card) with an order total between 1000 and 5000 so that it triggers

the approveLargeOrder process but not the human task (for convenience).

The simulated message is the return from the credit validation service returning the

correct value.

The first assertion is on the data being passed to the WriteFile service, checking that

the value of status = ‘approved’ which is the expected value for this input data.

The second assertion is on the data being passed to FulfillmentProcess, checking that

the customer id is 9999. Since the customer id is actually 1111, this test will always

fail. This last assertion shows what happens when the data being checked is not the

expected value.

C.3 Create the Unit Test 1. Open the POProcessing project in JDeveloper. In the Application Navigator

expand the SOA Content folder and right-click on testsuites folder.

2. Select Create Test Suite

3. Name the test suite logicTest

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section C.4 Unit Testing C-3

4. Click OK

5. Name the test TestDelivery

6. Click OK

Notice the composite view changes slightly to show you are in unit test creation

mode now. The swim lanes on the left and right are yellow. Notice that the tab

for this window displays the name: testDelivery.xml.

Note: You can view the normal composite editor by selecting the Return to SOA

composite diagram button at the top of the window.

C.4 Set the inbound message 7. First, we’ll create an inbound message for receivePO. Double-click the binding

component receivePO or right-click and select Create Initiate Messages

8. In the Initiate Messages dialog that appears, insert the following payload (copy

and paste from file) replacing the <xml-fragment/> text.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

C-4 Unit Testing Section C.4

File Name:

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/input/po-unittest.txt

Contents:

<PurchaseOrder xmlns="http://xmlns.oracle.com/ns/order">

<CustID>1111</CustID>

<ID>2222</ID>

<productName>TV-LCD</productName>

<itemType>electronics</itemType>

<price>1260</price>

<quantity>1</quantity>

<status>initial</status>

<ccType>Mastercard</ccType>

<ccNumber>8765-8765-8765-8765</ccNumber>

</PurchaseOrder>

This creates an order for Customer with ID=1111 and a $1260 purchase.

9. Click OK.

After closing the dialog, you will see a blue arrow on the inbound component

indicating there is a message set for that service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section C.5 Unit Testing C-5

C.5 Set the simulated message Now, simulate a callback message returned from an asynchronous web service.

10. Double-click the wire between BPEL process approveLargeOrder and the

getCreditCardStatus Web service.

11. On the Wire Actions window, go to the Emulates tab and click on the plus sign

to create an emulation:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

C-6 Unit Testing Section C.6

12. Click on Generate Sample to have a sample response automatically created for

you. Next, edit the XML fragment and change the response value to VALID, as if

the Web service would return a response that the credit card number is valid

13. Click OK to dismiss the Create Eumulate window and click OK again to close

the Wire Actions window. Notice that to wire between approveLargeOrder and

getCreditCardStatus becomes dashed and you see an arrow indicating that a

message emulation is in place.

C.6 Set the assertion for success 1. Now, perform an assertion to verify order status. Double-click on the wire

between routePO and WriteApprovalResults

2. In the Asserts tab, add an assertion by selecting the green plus sign.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section C.6 Unit Testing C-7

3. To check only part of the message, click on Browse button to select only one field

of the XML structure:

4. Select only the imp1:status

5. Click OK

6. For assert value enter approved in order to check the purchase order status.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

C-8 Unit Testing Section C.7

7. Click OK to dismiss the Create Assert window and click OK again to dismiss the

Wire Actions window.

C.7 Set the assertion for failure Now, you want to create an assertion that will always fail for the input we

provided in this test case.

8. Double-click the wire between approveLargeOrder and FulfillementProcess

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section C.7 Unit Testing C-9

9. In the Asserts tab, add a new assertion (green plus sign) and click again on

Browse to select only part of the message, and select only CustomerID

10. For Assert Value enter 9999. This assertion will fail because the initial payload

that we supply has customerId=1111.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

C-10 Unit Testing Section C.8

11. Click OK to dismiss the Create Assert window and click OK again to close the

Wire Actions window.

12. Save All your work.

The whole Test should look like this :

C.8 Deploying the application Deploy the application in the same way as before using the Deploy command on the

Project Menu. Read Appendix A Deploying and Running a Composite

Application to refresh your memory on how to deploy if you need to.

Since you already deployed POProcessing once before, you must either choose a new

version number or select Overwrite any existing composite when deploying. If you

do overwrite the previous composite, the existing instances for the version become

stale and can no longer be viewed.

C.9 Testing the application 1. After deploying, in the Enterprise Manager console, click on the POProcessing

application and then open the Unit Tests tab.

2. You see your testDelivery.xml test suite listed.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section C.9 Unit Testing C-11

3. Select the checkbox for TestDelivery.xml in the Select column and click Execute

4. For Test Run Name, enter: FirstRun. Then, click OK.

5. After the test has completed, you see that the overall status is marked as Failed:

6. Scroll down a little to see the details about the assertions we inserted

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

C-12 Unit Testing Section C.9

7. Note that the first one is Failed as expected because the CustomerID is 1111 and

not 9999

8. The second one is True as the status passed to ‚WriteApprovalResult‛ is approved

9. Click the Composite Instance ID in the last screen. You see the complete flow of

the process. Note that the ‚getCreditCardStatus‛ was never called, because of

the response Emulation you inserted.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.1 Fault Handling D-1

D Fault Handling

D.1 Introduction Note: The solution for this chapter can be found in: ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solu

tions/apD-FaultHandling

To run this solution, you must have completed labs in chapter 9. Alternatively

you can follow the setup in Chapter 1 and use the solution from Chapter 9

located at: ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solu

tions/ch9-JMSAdapter

This lab exercise will give you a brief introduction to handling exceptions in a

SOA composite.

Oracle SOA Suite provides sophisticated error handling capabilities that enable

you to define fault handling easily at various levels in a composite. It allows you

to handle both system-generated errors, called system faults, as well as

application-generated ones, called business faults.

The BPEL specification provides rich fault handling constructs for catching

exceptions and acting on them. The mediator, on the other hand, provides no

such capability. However, in BPEL, the code can get quite complex with fault

handling code duplicated for common exceptions.

Oracle SOA Suite provides a policy-based fault handling mechanism that allows

you to define how faults are handled. The policies can be bound to either the

composite as a whole or can also be associated with individual components.

In this lab you will implement very simple exception handling using both the

BPEL fault handling constructs as well as policy-based fault handling.

D.2 Handle Remote Faults In this lab, you will define a fault handling policy for processing a remote fault.

To generate, a fault you will make the getStatusByCC service unavailable and

test to see how the composite handles the exception. You will then add a fault

handling policy to handle the exception

D.2.1 Prerequisites This lab requires Enterprise Manager console to execute some of the steps. If

you just did the lab on unit testing, you’ll want to delete the test suite and

redeploy POProcessing. To delete the test suite, right-click on POProcessing /

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-2 Fault Handling Section D.2

SOA Content / testsuites / logicTest and select the Delete Test Suite option. Then,

redeploy POProcessing.

D.2.2 Test service unavailability 2. To simulate an unavailable service, shutdown the validationForCC composite.

To do that, navigate to the Application Server Navigator in JDeveloper

(ViewApplication Server Navigator, not Application Navigator).

3. Expand the SOA node under MyAppServerConnection and select

validationForCC

4. Right-click and select Turn Off

5. From the Enterprise Manager in the web browser invoke the POProcessing

composite (receivePO service operation) using the Test button on the

POProcessing page. Use the po-large-iPodx30.xml file from

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/schemas to

submit an order that is over $1000 so the credit card validation is called.

6. In Enterprise Manager, click on the new instance id of the POProcessing

composite and then click approveLargeOrder in the Flow Trace to view the details.

You should see that the composite has terminated with a remote fault with no

way to restart it if you were to make the getStatusByCC service operation

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.2 Fault Handling D-3

available.

D.2.3 Add policy-based fault handler to do manual recovery Add a fault handling policy to catch this exception and make it recoverable via

manual intervention.

1. Copy files fault-policies.xml and fault-bindings.xml from ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sche

mas to POProcessing directory (where the composite.xml for POProcessing is

located).

cd ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/schemas

cp fault-policies.xml ~/jdeveloper/mywork/POProcessing/POProcessing

cp fault-bindings.xml ~/jdeveloper/mywork/POProcessing/POProcessing

Click the Refresh button (blue arrows cycle icon at the top) in the Application

Navigator in JDeveloper to have the files show up in the list.

The fault-bindings.xml file has been created for you. It binds the POProcessing

composite with a fault policy called POProcessingFaults defined in the fault-

policies.xml file. The fault-policies.xml file is partially complete. You will add

fault handlers here as you step through this lab.

2. Open the fault-policies.xml file in JDeveloper and add the following to handle all

remote faults that occur in any component in the POProcessing composite under

the comment referencing the text ‚Step D.2.2.2”

<faultName xmlns:bpelx=”http://schemas.oracle.com/bpel/extension” name="bpelx:remoteFault"> <condition> <action ref="ora-human-intervention"/> </condition> </faultName>

3. Save All and deploy the POProcessing composite.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-4 Fault Handling Section D.2

4. Invoke the POProcessing composite using the web service tester (Test button) in

Enterprise Manager. Run through the p0-large-iPox30.txt transaction.

5. Select the instance id of the newly invoked POProcessing to view the flow trace:

In the flow trace window, click on approveLargeOrder and view the Audit Trail

tab. You will see that the activity has faulted as before, but this time, it is waiting

for a manual recovery. The circled icon indicates that the fault is recoverable:

6. Before you try recovery, start the validationForCC composite from the

Application Server Navigator in the JDeveloper as you did above. This time,

select Turn On to startup the composite. You can also do this from Enterprise

Manager by selecting the Start Up… button on the validationForCC page.

7. Back in the Audit Trail tabbed window, select the Faults tab.

8. Click on the row containing the fault. This will show the fault details including

the contents of the input variable to the invoke.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.2 Fault Handling D-5

9. Select Retry as the Recovery Action and click on the Recover button.

10. Select Yes when prompted if you want to continue.

11. You should see the fault clear up from the Faults tab. Click on the Audit Trail

tab to view the BPEL flow. You may need to refresh the window by clicking on

the cycle icon in the upper-right corner. You should see that the BPEL process

has completed execution successfully.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-6 Fault Handling Section D.2

D.2.4 Handle faults in BPEL BPEL provides comprehensive error handling constructs for catching exceptions

and handling them appropriately. You can choose to handle exceptions within

the process itself rather than using fault-handling framework.

For example, in the current implementation of validateForCC, while doing the

credit card validation, if a non-existing credit card number is passed to the

service, it just returns an empty response. If the service were to throw a specific

exception for such unknown credit card numbers, you would want to catch that

exception and set the status in the Order appropriately. This lab illustrates this

scenario.

You will modify the validateForCC composite to call a database store function

for validating credit cards starting with a specific number. This store function

throws a PL/SQL application exception with an error code of 20001 for credit

card numbers not in the database. In the BPEL process you will catch and handle

the fault.

Create the store function in the SOADEMO schema by running the SQL script

create_validate_cc.sql available in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sql

using the soademo user. In a Terminal window, enter these three commands: . /home/oracle/bin/oracle_xe_env.sh

cd ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sql

sqlplus soademo/soademo @create_validate_cc.sql

You’ll see the output: ‚Function created.‛ Type Exit to leave the SQL> prompt.

1. Open the validateForCC composite and drop a Database Adapter to the External

References swim lane. Step through the wizard to create the reference to the

store function just created using the following values.

Service Name validateCC

JNDI Name eis/DB/soademoDatabase

Operation Type Call a Stored Procedure or Function

Procedure Browse and select VALIDATECC

2. Finish the wizard by accepting the defaults.

3. On the composite, wire the RouteRequest mediator component to validateCC

4. Open the RouteRequest mediator and add a filter expression for

getCreditValidationSelect to route all requests for credit card numbers that

don’t start with 2.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.2 Fault Handling D-7

5. Add a filter expression (very similar to the above) for validateCC to route only

those requests that have credit card numbers starting with 2 to the database

stored function.

6. Create a new transformation for the validateCC route, mapping CCNumber to

db:CC_NUMBER. You don’t need a transformation for the reply because this

service only raises a fault, it doesn’t reply.

7. Save All and deploy the validationForCC composite. Elect to overwrite any

existing deployment.

8. Test validationForCC using web service tester in the Enterprise Manager. Use

credit card number: 1234-1234-1234-1234. You should see a value for reply in the

response of VALID.

9. Try the test again, except this time change the credit card number to 2234-1234-

1234-1234. You should see an error – ORA-20001 UNKNOWN CREDIT CARD

Now, we’ll update the BPEL process to catch the fault.

10. Open the POProcessing composite in JDeveloper.

11. Open the approveLargeOrder BPEL process.

12. Add a new Scope activity right above the invokeCCStatusService activity.

Rename it to checkCC.

13. Expand the checkCC scope and move the invokeCCStatusService activity into

the scope.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-8 Fault Handling Section D.2

14. Click on Add Catch Branch icon to add a catch branch and click on + to expand

it:

15. Double click on the Catch (red diamond) and enter the Fault details. For

Namespace URI and Local Part click on the browse icon and select System

Faults bindingFault. Auto create the fault variable (green plus sign icon) and

accept the default name, FaultVar.

16. Click OK to close the Catch dialog. The catch icon is now labeled

‚bpelx:bindingFault.‛

17. Drop a Switch activity into the catch block. Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.2 Fault Handling D-9

18. Expand the switch (+ sign). Open the expression editor for the <case> branch

and build an expression checking for code in FaultVar for ‘20001’.

19. Add an assign activity called Assign_UNKNOWNCC in the <case> branch to

assign the literal string ‘UNKNOWN CC’ to the variable

invokeCCStatusService_execute_OutputVariablereplycreditcardStatus.

20. In the <otherwise> branch, drop a Throw activity. Open the Throw activity and

name it Throw_Binding_Fault. For Namespace URL and Local Part, use the

browse tool to select System FaultsbindingFault. For the fault variable use

the browse tool and select the FaultVar fault variable created earlier.

21. The new updated flow should look like this:

22. Save All.

23. The fault-handling framework takes precedence over the BPEL catch so you need

to have the fault-handling framework re-throw the fault so that BPEL can

process it. Add the following in the fault-policies.xml after the comment with

text ‚Step D.2.4.20”

<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:bindingFault"> <condition>

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-10 Fault Handling Section D.2

<!-- Let the component handle this specific binding fault --> <test>$fault.code="20001"</test> <action ref="ora-rethrow-fault"/> </condition> </faultName>

24. Save All.

25. Deploy and test the POProcessing composite. Overwrite any existing

deployment. Use the po-large-iPodx30.xml from

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/input. But

change the credit card number to start with 2. In the flow trace, you should see

the fault being re-thrown from the fault handling framework and being caught

and processed in the BPEL process.

D.2.5 Using A Custom Java Fault Handler

In addition to some of the pre-defined actions like humanIntervention,

rethrowFault and abort, you can also define your own custom fault handler

using Java.

In this exercise, you will change the policy for bindingFault and, instead of re-

throwing the fault, you will use a custom Java class to handle it.

1. Install the custom Java handler by copying the provided myfaulthandler.jar

available in

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.2 Fault Handling D-11

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/lib to

the lib directory of your WebLogic Server domain home. That directory is:

/home/oracle/Middleware/user_projects/domains/domain1/lib.

cp ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/lib/

myfaulthandler.jar

/home/oracle/Middleware/user_projects/domains/domain1/lib

The JDeveloper project for this JAR is available in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solu

tions/apD-Fault-handling/MyFaultHandlerApp

2. Restart the managed server by using the Start/Stop Weblogic Server(s) control

on the desktop.

3. Modify the fault-policies.xml and change the bindingFault handling

from:

<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:bindingFault"> <condition> <!-- Let the component handle this specific binding fault --> <test>$fault.code="20001"</test> <action ref="ora-rethrow-fault"/> </condition> </faultName>

to:

<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:bindingFault"> <condition> <!-- Let the component handle this specific binding fault --> <test>$fault.code="20001"</test> <action ref="my-java-handler"/> </condition> </faultName>

4. Modify the fault-policies.xml and change the logFileDir property

from:

to:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-12 Fault Handling Section D.2

5. Ensure that the directory /home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutor

ial/po/log directory exists. This is where the Java fault handler will write its

messages.

6. Save your fault-policies.xml changes. Deploy the POProcessing composite and

test using the po-large-iPodx30.xml input with the credit card number

changed to start with 2. You should see myfaulthandler.log in /home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutor

ial/po/log directory. You should also see, by looking at the flow trace in

Enterprise Manager, that the POProcessing composite handles the fault. You’ll

see a ‚FAULT RECOVERY‛ by MyFaultHandler.

D.2.6 Handle Mediator Faults Since the Mediator doesn’t provide any built-in fault handling mechanism, the

policy-based fault handler is the only way to catch and handle exceptions

occurring in the Mediator. A variety of exceptions can be caught ranging from

adapter exceptions to transformation exceptions.

In this exercise, you will define a fault handler for catching all Mediator faults

and use the custom Java handler to write to a log file. To force the Mediator to

fault, we will simulate a disk write error and have the File adapter throw an

exception.

1. Modify fault-policies.xml file and add the following after the comment

containing the text ‚Step D.2.6.1”:

<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault"> <condition> <action ref="my-mediator-fault-handler"/> </condition> </faultName>

2. Add the following after the comment starting with Step D.2.6.2. This defines a

java action using the same custom java class that you used in the earlier exercise

but uses a different set of properties and also defines a different action to be

performed on return from the custom Java call

<Action id="my-mediator-fault-handler"> <javaAction className="soatraining.faulthandling.MyFaultHandler" defaultAction="ora-terminate" propertySet="myMediatorProps"> <returnValue value="OK" ref="ora-human-intervention"/> </javaAction> </Action>

3. Add the following after the comment starting with Step D.2.6.3. This defines the

property set that is to be used by the new JavaAction.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section D.2 Fault Handling D-13

4. Save All.

5. Open the routePO mediator component and change the route for the filter

‚quantity < 1000‛ to Parallel from Sequential.

6. Select Yes when prompted

7. You should see this change when you the rule has been moved to the end:

Without this change, the fault policy handler will not get control when a fault

occurs in the Mediator. This is because sequential routes are executed in the

same thread and transaction context as the caller of the mediator service. If a

fault occurs while executing a sequential route, it is thrown back to the caller and

the fault handler is bypassed. Otherwise, it could potentially break the

transaction. In the case of a parallel route, a new thread and new transaction

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

D-14 Fault Handling Section D.2

context is created by the Mediator. It is within this thread that the route is

executed. If a fault occurs while executing a parallel route and a matching fault

policy exists, the appropriate fault handler is executed.

8. Save All.

9. Deploy the POProcessing composite again electing to overwrite existing

components.

10. Change the permission of the directory /home/oracle/tmp to read only. This

will force an error when the file adapter is writing the purchase order file.

Open a Terminal window and enter: chmod –w /home/oracle/tmp

to make the directory read only

Note: You may also need to change the permissions on

/home/oracle/tmp/out if your file adapter is still writing there

based upon a previous exercise.

11. Test the POProcessing composite using the po-small-Headsetx1.xml. The

process will try to write the approval to the ~/tmp directory and fail. You

should see a file mediator-faults.log in the ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/log

directory. The flow trace in Enterprise Manager should show the composite

waiting for manual recovery.

12. Try submitting the po-large-iPodx30.txt. Did the fault handler execute?

Refer to D.2.6.6 for explanation of this behavior.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section E.1 Enforcing Policies E-1

E Enforcing Policies

E Enforcing Policies ................................................................................................................... 1 E.1 Introduction ..................................................................................................................... 1 E.2 Policy attachment in console ......................................................................................... 1 E.3 A quick look at policy management ............................................................................. 3 E.4 Policy attachment in JDeveloper ................................................................................... 3

E.1 Introduction In this section you will experience a simple demonstration of web

services policy enforcement. You will learn:

How to attach a policy

How to secure invocation of a composite using web services

security user name token (userid/password)

How to propagate identity across a multi-component composite

to an invoked service using SAML

Communicate signed and encrypted messages

The composite to be secured with a user name token is the composite

POProcessing. The composite to be secured with SAML, encryption and

signing is the validationForCC composite.

E.2 Policy attachment in console Web services policies can be attached in JDeveloper and deployed or

they can be attached in the Enterprise Manager (EM) console after

deployment. In this section, you will use the console.

1. Go to the EM console and log in.

2. Click on POProcessing composite link in the left panel.

3. Click on the Policies tab. No policies are currently attached.

4. Select receivePO in the Attach To/Detach From drop-down list.

5. Select oracle/wss_username_token_service_policy at the bottom of

the Available Policies list. Click the Attach button above and the

policy is added to the Attached Policies panel. Then, click OK. The

original window redisplays and your policy now appears attached.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

E-2 Enforcing Policies Section E.2

Figure 3 Attaching a policy

6. Using the same steps as above, attach the policy

oracle/wss11_saml_token_with_message_protection_client_policy

to the attach point getCrediCardStatus.

7. Similarly, attach the policy

oracle/wss11_saml_token_with_message_protection_service_policy

to the attach point getStatusByCC in the validationForCC

composite.

8. Test POProcessing. Use po-large-iPodx30.txt as your test input. Be

sure to select WSS Username Token on the Request tab’s Security

section and specify the userid/password of weblogic/welcome1. Check

the message flow trace to see how execution proceeded.

9. Retest, but this time, specify an invalid password. What error do you

see? You should see a “FailedAuthentication” error.

10. Test validationForCC. Use 1234-1234-1234-1234 for CCNumber. Do

NOT specify any WSS Username Token. What error do you see?

Perhaps you saw a “Webservice Invocation failed” error.

11. Now, repeat the same steps you used to attach the policies.

However, this time, detach (Detach button) all the policies. We need

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section E.3 Enforcing Policies E-3

to do this since other labs assume POProcessing is not secured. This

will “reset” our composites so further labs will work well.

E.3 A quick look at policy management In the EM console, select Weblogic Domain in the left-hand panel to expand the

hierarchy. Then, right-click on domain1 in the left-hand panel. Select Web Services and

then Policies. Look at all the policies being managed.

E.4 Policy attachment in JDeveloper To attach policies in JDeveloper, right-click on services, references and components in the

composite view (composite.xml) and choose to Configure WS Policies. Try and repeat

the exercise you did in the console, but this time, using JDeveloper. As noted above, you

will need to detach any policies before moving on to the next labs as the subsequent labs

assume that policies are not to be attached.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section F.1 Handling Business Events using EDN F-1

F. Handling Business Events using EDN

F.1. Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/

SOA11gFoundationTutorial/po/solutions/apF-EDN

To run this solution, you must have completed labs through chapter 9.

Alternatively, you can run the setup in Chapter 1 and use the solution from

Chapter 9 located at ~/SOA11gFoundationTutorial/

SOA11gFoundationTutorial/po/solutions/ch9-JMSAdapter.

This lab exercise will give you a brief introduction to using Event-Driven

Network (EDN) in a SOA composite for creating event-based activation.

EDN provides functionality for producing and consuming high-level business

events without having to configure and manage any messaging services like JMS

or Oracle AQ.

To illustrate the usage of events, you will modify the existing POProcessing

composite to accept new orders from a second source: an event published by

another application indicating a new order.

F.2. Modifying the composite to consume events In this step you will modify the POProcessing composite to use EDN. You will

add a new mediator component called receiveNewPO that will subscribe to an

event called NewPO and send the received PO to the routePO service.

F.2.1. Defining the event 1. Open the POProcessing application in JDeveloper or use the completed solution

from Chapter 9 from ~/SOA11gFoundationTutorial/

SOA11gFoundationTutorial/po/solutions/ch9-JMSAdapter.

2. Open the composite.xml and click on the Event Definition Creation icon

3. In the Event Definition Creation window, enter POEvents as the name of the

event definition. Accept the namespace value that is generated.

4. Add a new event by clicking on the + icon.

5. Select the PuchaseOrder element from the po.xsd file using the chooser.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

F-2 Handling Business Events using EDN Section F.2.2

6. Enter NewPO as the name of the event and click on OK to close the Add an

Event window.

7. Click OK to complete the event definition. This closes the Event Definition

Creation window.

8. Save All.

9. Close the POEvents.edl tabbed panel.

F.2.2.Subscribing to the NewPO Event 1. Drag and drop a Mediator component onto the composite.

2. Name the mediator: receiveNewPO

3. Select Subscribe to Events for the Template

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section F.2.2 Handling Business Events using EDN F-3

4. Click on the + to add an event. Select the NewPO event from the Event Chooser

window.

5. Click OK on the Event Chooser dialog and click OK again to accept and create

the mediator. Notice that the new receiveNewPO mediator appears on the

composite.xml and that it has an event icon (lightning bolt) on its left side.

6. Save All.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

F-4 Handling Business Events using EDN Section F.2.3

7. Connect the receiveNewPO mediator to the routePO mediator:

8. Double-click on the recieveNewPO mediator and define a new transformation

map. In the transformation, create a new mapper file and map the all the fields

from the source to the target.

9. Save All and close the mapper file and mediator tabbed panels.

F.2.3. Deploying and testing 1. Deploy the POProcessing composite to the server.

2. Start a terminal window and change the working directory to:

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/bin.

3. Open the publish.sh file in the gedit editor (gedit publish.sh) and ensure that the

following values are correct:

- DB_USER=sh_soainfra

- DB_PASSWORD=welcome1

- DB_CONN=localhost:1521:XE

4. Make sure your Java bin directory is first on the path so you use the right version

of Java. Enter the following in your terminal window:

export PATH=$JAVA_HOME/bin:$PATH

5. Change the permissions for the publish.sh script by entering this command in

the terminal window: chmod a+x publish.sh

6. In your terminal window, set your ORACLE_HOME environment variable: export ORACLE_HOME=/home/oracle/Middleware/Oracle_SOA1

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section F.2.3 Handling Business Events using EDN F-5

7. Use gedit to edit publish.sh and make sure the first line reads: #!/bin/bash and

search for all the occurrences of :: and change them to : (replace double colons

with a single colon).

8. Use vi (so you can see special characters) to edit publish.sh and eliminate all the

^M characters at the end of the lines.

9. From the ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/bin

directory, run the publish.sh script to publish a new purchase order event. The

new event is defined in the file new_po_event.xml and can be found in the

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/input directory.

./publish.sh ../input/new_po_event.xml

10. You should see the following output when you execute the command:

11. Open the EM Console in your browser by navigating to

http://localhost:7001/em. Click on the POProcessing composite to view

new instances. You should see an instance created for processing the event you

just published via the command line. Click on the instance ID to view the flow

trace.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.1 Using Service Data Objects (SDO) G-1

G Using Service Data Objects (SDO)

G.1 Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/

SOA11gFoundationTutorial/po/solutions/apG-SDO

To run this solution, you must have completed labs in chapter 9. Alternatively,

you can run the setup in Chapter 1 and use the solution from chapter 9 located

at: ~/SOA11gFoundationTutorial/ SOA11gFoundationTutorial/po/solutions/ch9-JMSAdapter

This lab exercise will give you a brief introduction to using Service Data Objects

(SDOs) in a SOA composite for accessing and manipulating data.

To illustrate the usage of SDOs, you will create a simple SDO using ADF BC and

then use this service to retrieve data from the database using the primary key of

the table. Then, you will update the retrieved row.

G.2 Preparing for the lab In the SOADEMO schema, create a new table called CUSTOMERS, which

contains customer information. In a terminal window, execute these commands:

1. . /home/oracle/bin/oracle_xe_env.sh

cd ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/sql

sqlplus

SQL> Enter user-name: soademo

SQL> Enter password: soademo

SQL> @create_customers_table.sql

You’ll likely see a “name is already used by an existing object” as

the table may already have been created and populated for you.

SQL> exit

G.3 Creating the ADF BC Service 1. In JDeveloper, create a new application by using the File/New menu, the New

Application command from the application menu, or by selecting New

Application from the Application Navigator drop-down list.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-2 Using Service Data Objects (SDO) Section G.3

2. Name your application CustomerSDOApp:

3. Click Next.

4. Use CustomerSDO for the Project Name and select ADF Business Components

for the Project Technologies.

5. Select Next and then select Finish to create the empty project. The

CustomerSDO project appears in the Application Navigator panel.

G.3.1 Creating the Business Components 1. Right-click on the CustomerSDO project in the Application Navigator and select

New.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.3 Using Service Data Objects (SDO) G-3

2. In the New Gallery window, select ADF Business Components in the

Categories list and Business Components From Tables in the Items list

3. Click OK.

4. In the Initialize Business Components Project, create a new connection to the

database with the soademo schema. For Username/Password, use

soademo/soademo. Enter the parameters shown:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-4 Using Service Data Objects (SDO) Section G.3

5. Use the Test Connection button to test the connection to ensure that the user-id

and password are correct. You’ll see the “Success!” message below the Test

Connection button. Then, click OK.

6. Accept the default SQL Flavor and Type Map settings and click on OK to

continue.

7. In the Entity Objects window click on the Query button to retrieve all tables.

Select CUSTOMERS from the Available list and move it to the Selected list.

8. Click Next.

9. In the Updatable View Objects window, select Customers

(SOADEMO.CUSTOMERS) from the Available list and move it to the Selected

list and click Next.

10. Accept defaults in the Read-Only View Objects window and click Next.

11. In the Application Module window, enter the Name of the module as

CustomerSDOAppModule and click Next.

12. Click Finish in the Diagram window.

13. Click Save All to save the project

G.3.2 Testing the Application Module You can test the application module created in the previous step.

14. To test it, right-click on CustomerSDOAppModule (not the application name)

and select Run. This will start a Java application called the Oracle Business

Component Browser.

15. Double-click on CustomersView1 in the left-hand pane. This will open up a

form. You should see one row that was populated when you created the

CUSTOMERS table:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.3 Using Service Data Objects (SDO) G-5

16. Close the Java application by selecting File>Exit in its toolbar.

G.3.3 Creating the service interface Now, let’s create a service interface for your CustomersView1 view object.

1. Double-click on the CustomerSDOAppModule in the Application Navigator.

This opens the application module configuration panel.

2. Click on Service Interface in the left pane.

3. Click on the + sign in the top-right corner to add a new interface. This starts a

wizard for defining the new service.

4. In the Service Interface window, change the name of the Web Service to

CustomerSDOService. Use the default target name space and click Next

5. Click Next on the Service Custom Methods page

6. In the Service View Instances, select CustomersView1 and add it to the Selected

list.

7. Select the CustomersView1 in the Selected list. This will populate the Basic

Operations tab. Select all the operations listed (don’t forget to scroll) and click

on Next.

8. At the Summary step, click Finish

G.3.4 Deploying the service At this point, you now have a new service interface created for the CustomersView1

view object. Before you can deploy this service, you need to ensure that service can

participate in a distributed transaction. To do that, you need to configure it to use

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-6 Using Service Data Objects (SDO) Section G.3

the JDBC data source, jdbc/soademoDatabase, that was created for the soademo

schema in the earlier labs.

1. Still in the Service Interface (CustomerSDOAppModule.xml) window, click on

Configurations in the left pane.

2. Edit the CustomerSDOService configuration (use the pencil icon).

3. Change the JDBC DataSource Name to jdbc/soademoDatabase:

4. Click OK.

5. Back on the Configurations page, select CustomerSDOService as the default

configuration from the drop-down list.

6. Click Save All to save the project.

7. You now need to create a deployment profile. Right-click on the CustomerSDO

project in the application navigator and select Project Properties.

8. Select Java EE Application in the left-hand panel.

9. Change the Java EE Web Application Name to CustomerSDO-webapp

10. Change the Java EE Web Context Root to customer-app

11. Click on Deployment in the left-hand panel.

12. Click New to create a new deployment profile.

13. Select Business Components Service Interface as the Archive Type.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.3 Using Service Data Objects (SDO) G-7

14. Change the Name to customerSDOProfile.

15. Click OK.

16. Expand the customerSDOProfile and select Middle Tier and click on Edit...

button.

17. Change the Enterprise Application Name to CustomerSDO

18. Change the name of the EAR File to customer-app.ear

19. Click OK.

20. Click OK to close the Project Properties window.

21. Save All to save the project.

22. In the Application Menu in the toolbar, select Deploy->

CustomerSDOApp_customerSDOProfile -> MyAppServerConnection

23. If prompted, select the soa_server1 managed server as the target.

G.3.5 Testing the Customer SDO service

To test the service, use Enterprise Manager to test the service. Expand the

Farm_domain1/Application Deployments hierarchy in the left pane. Select the Test

icon next to CustomerSDOService in the Web Services area:

You should see a Test Web Service page. In the Operations drop-down list,

select getCustomersView1. The page will re-render to show only customerid

text input in the Request tabbed window Input Arguments area. Enter 1111 and

click on the Test Web Service button.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-8 Using Service Data Objects (SDO) Section G.4

In the Response tabbed window, you should see the appropriate customer

information.

G.4 Using the SDO in POProcessing Composite In this step, you will modify the POProcessing composite to use the customer

SDO Service. The approveLargeOrder BPEL process will be modified to retrieve

the customer information using the customer id in the input order and replace

the ID in the input with the name. You will also update the customer

information in the database with the information of the last approved order ID

and the order value.

G.4.1 Adding the CustomerSDOService as a component 1. Open your POProcessing application in JDeveloper or use the completed

solution from Chapter 9 from ~/SOA11gFoundationTutorial/

SOA11gFoundationTutorial/po/solutions/ch9-JMSAdapter.

2. In your browser, return to the Enterprise Manager Test Web Service page you

used earlier to test CustomerSDO_customerSDOProfile. Find the WSDL URL

there and copy it: O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.4 Using Service Data Objects (SDO) G-9

3. Browse to the URL you just copied to see the WSDL for the CustomerSDO

endpoint.

4. Open the composite.xml for POProcessing and add a new Web Service

component to the External References swim lane on the composite diagram.

5. In the Create Web Service window, enter the name of the service as

CustomerSDOService

6. Paste the URL into the WSDL URL field in the Create Web Service window and

press the Tab key to process the URL. The wizard will load the WSDL and

populate the Port Type appropriately. Press OK to complete the definition.

The CustomerSDOService external reference is added to the composite diagram.

7. Connect the approveLargeOrder BPEL process to the CustomerSDOService web

service:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-10 Using Service Data Objects (SDO) Section G.4

8. Save All.

G.4.2 Using the SDO in BPEL In this step, you will use Entity Variables to operate on the underlying Service

Data Object. Entity Variable is a new feature introduced in 11g.

G.4.2.1 Creating the Entity Variable 1. Open the approveLargeOrder BPEL process.

2. Create a new Entity Variable by clicking on the Variables icon (x) in the main

scope for approveLargeOrder.

3. In the Variables window, click on + to add a new variable.

4. Name the variable CustomerInfoEV

5. Select Element and click on the browse icon to select an element. In the Type

Chooser, traverse down the Project WSDL Files tree and select

customersViewSDO element as shown in the following image. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.4 Using Service Data Objects (SDO) G-11

6. Click OK to close the Type Chooser.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-12 Using Service Data Objects (SDO) Section G.4

7. Back in the Create Variable window, select Entity Variable and choose the

CustomerSDOService for the partner link.

8. Click OK to dismiss the Create Variable window. Then, click OK to close the

Variables window.

9. Save All.

G.4.2.2 Binding the Entity Variable You have now associated an entity variable with the CustomerSDOService. To

retrieve a row from the database, you will need to assign a value for the primary key.

The action of assigning the value initiates the retrieval of the corresponding row.

This row becomes the current row represented by the entity variable. Any changes

done to the contents of this variable is the same as changing the column values of the

row and these changes are automatically applied to the database in a consistent

manner.

1. Drag a Bind Entity activity and drop it just after the receiveInput activity.

2. Rename the activity to BindCustomerId.

3. Double-click the activity to open its properties. Select CustmerInfoEV as the

entity variable and add a unique key by clicking on the + icon. For the Key Local

Part, click on the browse variables icon (x) and select ns7:CustomerId from the

CustomerInfoEV variable. Note that you may have a different namespace prefix

other than ns7:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.4 Using Service Data Objects (SDO) G-13

4. For the Key Value click on the Expression Builder icon and select the customer

Id from the input variable.

5. Click OK to dismiss the Specify Key window.

6. Click OK in the Bind Entity window to complete the activity definition.

7. Add as Assign activity directly below the BindCustomerID activity and assign the

customer name from the CustomerInfoEV variable to the customerId in the input

variable. Ignore the warning “Variable is not initialized” warning on this assign

activity.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-14 Using Service Data Objects (SDO) Section G.4

G.4.2.3 Updating the Entity Variable In this step you will update the currently retrieved customer data with order

information.

1. Create an Assign activity in the case branch which has the ApprovalRule rules

activity as shown below. Name the new activity: AssignOrderInfo:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.4 Using Service Data Objects (SDO) G-15

2. In the Assign activity, create two copy operations. The first one is to copy the

orderId from the outputVariable to LastOrderNumber in CustomerInfoEV.

The second copy operation should copy the value (price * qty) from the

outputVariable to Last OrderAmount in the entity variable.

3. Save All.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

G-16 Using Service Data Objects (SDO) Section G.4

G.4.3 Deploying and Testing 1. Deploy the POProcessing composite application.

2. Run it using an order between $1000 and $5000 (po-large-iPodx30.txt test input)

3. View the instance using the Enterprise Manager.

4. In the Flow Trace window, click on approveLargeOrder to open the BPEL audit

trail.

Expand the <payload> node at the end under the callbackClient node. You

should see the customerId element value is now the name of the customer that

was retrieved from the database as a result of the Bind activity you added to the

flow.

5. Query the CUSTOMER table in the database using your web browser through

Application Express (http://localhost:8080/apex). Login as soademo/soademo.

6. Click on Object Browser. In the Tables list select CUSTOMERS and click on

Data. You should see the LAST_ORDER_NUMBER and LAST_ORDER_VALUE

set to the corresponding order id and the value:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section G.4 Using Service Data Objects (SDO) G-17

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.1 Adding BAM Activity Sensors H-1

H. Adding BAM Activity Sensors

H.1. Introduction Note: The solution for this chapter can be found in ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solu

tions/apH-BAM

To run this solution, you must have completed labs through chapter 9.

Alternatively, you can do the setup in chapter 1 and use the solution from

chapter 9 located at ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solu

tions/ch9-JMSAdapter

Oracle BAM requires the use of Internet Explorer. Since the remote hosting

environment we are working in is Linux-based, Internet Explorer is not

available. However, we’ll assume that you are accessing the remote hosting

environment via a Windows machine. If that is the case, you’ll be able to use

your own Internet Explorer software and use the IP address that has been

assigned to you to access the Oracle BAM report creating facilities.

BAM provides the ability for end-users to create real-time business dashboards.

This lab exercise will give you a brief introduction to using BAM adapters and

BAM BPEL sensors in a SOA composite.

To illustrate the usage of BAM Adapter and BPEL sensors, you will modify the

existing POProcessing composite to send the orders as they are received to the

BAM dashboard and, for large orders, update the status in the BPEL process.

H.2. Creating Dashboards in BAM In this step, you create a data object in BAM to store data related to incoming

purchase orders.

H.2.1. Defining the data object 1. Start your BAM server by using the Start/Stop Weblogic Servers short-cut on

the desktop.

2. As mentioned above, to access the Oracle BAM web application, you must use

Internet Explorer and only Mozilla is available on the remotely hosted

environment. We’ll assume you are accessing the remote environment from a

Windows machine, so use your Internet Explorer on your local machine (not on

the Mozilla browser on the remote hosting environment) to go to

http:[yourRemoteHostIPAddress]:7001/OracleBAM. [yourRemoteHostIPAddress]

was given to you by your course instructor. For example, you might use: http://10.216.212.32:7001/OracleBAM

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.2.1 Adding BAM Activity Sensors H-2

If you don’t have Internet Explorer on your local machine, you can’t do this

exercise.

3. When prompted by the BAM application, login with the Username/Password of

weblogic /welcome1

4. Open the ‚Architect‛ application by clicking on the Architect button.

5. The BAM Architect window appears. Click on the Data Objects link in the

directory tree and then the Create subfolder link on the right. For the folder

name, enter Training. Then, click the Create folder button.

6. Click the Continue button. Select the Create subfolder link again. This time,

name the new folder End2End-105-POProcessing. Click Create folder and click

Continue when you learn that the folder has been created. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.2.1 Adding BAM Activity Sensors H-3

7. Add a new data object by clicking on the Create Data Object link.

8. Name the data object Orders and use the Add a field link to add the following data

fields with the corresponding types and max sizes or scale:

Name Type Max Size or Scale

Order ID String 30

Customer ID String 30

Product Name String 50

Item Type String 30

Price Decimal 10

Quantity Decimal 10

Status String 50

Total Calculated -

Received Date Timestamp -

9. Note, when you choose ‚Calculated‛, you get the option to edit the formula. In

the pop-up box enter: Price * Quantity and click ‚OK‛.

10. When you have created all the fields, click the Create Data Object button.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.2.2 Adding BAM Activity Sensors H-4

11. Click the Continue button once you see that the data object has been created.

You should now see the Orders data object listed on the left pane. Click on the

Orders link and choose the Layout link from the left pane to see the layout.

H.2.2. Defining the BAM Dashboard 1. Next, you’ll create a simple report based upon the data. To do that, you can

close the architect window and go back to the ‚BAM Start Page‛ in your local

Internet Explorer window and choose Active Studio.

2. This will open up the report creation environment. You will create a report that

everyone can view, so click on the Shared Reports tab in the upper-left portion

of the window.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.2.2 Adding BAM Activity Sensors H-5

3. To keep reports organized, you will want to create folders to put them in.

Choose the Create a new folder link and name the folder Training. Next,

double-click on the new Training folder and use the Create a new folder link to

create a subfolder called End2End-105-POProcessing.

4. Double-click on End2End-105-POProcessing and click the Create A New

Report button. BAM provides some pre-defined layout templates for your

report.

5. Click on the one that gives you a large rectangle area at the top and 2 small

square areas underneath (1st column, 3rd row).

6. Give the report the title of PO Processing Report by clicking and typing in the

title bar at the top. Notice that you are provided with many options for types of

charts that you can create. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.2.2 Adding BAM Activity Sensors H-6

7. For the top (big rectangular area), choose Updating Ordered List by clicking on

that type.

8. You will need to specify the data object to assign. At the bottom of the screen,

find the data object that you created by double-clicking on the Training folder

and then on the End2End-105-POProcessing folder. Select the Orders data

object. Then, click Next.

9. Click the select all link and use the Arrange arrows to put the columns in a

more user-friendly order, starting with the Order ID. See the ordering in the

illustration below. After reordering, click Next and Finish. The fields appear in

the layout.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.2.2 Adding BAM Activity Sensors H-7

10. We need to follow a similar process for the two order views. In the lower-left

panel, click on 3D Pie Chart.

11. From your Training/End2End-105-POProcessing folder, assign the Orders data object

and click Next.

Choose Item Type as the Group By option, Total as the Chart Values and with Total

still selected, unselect Sum and instead choose Percentage of Total as the Summary

Function, then click Next.

12. Instead of clicking Finish right now, let’s change some more options by clicking on

Change View Properties.

13. Change the View Title to Percentage of Total Sales by Item Type and click OK.

14. Set the final chart (lower-right area) to 3D Bar Chart.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.3 Adding BAM Activity Sensors H-8

15. Assign the Orders data object to it and Group By Status. Make the Chart Values as

Order ID and the summary function Count.

16. Click Next and choose Change View Properties to set the title of the view to Purchase

Orders by Status and click OK.

17. Click on the Save Report link in the upper-left pane. Then, choose the Shared

Reports button (the lower button). Drill-down into the Training/End2End-105-

POProcessing folder and accept the default report name PO Processing Report. Click

OK. When notified that the report has been saved, click OK again.

H.3. Configure BAM Adapter on WebLogic Server In this step, you configure the WebLogic Server that is running the SOA composites.

We’ll need to establish the correct settings for the BAM adapter.

H.3.1. Edit the BAM Adapter Configuration 1. You need to configure the BAM adapter using the WebLogic Server administration

console in order to connect to a BAM server from a SOA composite. Using your

browser running in the remote environment, use the Admin Console bookmark to

go to http://localhost:7001/console and login with weblogic/welcome1 as the

username/password.

2. Click on Deployments under the domain1 hierarchy.

3. Scroll to find the OracleBamAdapter.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.3.1 Adding BAM Activity Sensors H-9

4. Click on the OraclebamAdapter -> Configuration (tab) -> Outbound Connection Pools

(tab)

5. Expand oracle.bam.adapter.adc.RMIConnectionFactory to find eis/bam/rmi and click

on eis/bam/rmi. The properties display.

6. Enter the host name of the BAM server, username, password and port as shown below.

The values can be edited by clicking on the Property value.

Make sure you press Enter after setting each value.

7. Click the Save button to record your property changes.

8. In a terminal window, create a BAMPlan directory as follows:

mkdir /home/oracle/Middleware/Oracle_SOA1/soa/BAMPlan

After editing the path as shown, save the plan Plan.xml in the new directory.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.3.1 Adding BAM Activity Sensors H-10

9. Update your deployment to reflect the changes. Go to the Deployments screen and

select the checkbox for OracleBamAdapter and choose the Update button.

10. Click Finish to complete updating the deployment.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.4 Adding BAM Activity Sensors H-11

H.4. Creating a BAM Connection In this step, you make a BAM connection in the JDeveloper IDE to your BAM server.

H.4.1. Make a BAM Connection You need a connection to the BAM server to view the data objects that are available

to enable JDeveloper to generate appropriate WSDL files automatically.

1. Open the POProcessing application in JDeveloper.

2. Create a connection to the BAM server by right-clicking on Connections in the

Application Resources navigator and choosing New Connection and BAM.

3. In Step 1 (the Name screen), select Application Resources, accept the default name of

BAMServerConnection1 and click Next.

4. Enter the localhost for BAM Web Host and BAM Server Host.

5. Enter the HTTP port for BAM (7001) in the HTTP Port field.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.5 Adding BAM Activity Sensors H-12

For User Name, enter: weblogic. For Password, enter: welcome1.

6. Click Next, but on the Test Connection page, do NOT click the "Test Connection"

button. A bug in this version will cause problems later with deployments.

7. Click the Finish button.

In the Application Navigator, Application Resources pane, the new BAM Server

connection is listed in the Connections section under the BAM node.

H.5. Adding a BAM Service Adapter In this step, you define the BAM service adapter which contains the parameters

needed to communicate with BAM.

H.5.1. Adding a BAM Service Adapter You can add a BAM Service Adapter to the composite to send messages into BAM.

1. Drag the BAM Adapter icon that is located under Service Adapters into the External

References column in JDeveloper.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.5.1 Adding BAM Activity Sensors H-13

2. This will automatically open the configuration wizard for the BAM Adapter.

3. Give the service the name OrdersBAMAdapter and click Next.

4. Use the browse button to select the Orders data object under Training End2End-105-

POProcessing and click the OK button.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.5.2 Adding BAM Activity Sensors H-14

5. Change the Operation to Upsert, leave the default Operation Name set at writetoBAM.

Select _Order_ID as the key for the upsert operation. The Upsert operation will insert

the row, if it doesn’t exist, or it will update it based upon the specified key.

Check the box Enable Batching. This will allow messages to be captured even when the

BAM server is not available. When the BAM server is available again, messages that

were generated while the server was down will be sent.

6. Click the Next button.

7. If you need to, change the JNDI name to eis/bam/rmi to use RMI to send messages to

BAM.

8. Click Next. On the final step, click the Finish button.

H.5.2. Modifying the Mediator component 1. Drag a link from the routePO mediator component to the OrdersBAMAdapter

external reference that you just created. This will create a link between the mediator

and the BAM Adapter.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.5.2 Adding BAM Activity Sensors H-15

2. Double-click on the routePO mediator to modify the configuration.

3. Find the OrdersBAMAdapter::writetoBAM operation and click on the icon next to

Transform Using. This will allow you to create a transformation map.

4. Choose Create New Mapper File, accept the default name, and click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.6 Adding BAM Activity Sensors H-16

5. This will open the mapper file. Drag from each field in the Purchase Order request

to the corresponding field in the OrdersBAMAdapter WSDL. Note that you do not

need to drag anything for the _Total and _Received_Date fields. These are either

calculated or automatically populated for you in BAM.

6. When you are finished the mapping, choose the Save All option from the File menu

to save all files that were created or modified.

H.6. Testing BAM Integration with the BAM Adapter At this point, you can test using a mediator and a BAM Adapter to send messages to the

BAM server. Deploy your composite to the SOA server and use Enterprise Manager.

H.6.1.Deploying the POProcessing Composite In the same manner as you have done previously, deploy your newly updated

POProcessing composite.

1. Right-click on the POProcessing project and deploy it to your server.

2. Make sure you check the ‚Overwrite composites with the same ID‛, if you

choose to use the same version number.

If your deployment fails with a 401 server error, simply restart JDeveloper and

try again. This is a bug that you only encounter once if you did Test connection

on the BAM connection.

H.6.2. Running the application Test the composite to see the results appear in the BAM data objects and in the

report.

1. Once the application is deployed, you are ready to try running it.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.6.2 Adding BAM Activity Sensors H-17

2. Login to Enterprise Manager (http://localhost:7001/em) and select the version of the

PO Processing component that you want to test.

3. Click on the Test button for that service.

4. Enter a small order from the test XML file at /home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutorial

/po/input/small_validCC.xml

5. Copy the entire contents and paste them into the large text field in your browser:

6. Click the Test Web Service button.

7. The Response tab won't have any response because this is a one-way invocation

with no reply or callback. However, you should see that the Test Status: Passed.

8. In Internet Explorer on your local machine, go to BAM Architect and verify that the

data was received in the data object by selecting the Orders Data Object and the

Contents link. This verifies that the adapter changes were made correctly and

everything is working properly.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.7 Adding BAM Activity Sensors H-18

H.7. Adding BAM Sensors to the BPEL Process In this step, you add BPEL sensors to the existing BPEL process to detect changes in status

and update the BAM data object. The row was originally inserted by the call to the BAM

adapter from the mediator. This is another way that you can integrate from BPEL to BAM.

H.7.1. Create Variable Activity Sensors 1. Open the BPEL process by double-clicking on the ApproveLargeOrder component.

2. Double-click on the assignCCNumber activity to start to modify it.

3. Select the Copy Operation tab and click on the plus (+) button to add a new copy

operation.

4. Use the expression ‘Pending Approval’ and map it to the status field of the Order

outputVariable.

5. Click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.7.1 Adding BAM Activity Sensors H-19

6. In the Assign window, click on the Sensors tab to start the process of adding a new

sensor.

7. Use the plus (+) button to create a new activity sensor.

8. Set the Name of the sensor to PendingApprovalActivitySensor and set the Evaluation Time

to Completion.

9. Use the plus (+) button in the Activity Variable Sensors area to add a variable.

10. Choose the outputVariable Order and click OK.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.7.1 Adding BAM Activity Sensors H-20

11. Click OK to close the output variable screen.

12. There is no sensor action assigned to this activity sensor yet. Click OK to close the Edit

Activity Sensor window. Click OK to close the Assign window.

13. With the approveLargeOrder BPEL process open, navigate to the Sensor Actions folder

in the Structure panel.

14. Right-click on Sensor Actions and select Create > BAM Sensor Action.

15. The Create Sensor Action window appears.

Enter the name PendingApprovalSensorAction

Use the magnifying glass next to Data Object to select the Orders data object under

Training/End2End-105-POProcessing.

Select Upsert as the BAM Operation,

Select _Order_ID as the key,

Modify the name of the map file to: bam/xsl/PendingApprovalSensorAction.xsl

Make sure that the JNDI setting is: eis/bam/rmi for the BAM Connection Factory JNDI.

Keep the Enable Batching box checked.

Use the plus symbol next to Map File to create a new mapping file.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.7.1 Adding BAM Activity Sensors H-21

Create links from the fields on the Source (left) side under tns:actionData >

tns:payload > tns:variableData > tns:Data > sensor:Order to the corresponding

fields on the Target (right) side in tns:_Orders1.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.7.1 Adding BAM Activity Sensors H-22

16. Save All.

17. By following a similar process (changing the names mostly) that you used above to

create a PendingApprovalActivitySensor and a PendingApprovalSensorAction,

create a new CallbackActivitySensor / CallbackSensorAction pair. Add this sensor to

the callbackClient activity at the end of the process. This time set the Evaluation

Time to Activation. Make sure you add the activity variable and perform the

mapping. Remember you can only create a BAM Sensor Action from the structure

panel while the BPEL process is open.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.8 Adding BAM Activity Sensors H-23

18. When you are done, you can go back to the Sensors tab of the activity (callback client).

Double-click on the sensor that you want to edit (or use the pencil icon) and you will see

the CallbackSensorAction associated with the CallbackActivitySensor.

H.8. Deploying and Running the Composite In this step, you re-deploy the new composite in JDeveloper and test it again using the

Enterprise Manager testing function. This time, you use a large order.

H.8.1.Create Variable Activity Sensors Open the BPEL Process by double-clicking

1. In JDeveloper, re-deploy the composite with a new version ID.

2. In Enterprise Manager, click on the composite with the version number that you

just deployed. Click on the Test button.

3. Click on the Request tab to try the test again with a large order that has an

invalid credit card.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-End-105-PO-Processing

Section H.8.1 Adding BAM Activity Sensors H-24

/home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutor

ial/po/input/large_validCC.xml.

4. Notice that the status is updated in the BAM Architect Contents display

appearing in the Internet Explorer on your local machine:

5. Test again with a large purchase order over $5000 with a valid credit card.

Check that the status of that purchase order in BAM is ‚Pending Approval‛.

6. Use the BPM Worklist application to approve the order. Notice that the status is

updated to ‚approved‛.

7. Open the report using Active Viewer to see the data. Use the Select Report

button. It will update in real-time as new purchase orders are received.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section I-3 Integrating with Oracle B2B I-1

I Integrating with Oracle B2B

I Integrating with Oracle B2B ................................................................................................... 1 I.1 Introduction ....................................................................................................................... 1 I.2 Use Case ............................................................................................................................. 2 I.3 Configuring the Oracle B2B ............................................................................................ 3

Create a Document Definition .......................................................................................................................... 3 I.3.1 Define the Trading Partners ................................................................................................................. 5 I.3.2 Create Listening Channel ...................................................................................................................... 5 I.3.3 Create Agreement .................................................................................................................................. 6

I.4 Create composite: B2Bprocessing ................................................................................... 7 I.4.1 Create B2B Service: ReceivePO_B2B.................................................................................................... 8 I.4.2 Create Web Service: Send_PO .............................................................................................................. 8 I.4.3 Create & Configure Mediator: Route_PO ........................................................................................... 8

I.5 Testing the Process ........................................................................................................... 9

I.1 Introduction Oracle B2B is an e-commerce gateway that enables the secure and reliable exchange of documents

between an enterprise and its trading partners. Documents are XML data such as a purchase orders or

invoices and are generally standard formats defined by an industry vertical. In any case, standard or not,

the format of the document being exchanged must be agreed upon by the trading partners exchanging

the document.

B2B is a binding component of and is shipped with SOA Suite. The SOA Suite platform enables

eCommerce business processes by providing the infrastructure for process orchestration, error mitigation,

data translation and transformation. It addresses the issues of security, compliance, visibility, and

management. The B2B component provides the means for managing the trading partners.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

I-2 Integrating with Oracle B2B Section I.2

I.2 Use Case In this exercise the focus is on the basic concepts, the components, and how they interoperate.

Oracle B2B – Manages the interactions with the remote partner:

o Document Management: Translation, Envelopes, Acknowledgments

o Communications: Security, Transports, Messaging Services

o Trading Partner Management: Profiles, Agreements

o System Management: Reports, Metrics, Enterprise Manager

In this exercise Oracle B2B will read an XML file, process it and pass it onto the B2B composite.

B2B composite – Manages the interactions between Oracle B2B and the PO Composite:

o Routing, Transformation, Process Orchestration

In this exercise, this is simply a pass-through, but it illustrates the best practice for

interoperability. In a typical situation:

o Inbound: this composite, based on trading partner information, would perform

transformations, lookups, and process orchestration between Oracle B2B and the

middleware.

o Outbound: A companion composite would do all the above plus set the trading partner

information for Oracle B2B.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section I-3 Integrating with Oracle B2B I-3

PO Composite

This is the existing middleware application that the eCommerce data is tying into via Oracle B2B:

Error Mitigation Composite

This is out of scope for this exercise, but keep in mind that there is a need for an error mitigation

framework. This is a composite to mange errors between the applications, the Trading Partners,

and the middleware. There are two types of errors: In-Band and Out-of-Band:

o In-Band: An error occurs in a process: Example: An error occurs within composite

process and the appropriate action is taken.

o Out-of-Band: an error occurs outside of process: Example: How to mitigate the Oracle

B2B time out error in the middleware and/or application.

I.3 Configuring the Oracle B2B The steps are:

1. Create a Document Definition: The Purchase Order

2. Define the Trading Partners and assign the new partner “MarketInc” the new document

3. Create the Host Listening Channel

4. Create and Deploy the Agreement

Create a Document Definition To create a new Document Definition: Login to the Oracle B2B Console by selecting the B2B

Administration bookmark to go to http://localhost:7001/b2b. Use weblogic/welcome1

as login credentials

1. Select Administration at the top right of the screen.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

I-4 Integrating with Oracle B2B Section I.3

2. Select Custom, under Document Protocols in the left pane.

3. Create a new version by selecting the New Version button at the top right.

4. Enter Version Name: 1.0

5. Click Save.

6. Create a new type by selecting the New Type button at the top right.

7. Name the document type: PurchaseOrder

8. Click Save.

9. Create a new definition by selecting the New Definition button an the top right.

10. Name the Document Definition: PurchaseOrder_def

11. Click Save.

12. Select Browse next to the Definition field on the Document Definition pane and choose

po.xsd from ~/SOA11gFoundationTutorial/po/schemas.

13. Select Identification Type: XML

14. On the XML tab, set the Identification Expression: //*[local-name()='PurchaseOrder']

15. On the Routing tab, set the Document Routing ID: PurchaseOrder10

16. Click Save.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section I-3 Integrating with Oracle B2B I-5

I.3.1 Define the Trading Partners To update the host and create partner MarketInc:

1. Select Partners at the top right

2. In the left-most pane, select the Edit Trading Parter icon (pencil) for the host trading

partner MyCompany and change the Partner Name to OracleServices. Click OK.

3. Create new trading partner using the Add New Trading Partner icon (plus sign). Set

the Partner Name to: MarketInc and click OK.

4. Select MarketInc in the left-most pane and then select the Documents tab.

Add (plus icon) Custom > 1.0 > PurchaseOrder > PurchaseOrder_def

Sender box Check

Receiver box Un-Check

5. Click Save.

I.3.2 Create Listening Channel To create the Host Listening Channel:

1. Select Administration in the upper-right part of the browser window.

2. Scroll the tab list to the right and select the Listening Channel tab

3. Select Add Channel to Trading Partner:

Name File_ListeningChannel

Protocol Generic File-1.0

4. Transport Protocol Parameters tab

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

I-6 Integrating with Oracle B2B Section I.3

Poling Interval 5

Folder Name: /home/oracle/orclsrvs_in

5. Channel Attributes Tab

Enable Channel Radio button

Internal Uncheck

6. Click Save

I.3.3 Create Agreement Now create a new Agreement.

1. Select Partners at the top-right area of the browser window.

2. Select the Create New Agreement icon (plus sign) in the Agreement section at the lower-

left:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section I-3 Integrating with Oracle B2B I-7

3. Click the Select Partner link in the image at the top of the screen.

Select Partner MarketInc

4. Click the Select Document Definition link in the image at the top of the screen.

Select document Custom-1.0-PurchaseOrder-PurchaseOrder_def and click OK.

5. Enter Agreement Id: OS_MI_1000

6. Enter Name: OracleService_MarketInc_Agr

7. Click Save.

8. Click Validate. You will see the validation message below the agreement name on the

top left of the Agreement window. For example, look for: Agreement

OracleService_MarketInc_Agr is valid.

9. Click Deploy. See the Deployment Successful message appear in a pop-up window.

I.4 Create composite: B2Bprocessing Now, create the composite that will use this agreement. When completed, it will look like this.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

I-8 Integrating with Oracle B2B Section I.4

1. In JDeveloper, create a new SOA application called B2Bprocssing with a project called

B2Bprocessing starting with an empty composite.

I.4.1 Create B2B Service: ReceivePO_B2B 1. Drag and drop a B2B Service to the left swim lane and enter the following values:

Service Name: ReceivePO_B2B

B2B Integration Type: Default

Pick server connection (choose MyAppServerConnection) and click the Test B2B

button. Look for the B2B server connection successful !! message.

Click Next.

Operation: Receive and click Next.

Document Definition Handling: Basic and click Next.

Document Definition: Custom, select (walk tree): PurchaseOrder_def and click

Next.

Click Finish to complete the wizard sequence. The ReceivePO_B2B exposed

service appears on the composite diagram.

I.4.2 Create Web Service: Send_PO 1. In the Enterprise Console, select Test for the POProcessing composite. Copy the endpoint

URL of the WSDL. We’ll use it for the next step. Note the service should be

receivePO.wsdl. For example: http://opnpgbp8.us.oracle.co:7001/soa-infra/services/default/POProcessing/receivePO?WSDL

2. Back in JDeveloper, drag and drop a Web Service to the right swim lane to create a new

external reference. Name the service: Send_PO. Paste the copied WSDL URL from the

previous step into the WSDL URL field. Tab and the Port Type field will be filled-in

automatically.

3. Click OK to finish creating the new web service. The Send_PO external reference is

added to the composite diagram.

I.4.3 Create & Configure Mediator: Route_PO 1. Drag and drop a mediator component into the Components swim lane. Call it Route_PO.

Elect to Define Interface Later. Click OK.

2. Wire the mediator to the B2B service on the left and to the PO service on the right

3. Edit the Route_PO mediator and create a new mapper file containing a simple one-to-one

transformation to map the PurchaseOrder input to the PurchaseOrder output.

4. Save All.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section I-3 Integrating with Oracle B2B I-9

I.5 Testing the Process 1. Deploy the B2Bprocessing project.

2. Copy one of the sample input files supplied (files starting with MarketInc…) in the

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/input directory into your B2B

input directory (/home/oracle/orclsrvs_in). You may need to create the orclsrvs_in directory

first. As soon as the file lands in orclsrvs directory, it is picked up by the B2B application

and is deleted from this directory.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

I-10 Integrating with Oracle B2B Section I.5

3. Use the browser’s B2B Administration bookmark to go to the Oracle B2B console to view

the metrics using the Reports and Metrics links on the top right.

Review Reports – click on message Details link (plus/minus icon at left of row) to see

details

o Click the Wire Message link: Review details and URL

o Click the Payload Storage link: Review detail and data

o Click the Application Message link: Review details, Application Name, Composite

Name / Version, Reference & Service

Review Metrics – If you place the a market into into the /home/oracle/orclsrvs_in directory

three times, your metrics may look like this:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section I-3 Integrating with Oracle B2B I-11

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.1 Oracle Service BusJ-1

J Virtualize the Credit Validation Service on Oracle Service Bus

J Virtualize the Credit Validation Service on Oracle Service Bus ................................................................. 1 J.1 Introduction ................................................................................................................................................. 1 J.2 Designing the Flow ..................................................................................................................................... 2 J.3 Prerequisites ................................................................................................................................................ 3 J.4 Create Project and Import Resources ....................................................................................................... 3 J.5 Configure Business Service ....................................................................................................................... 6 J.6 Configure the Proxy ................................................................................................................................. 13 J.7 Configure Message Flow ......................................................................................................................... 18 J.8 Re-wire POProcessing Composite .......................................................................................................... 23 J.9 Test the end-to-end application .............................................................................................................. 24

J.1 Introduction Note: The solution for this chapter can be found in

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutions/apJ-OSB. The

solution includes an OSB import file called Lab J OSB solution sbconfig.jar with the OSB

configuration. You should have completed Chapter 9 or begin with the solution from Chapter 9 located

at ~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solutions/ch9-

JMSAdapter.

Now that you have completed the POProcessing composite application, it’s time to think about how this

application will behave once it is deployed in production.

Are there elements embedded in our application that will change frequently?

Could these dependencies require re-deployment of the application unnecessarily, creating a

disruption of service to the consumers of the POProcessing application?

If so, we should work to minimize and remove these dependencies to allow our composite to be more

resilient to change.

Upon inspection, the credit validation service is a good candidate to decouple from the POProcessing

composite. While the interface for the credit validation service is fairly stable, the service provider may

be replaced frequently. In fact, we already have been alerted that the credit validation service may be

moved to another division so credit cards can be processed more efficiently.

In summary, we should not have to redeploy our application every time the credit validation provider is

moved or changed in some way insignificant to our own application. Being able to insulate from these

types of changes will make our application more agile, robust and adaptable.

Also, credit validation is a service needed by many business processes; therefore, it should be made

available for enterprise-wide re-use. Re-use of IT assets helps reduce overall cost by allowing services to

be shared.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.2

In this lab, you will register credit validation as a business service with Oracle Service Bus. You will then

create a proxy service and re-wire the POProcessing composite to access this service indirectly through

Oracle Service Bus. This is called service virtualization.

Service virtualization provides loose-coupling and will allow the POProcessing composite to be more

agile and resilient to change once put into production.

J.2 Designing the Flow

During this lab you will accomplish the following tasks:

Import Resources

Configure and test a business service for validationCCService

Create a proxy and message flow to process incoming messages with data validation, reporting

and error handling

Re-wire the POProcessing composite to invoke the credit validation service through Oracle

Service Bus

Test the application end-to-end

Once completed, the overall message flow of the Oracle service bus proxy should look like the following

picture.

Credit Validation Service

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.3 Oracle Service BusJ-3

J.3 Prerequisites This lab requires the following:

Completed solution to Chapter 9 working.

Oracle Service Bus server running

Oracle SOA Suite server running

JDeveloper up and running

J.4 Create Project and Import Resources 1. If not already running, start the OSB Examples Server. If not already running, start your SOA server

and make sure your credit card validation service is running there. To start the servers, use the

Start/Stop Weblogic Server(s) short-cut on the desktop.

2. Login to OSB Web Console using the OSB Console bookmark in the browser

(http://localhost:7021/sbconsole) with username weblogic and password: weblogic

3. Click Create button in upper-left corner of the screen to start a new session. In OSB, all changes are

done in a sandbox called a session. You first create the sandbox by creating a session in the change

center. After a set of related changes is done, you deploy all the changes in the session as a unit by

clicking Activate in the Change Center.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.4

4. We first need to create a project with sub folders. We could create it in the console, but instead, we

will import this to illustrate how configuration can be imported into OSB. If you chose to go directly

to the solution, you can import the solution in the same way. Scroll down the left pane to the bottom

to find Operations and click System Administration.

5. Click Import Resources in the Import/Export section of the left pane.

6. Click Browse and navigate in your local filesystem to where you unzipped the lab materials. Select /home/oracle/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/solution

s/apJ-OSB/Lab J OSB starting sbconfig.jar. Click Open.

7. Click Next then Import

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.4 Oracle Service BusJ-5

8. Click the Activate button in the upper-left corner to commit the OSB configuration change.

9. Then click the Submit button.

10. Scroll to the bottm of the left pane. Click Project Explorer. You should see a top-level project called

Credit Services with a sub folder called BusinessServices.

11. Click on Credit Services. You should see that three sub folders have already been created for you.

These include: BusinessServices, ProxyServices and Resources.

12. Navigate to the Resources folder. Click on the Create Resources drop-down list and select Resources

from URL.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.5

13. You will import resources from the WSDL URL of SOA Suite Server. You can simply paste the URL

to the WSDL into the URL/Path field as shown below.

The precise URL to the WSDL file can be copied from the validationForCC test page in the Enterprise

Manager console. Be sure to remove any version numbering. The URL will look like this. http://opnpgbp8.us.oracle.co:7001/soa-

infra/services/default/validationForCC/getStatusByCC?WSDL

Specify the Resource Name as ValidateCredit_WSDL and make sure that the Resource Type is set to

WSDL.

14. Click Next. Click Import. You now have imported the WSDL and schema needed to create the

Business Service for the credit validation service on Oracle Service Bus.

J.5 Configure Business Service

A business services defines the interface and connection information for an endpoint that OSB invokes. It

is similar to a composite reference.

15. Navigate to the Business Services folder. From the Create Resource drop-down list, select Business

Service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.5 Oracle Service BusJ-7

16. On the General Configuration pane, fill-in the Service Name and Description as shown below.

Click the Browse button next to WSDL Web Service. This will bring up window to select WSDL for

the business service.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.5

17. Click on link to WSDL imported in previous step, ValidateCredit_WSDL.

18. Select the execute_pt under the Ports and then press Submit.

19. Click Next through each of the remaining configuration screens in the wizard. If you receive an error

message indicating that validationForCC already exists, exit the wizard since it’s already been

created. Make a mental note if this situation occurs as you may need to execute some

troubleshooting steps later when you test your business service.

Review options available to business services. Accept all of the defaults.

Finally, on last screen showing all the options together in a table format, scroll down and press Save.

Don’t forget this step and navigate away from this page before hitting Save or you’ll lose your

changes.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.5 Oracle Service BusJ-9

20. From the Project Explorer view, click on your new business service.

21. Click on Operational Settings tab near the top of the page.

22. Check the box Enabled next to Monitoring. It may already be checked.

23. Change the aggregation interval to greater than 10 minutes. It may be set to 25 minutes so that’s

fine.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.5

Enabling monitoring will collect metrics for your service such as average response time, average TPS and

number of errors. You can define SLA alerts on these metrics.

The aggregation interval defines how often metrics will rollover. Generally for demos, you want to select

something longer than 10 minutes, say 25 to 30 minutes.

Note that all the operational settings can be set at a fine-grained service level

24. Click Update button to save your changes.

25. Activate your changes by clicking the Activate button in upper-left corner of screen.

Add a Description to document what was done. This will help you identify later in the Change

Center in case you would like to undo or re-do your changes.

Click Submit. You are now ready to test your first OSB business service!

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.5 Oracle Service BusJ-11

26. In the OSB console’s Project Explorer, select the next to your new Business Service to bring up

the Business Service Testing window.

Before proceeding, ensure you can invoke the validationforCC service is deployed on your SOA server.

27. Set the credit card number to 1234-234-1234-1234. The test XML should look like this.

<cca:creditcardStatusRequest

xmlns:cca="http://www.globalcompany.com/ns/CCAuthorizationService">

<cca:CCNumber>1234-1234-1234-1234</cca:CCNumber>

</cca:creditcardStatusRequest>

28. Click Execute button.

29. Review the Response document for VALID. Troubleshooting Advice: Your test may fail due to a

problem with the port number in the URL endpoint for your validationForCC service. You may have

experienced earlier that the business service had already been created when you tried to save it. If

you experienced that, you’ll likely need to edit your validationForCC business service and change the

port number to 7001 as shown below. Then, activate your changes and retest.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.5

When the test succeeds, you’ll see this response:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.6 Oracle Service BusJ-13

J.6 Configure the Proxy

A proxy service is the OSB mediation logic that virtualizes the endpoint that OSB routes to and decouples

it from the client. We will first just create a proxy service exposed to the client that just routes to the

business service. Later we will add more logic in the proxy service.

30. Click the Create button in the Change Center to start a new session.

31. Navigate to the ProxyServices folder. Click on Create Resources drop-down list and select Proxy

Service.

32. On General Configuration page, set Service Name to ValidateCredit. Set the Service Type to your

WSDL web service by clicking the Browse button , selecting the WSDL you just imported and

choosing execute_pt under ports. Then, click on Submit.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.6

33. Click Next through the remaining configuration screens, making note of some of the settings for

Proxy. Notice that you can configure security for your services as well as enable content and

attachment streaming.

Note, at this point, you are likely to see an error message that “a proxy service with the given name

already exists.” This indicates that it has already been created for you. You can click Cancel to

abandon the wizard sequence and skip the next step.

If the proxy service didn’t already exist, you will see the Summary page. Select the Save button at

the bottom of page.

34. Navigate to the newly created Proxy Service via Project Explorer.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.6 Oracle Service BusJ-15

35. Click on the Message Flow icon next to ValidateCredit. This will take you to the Message Flow

editor.

Note: The following steps may not be necessary for you if the ValidateCredit proxy already existed

since the routing has already been built. It will look like this:

If the route already exists as shown above, just read through the next few steps to see how it was

created. Then, move on to step 43 to test the proxy.

To create the routing:

36. Click on ValidateCredit icon and select Add Route.

37. Click on RouteNode1 icon and select Edit Name And Comments. Change the name to

RouteTo_validationForCC and click on Save.

38. Click on the RouteTo_validationForCC and select Edit Route. O

racl

e U

nive

rsity

and

Dig

ora

use

only

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.6

39. Click on Add an Action, and select Communication and then Routing.

40. Click on service link and select validationForCC and click Submit.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.6 Oracle Service BusJ-17

41. Check the checkbox Use Inbound operation for outbound. Click on Save All.

42. Click Activate on left hand side of screen to commit your changes to the session. You are now ready

to test your new Proxy!

43. Navigate to the new Proxy Service and click on the to bring up the Test Console.

44. Executing the same test you did earlier for the business service by entering 1234-1234-1234-1234 for

CCNumber in the Payload text box.

45. Click on the Execute button. You should see output similar to when you tested your Business Service.

46. Instead of the previous steps, an alternative way to create the same proxy service is to auto generate it

from the business service. When creating the proxy service, on the General Configuration page,

select Create From Existing Service and click on Browse to select the business service you created.

However, the proxy so generated does not work properly in this version unless the step to enable

monitoring of the business service is done after the proxy is generated.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.7

J.7 Configure Message Flow 47. Navigate to the newly created Proxy Service via Project Explorer.

48. Click on Create to start a new session in the Change Center.

49. Click on the Message Flow icon next to ValidateCredit. This will take you to the Message Flow

editor.

50. Notice that a Route node has already created to pass-through to the validateforCC service.

51. Note that, if the proxy service has been already created for you above, you won’t need to perform the

following steps to create the message flow. Just read through the following steps to see how the

message flow was created. Start your work again at section J8.

Next you will add 1 stage and 2 actions to the Message Flow.

a. Validate action will validate the incoming request payload against a schema type definition and, if

the validation fails, you will configure an error handler to signal the failure.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.7 Oracle Service BusJ-19

b. Reporting action will track incoming messages and stream data as it arrives from the

POProcessing composite.

52. Click on the envelope above ValidateCredit Select Add Pipeline Pair.

53. Click on left Request_Pipeline and select Add Stage.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.7

54. Click on new Stage and select Edit Stage.

55. Now, we will add 2 Actions, Report and Validate. The Reporting action allows you to record any

payload elements along with key-value pairs to a database.

Validate will allow us to check for valid input to credit card validation service and throw an error if

invalid input message is detected.

56. Click on Add Action->Reporting->Report.

57. Fill in fields as follows:

Expression: $body

KeyName: CCNumber

Key Value: ./cca:creditcardStatusRequest in variable body

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.7 Oracle Service BusJ-21

58. Add Validate Action

59. Fill in fields.

XPath: ./* (dot slash star)

variable: body

Resource: XMLSchema_-248516241* ( Element = "creditcardStatusRequest" )

60. Click Save Button.

61. Navigate to top of message flow and click on envelope.

62. Select Add Service Error Handler.

63. Click on Error Handler

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.7

64. Select Add Stage.

65. Click on stage and select Edit Stage.

66. Click on Add Action -> Reporting->Alert

67. Fill-in Alert as depicted below and click on Save All.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.8 Oracle Service BusJ-23

68. Activate the session in Change Center.

J.8 Re-wire POProcessing Composite Next, you'll open your POProcessing composite and fix the getCreditCardStatus reference to invoke

Oracle Service Bus.

69. Open JDeveloper, if not already open. Navigate to the POProcessing application.

70. Double-click the composite.xml in the left pane to open the Composite editor.

Double click the getCreditCardStatus reference link (highlighted above). Edit the WSDL URL field to

point to your new proxy in Oracle Service Bus.

For example, if you named your Proxy as recommended in the guide, the URL would be: http://localhost:7021/Credit_Services/ProxyServices/ValidateCredit?WSDL

Click Tab so that the Port Type is filled-in for you.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.9

71. Click OK.

72. Save All.

73. Re-deploy the POProcessing composite. You are now ready to test your end-to-end scenario with

Oracle Service Bus.

J.9 Test the end-to-end application 74. After deploying, in the Enterprise Manager console, click on the POProcessing application and then

open the Test page.

75. Click XML View.

76. In the previous chapter you submitted a small order which created an order file directly. This time

you'll create a large order which the Mediator will route to the BPEL approval process.

Open the following file in a text editor:

~/SOA11gFoundationTutorial/SOA11gFoundationTutorial/po/input/po-large-

iPodx30.xml

Copy the entire contents and paste them into the large text field in your browser:

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Section J.9 Oracle Service BusJ-25

77. Click Test Web Service.

78. Check the flow trace to see that processing was completed for this latest test instance.

79. Go back to the Oracle Service Bus console. Log in if you need to. Navigate to Operations

80. Review the Message Reports.

81. Navigate to Dashboard. Have any Alerts been generated? Did you try sending your proxy bad

data? If not, try it now.

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED

End-2-end-105-PO-Processing

Oracle Service Bus Section J.9

Ora

cle

Uni

vers

ity a

nd D

igor

a us

e on

ly

THES

E eK

IT M

ATER

IALS

AR

E FO

R Y

OU

R U

SE IN

TH

IS C

LASS

RO

OM

ON

LY.

CO

PYIN

G e

KIT

MAT

ERIA

LS F

RO

M T

HIS

CO

MPU

TER

IS S

TRIC

TLY

PRO

HIB

ITED