The notification service in Oracle BPEL Process Manager allows you to
send a notification by email (as well as voice message, fax, pager, or
SMS) from a BPEL process.
Configure Email Account
To
configure the email account which the BPEL Server should connect to, we
need to place a MailAccount xml configuration file (in our example
BpelMailAccount.xml) into the following directory:<soa_home>\bpel\domains\default\metadata\MailService Note: You will need to create the metadata and MailService directories. The file itself can have any name (though must end with .xml) as you can define multiple accounts. However make a note of the name as you will need it to link your BPEL Process to the actual mail account. Here’s our sample file: The outgoing SMTP service doesn’t need to be configured (as we use the notification service to send outgoing emails). However the incoming account is defined by the following tags: <incomingServer> <protocol>[protocol pop3 or imap]</protocol> <host>[imap or pop3 server]</host> <email>[imap or pop3 account]</email> <password>[imap or pop3 password]</password> <folderName>[imap only, inbox folder ]</folderName> </incomingServer> Note: When defining the account name, be careful to use the actual account name not the email address as they are not always the same.
Creating BPEL Process
The
first step is to use JDeveloper to create an Asynchronous process
initiated by a request message with a payload containing an element of
type mailMessage (defined in Mail.xsd installed as part of BPEL PM).To do this use the BPEL Project Creation wizard to create a BPEL Process in the normal way. After entering the process name and specifying the process template to be asynchronous, select "Next". This will take you to the next step in the wizard where you specify the Input and Output Schema Elements, click on the flash light for the input schema and select Mail.xsd (located in <SOA_HOME>\bpel\system\xmllib) as shown in the figure 1 below.
Figure 1 - Specify Input and Output Element
This will then open the type chooser window to select the element to use from the imported schema. Select the mailMessage element as shown in figure 2 below.
Figure 2 - Type Chooser
Once the process has been created you can remove the callBackClient activity as we won’t need this.
Import Common Schema
If
you now try and compile your process, you will find it fails with an
error message. Thus is because the Mail.xsd itself imports a schema
(common.xsd), so you need to import this schema as well. To import the Mail Schema into your BPEL Process, ensure the diagram view for your BPEL process is open and selected in JDeveloper. Then within the BPEL Structure window, right click on the Project Schemas node and select "Import Schemas" (as shown in figure 3 below).
Figure 3 - Import Schema
Note: Once imported, manually update the WSDL file to ensure the import statements for both the Mail.xsd and common.xsd are contained within the same <schema> element or it will still fail to compile. See previous blog - Using Nested Schemas with BPEL for details.
Define Mail Activation Agent
The
process itself is now ready for deployment. However we need to complete
one final activity, which is to tie the BPEL Process to a mail
activation agent for the Email account that we defined earlier.The Activation Agent will poll the defined mail box for emails and then for each email it receives invoke an instance of the process to handle it. To do this you need to add the following definition to the bpel.xml file, after the <partnerLinkBindings> element: <activationAgents> <activationAgent className=”com.collaxa.cube.activation.mail.MailActivationAgent” heartBeatInterval=”60”> <property name=”accountName">BpelMailAccount</property> </activationAgent> </activationAgents> Where heartBeatInterval is how often we want to poll the email account for new emails, and the accountName corresponds to the name of the account configuration file we defined earlier. Finally deploy the process and send an email to the appropriate account. Gotcha!! - If you modify the BPEL process in JDeveloper, the bpel.xml file may lose its changes (i.e. the activationAgent definition), and as a result the process will never get initiated - so always check the bpel.xml file is correctly defined just before deploying the process.
Email Server
To
make testing easier, I installed my own local mail server. For this I
used James (which is an Open Source Java Mail Server from Apache).Installation of James is very straight forward you just download it and unzip it to a convenient location. To start it, use the script run.bat or run.sh, depending on your operating system in the james-2.3.0/bin directory. To configure James just bring up a telnet session (on port 4555) to bring up the Remote Administration Tool from which you can create the required accounts. For example, to create the accounts bpel and jsmith (where the password is welcome1) enter the following: JAMES Remote Administration Tool 2.3.0 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands adduser bpel welcome1 User bpel added adduser jsmith welcome1 User jsmith added listusers Existing accounts 2 user: bpel user: jsmith quit |
Wednesday, May 9, 2012
Using Email to initiate a BPEL Process
########
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment