{"id":2788,"date":"2011-07-27T12:12:31","date_gmt":"2011-07-27T17:12:31","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=2788"},"modified":"2015-04-17T13:52:24","modified_gmt":"2015-04-17T18:52:24","slug":"soa-11g-tutorial-business-activity-monitoring-bam","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=2788","title":{"rendered":"SOA 11g Tutorial: Business Activity Monitoring (BAM)"},"content":{"rendered":"<div class='toc wptoc'>\n<h2>Contents<\/h2>\n<ol class='toc-odd level-1'>\n\t<li>\n\t\t<a href=\"#Define_Data_Object\">Define Data Object<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Login_BAM_Console\">Login BAM Console<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_Subfolders\">Create Subfolders<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_Data_Objects\">Create Data Objects<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Define_BAM_Dashboard\">Define BAM Dashboard<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Open_Active_Studio\">Open Active Studio<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_Report_Folders\">Create Report Folders<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_a_New_Report\">Create a New Report<\/a>\n\t\t\t\t<ol class='toc-odd level-3'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Configure_Top_Tile\">Configure Top Tile<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Configure_Lower_Left_Tile\">Configure Lower Left Tile<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Configure_Lower_Right_Tile\">Configure Lower Right Tile<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Save_Report\">Save Report<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ol>\n<\/ol>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Configure_BAM_Adapter_on_WebLogic_Server\">Configure BAM Adapter on WebLogic Server<\/a>\n\t\t\t\t<ol class='toc-even level-2'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Create_BAM_Plan_Directory\">Create BAM Plan Directory<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Configure_BAM_Adapter\">Configure BAM Adapter<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Redeploy_BAM_Adapter\">Redeploy BAM Adapter<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ol>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Add_BAM_Connection_to_POProcessing\">Add BAM Connection to POProcessing<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Use_BAM_Adapter_in_POProcessing\">Use BAM Adapter in POProcessing<\/a>\n\t\t\t\t<ol class='toc-even level-2'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_BAM_Adapter_to_POProcessing\">Add BAM Adapter to POProcessing<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Connect_Mediator_Component_to_BAM_Adapter\">Connect Mediator Component to BAM Adapter<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Test_BAM_Adapter_Connection\">Test BAM Adapter Connection<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Check_Data_Object_Contents\">Check Data Object Contents<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ol>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Add_BAM_Sensors_to_BPEL_Process\">Add BAM Sensors to BPEL Process<\/a>\n\t\t\t\t<ol class='toc-even level-2'>\n<ol class='toc-odd level-3'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Set_Order_Status_to_Pending_Approval\">Set Order Status to 'Pending Approval'<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_sensor:_PendingApprovalActivitySensor\">Add sensor: <strong>PendingApprovalActivitySensor<\/strong><\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_sensor_action:_PendingApprovalSensorAction\">Add sensor action: <strong>PendingApprovalSensorAction<\/strong><\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_sensor:_CallbackActivitySensor\">Add sensor: <strong>CallbackActivitySensor<\/strong><\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_sensor_action:_CallbackSensorAction\">Add sensor action: <strong>CallbackSensorAction<\/strong><\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ol>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Test_BPEL_Sensors\">Test BPEL Sensors<\/a>\n\t\t\t\t<ol class='toc-odd level-3'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Test_Large_Order\">Test Large Order<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ol>\n<\/ol>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Issues\">Issues<\/a>\n\t\t\t\t<ol class='toc-even level-2'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Cannot_Find_Sensor_Tab\">Cannot Find Sensor Tab<\/a>\n\t\t\t\t\t<\/li>\n<\/ol>\n<\/ol>\n<\/ol>\n<\/div>\n<div class='wptoc-end'>&nbsp;<\/div>\n<p>This is part of the <a href=\"?p=1924\">Oracle SOA11g hands on tutorials<\/a>.<\/p>\n<span id=\"Define_Data_Object\"><h2>Define Data Object<\/h2><\/span>\n<p>* Define data object to hold event data.<\/p>\n<span id=\"Login_BAM_Console\"><h3>Login BAM Console<\/h3><\/span>\n<p>* Login in BAM using IE (NOT Firefox): <a href=\"http:\/\/localhost:9001\/OracleBAM\">http:\/\/localhost:9001\/OracleBAM<\/a><br \/>\n&#8211; User name: weblogic<br \/>\n&#8211; Password: welcome1<\/p>\n<span id=\"Create_Subfolders\"><h3>Create Subfolders<\/h3><\/span>\n<p>* Click on <strong>Architect <\/strong>button to open the Architect application page.<br \/>\n* In the upper left corner &#8220;Folders&#8221; pane, click the <strong>Data Objects<\/strong> folder.<br \/>\n* In the right side pane, click <strong>Create Subfolder<\/strong> link.<br \/>\n* Enter <strong>Training<\/strong> and click <strong>Create Folder<\/strong> button.<br \/>\n* Click <strong>Continue<\/strong> button.<br \/>\n* Create another subfolder named <strong>POProcessing<\/strong> <em>within<\/em> the newly created Training folder.<\/p>\n<span id=\"Create_Data_Objects\"><h3>Create Data Objects<\/h3><\/span>\n<p>* Click <strong>POProcessing<\/strong> folder on the &#8220;Folders&#8221; pane.<br \/>\n* In the right pane, click <strong>Create Data Object<\/strong> link.<br \/>\n&#8211; Name for new Data Object: <strong>Orders<\/strong><br \/>\n&#8211; Tip text: <strong>Orders<\/strong><br \/>\n* Click <strong>Add a field<\/strong> link to add the following fields<\/p>\n<pre>Order ID String 30\r\nCustomer ID String 30\r\nProduct Name String 50\r\nItem Type String 30\r\nPrice Decimal 10\r\nQuantity Decimal 10\r\nStatus String 50\r\nTotal Calculated Price * Quantity\r\nReceived Date Timestamp\r\n<\/pre>\n<p>* Click <strong>Create Data Object<\/strong> button.<br \/>\n* Click <strong>Continue<\/strong> button.<\/p>\n<span id=\"Define_BAM_Dashboard\"><h2>Define BAM Dashboard<\/h2><\/span>\n<span id=\"Open_Active_Studio\"><h3>Open Active Studio<\/h3><\/span>\n<p>* Go back to the BAM welcome page, i.e. first page after logging in.<br \/>\n* Click <strong>Active Studio<\/strong> link to open BAM Active Studio application page.<br \/>\n* Click <strong>Shared Reports<\/strong> tab so we can create a report everyone can view.<\/p>\n<span id=\"Create_Report_Folders\"><h3>Create Report Folders<\/h3><\/span>\n<p>* Click <strong>Create a new folder<\/strong> link in Organize pane named <strong>Training<\/strong>.<br \/>\n* Double click newly created <strong>Training<\/strong> folder to open it.<br \/>\n* Click <strong>Create a new folder<\/strong> link in Organize pane again to create a subfolder named <strong>POProcessing<\/strong>.<br \/>\n* Double click <strong>POProcessing<\/strong> folder to open.<\/p>\n<span id=\"Create_a_New_Report\"><h3>Create a New Report<\/h3><\/span>\n<p>* Click <strong>Create A New Report<\/strong> button.<br \/>\n* Select &#8220;Three tiles with horizontal tile on the top and two square tiles on the bottom&#8221; layout.<br \/>\n* Name the report <strong>POProcessing Report<\/strong> by &#8220;Click to add a report title&#8221; on title bar.<\/p>\n<span id=\"Configure_Top_Tile\"><h4>Configure Top Tile<\/h4><\/span>\n<p>* On the top tile, click <strong>Updating Ordered List<\/strong> icon.<br \/>\n* On the Choose Data Object dialog,<br \/>\n&#8211; Double click Training folder<br \/>\n&#8211; Double click POProcessing folder<br \/>\n&#8211; Select Orders<br \/>\n&#8211; Click Next button<br \/>\n&#8211; Click <strong>Select All<\/strong> to the right of Data Fields.<br \/>\n&#8211; Rearrange data fields with the up and down arrow.<br \/>\n&#8211; Click <strong>Next<\/strong> and <strong>Finish<\/strong>.<\/p>\n<span id=\"Configure_Lower_Left_Tile\"><h4>Configure Lower Left Tile<\/h4><\/span>\n<p>* Select <strong>3D Pie Chart<\/strong>.<br \/>\n* Select <strong>Orders <\/strong>as data object.<br \/>\n* Select <strong>Item Type<\/strong> data field as Group By option.<br \/>\n* Select <strong>Total data<\/strong> field as Chart Values option.<br \/>\n* Select <strong>Percentage of Total<\/strong> as Summary Function option.<br \/>\n* Click <strong>Next<\/strong>.<br \/>\n* Click <strong>Change View Properties<\/strong>.<br \/>\n* Set View Title to  <strong>Percentage of Total Sales by Item Type<\/strong>.<br \/>\n* Click <strong>OK<\/strong>.<\/p>\n<span id=\"Configure_Lower_Right_Tile\"><h4>Configure Lower Right Tile<\/h4><\/span>\n<p>* Select <strong>3D Bar Chart<\/strong>.<br \/>\n* Select <strong>Orders<\/strong> as data object.<br \/>\n* Select <strong>Status<\/strong> data field as Group By option.<br \/>\n* Select<strong> Order ID<\/strong> field as Chart Values.<br \/>\n* Select <strong>Count<\/strong> as Summary Function(s).<br \/>\n* Click <strong>Next<\/strong>.<br \/>\n* Click <strong>Change View Properties<\/strong>.<br \/>\n* Set View Title to <strong>Purchase Orders by Status<\/strong>.<br \/>\n* Click <strong>OK<\/strong>.<\/p>\n<span id=\"Save_Report\"><h4>Save Report<\/h4><\/span>\n<p>* Click <strong>Save Report<\/strong> link under Actions pane.<br \/>\n* Choose<strong> Shared Reports\/Training\/POProcessing<\/strong> subfolder<br \/>\n* Accept default report name of POProcessing Report.<br \/>\n* Click <strong>OK<\/strong> button.<\/p>\n<span id=\"Configure_BAM_Adapter_on_WebLogic_Server\"><h2>Configure BAM Adapter on WebLogic Server<\/h2><\/span>\n<p>* BAM adapter is used to send events to data object from POProcessing composite.<\/p>\n<span id=\"Create_BAM_Plan_Directory\"><h3>Create BAM Plan Directory<\/h3><\/span>\n<p>* Create BAM plan directory on BAM server machine<\/p>\n<pre lang=\"bash\">\r\nmkdir \/opt\/oracle\/Middleware\/home_11gr1\/Oracle_SOA1\/soa\/BAMPlan\r\n<\/pre>\n<span id=\"Configure_BAM_Adapter\"><h3>Configure BAM Adapter<\/h3><\/span>\n<p>* Login WebLogic Admin Console (<a href=\"http:\/\/localhost:7001\/console\/login\/LoginForm.jsp\">http:\/\/localhost:7001\/console\/login\/LoginForm.jsp<\/a>).<br \/>\n* Click <strong>Deployments<\/strong> in Domain Structure pane.<br \/>\n* Search and click <strong>OralceBamAdapter<\/strong>.<br \/>\n* Click on <strong>Configuration<\/strong> tab.<br \/>\n* Click on <strong>Outbound Connection Pools<\/strong> sub-tab.<br \/>\n* Expand <strong>oracle.bam.adapter.adc.RMIConnectionFactory<\/strong>.<br \/>\n* Click<strong> eis\/bam\/rmi<\/strong>.<br \/>\n* Enter following values (note, you need to hit enter key after enter a value):<br \/>\nHostName: <strong>localhost<\/strong><br \/>\nInstanceName: <strong>ADCServer1<\/strong><br \/>\nPassword: <strong>welcome1<\/strong><br \/>\nPortNumber: <strong>9001<\/strong><br \/>\nUserName: <strong>weblogic<\/strong><br \/>\n* Click <strong>Save<\/strong> button. Use newly created path as plan path:<br \/>\nPath: \/opt\/oracle\/Middleware\/home_11gr1\/Oracle_SOA1\/soa\/BAMPlan\/Plan.xml<br \/>\n* Click <strong>OK<\/strong>.<\/p>\n<span id=\"Redeploy_BAM_Adapter\"><h3>Redeploy BAM Adapter<\/h3><\/span>\n<p>* Click <strong>Deployments <\/strong>in Domain Structure pane.<br \/>\n* Search and select <strong>OralceBamAdapter<\/strong>.<br \/>\n* Click <strong>Update <\/strong>button.<br \/>\n* Accept the default selections and click Finish button.<br \/>\n* Check that BAM Adapter is depployed on bam_server1 server instance.<\/p>\n<span id=\"Add_BAM_Connection_to_POProcessing\"><h2>Add BAM Connection to POProcessing<\/h2><\/span>\n<p>* Open JDeveloper<br \/>\n* Open <strong>POProcessing <\/strong>application<br \/>\n* Right click POProcessing application and select <strong>New&#8230;<\/strong><br \/>\n* Select<strong> General -> Connections -> BAM Connection<\/strong> and click <strong>OK<\/strong>.<br \/>\n* Accept default name of BAMServerConnection1 and click <strong>Next<\/strong>.<br \/>\n* Enter connection values:<br \/>\nBAM Web Host: <strong>localhost<\/strong><br \/>\nBAM Server Host: <strong>localhost<\/strong><br \/>\nUser Name: <strong>weblogic<\/strong><br \/>\nPassword: <strong>welcome1<\/strong><br \/>\nHTTP Pot: <strong>9001<\/strong><br \/>\nJNDI Port: <strong>9001<\/strong><br \/>\n* Click <strong>Next<\/strong>.<br \/>\n* Click <strong>Test Connection<\/strong>.<\/p>\n<pre>\r\nTesting HTTP connection\t...  success.\r\nTesting Data Object browsing\t...  success.\r\nTesting JNDI connection\t...  success.\r\n\r\n3 of 3 tests successful.\r\n<\/pre>\n<p>* Click <strong>Finish<\/strong>.<\/p>\n<span id=\"Use_BAM_Adapter_in_POProcessing\"><h2>Use BAM Adapter in POProcessing<\/h2><\/span>\n<span id=\"Add_BAM_Adapter_to_POProcessing\"><h3>Add BAM Adapter to POProcessing<\/h3><\/span>\n<p>* Open POProcessing <strong>composite.xml<\/strong> file.<br \/>\n* Drag and drop <strong>BAM Adapter<\/strong> onto External References.<br \/>\n* On Adapter Configuration Wizard dialogs,<br \/>\n&#8211; Click <strong>Next <\/strong>on Welcome screen<br \/>\n&#8211; Enter  <strong>OrdersBAMAdapter <\/strong>as service name.<br \/>\n&#8211; Browse and select <strong>Orders<\/strong> as data object:<\/p>\n<pre>\r\nBAMServerConnection1 -> Training -> POProcessing -> Orders\r\n<\/pre>\n<p>&#8211; Select Operation: <strong>Upsert<\/strong><br \/>\n&#8211; Opeation Name: <strong>writetoBAM<\/strong><br \/>\n&#8211; Enable Batching: <strong>selected<\/strong><br \/>\n&#8211; Selected: <strong>_Order_ID<\/strong><br \/>\n&#8211; JNDI Name: <strong>eis\/bam\/rmi<\/strong><\/p>\n<span id=\"Connect_Mediator_Component_to_BAM_Adapter\"><h3>Connect Mediator Component to BAM Adapter<\/h2><\/span>\n<p>* Wire routePO mediator component to newly added BAM adapter.<br \/>\n* Double click <strong>routePO <\/strong>mediator component to open the routePO.mplan file.<br \/>\n* Click the transform icon for BAM adapter and create a new mapper file:<\/p>\n<pre>\r\nCustID -> _Customer_ID\r\nID -> _Order_ID\r\nproductName -> _Product_Name\r\nitemType -> _Item_Type\r\nquantity -> _Quantity\r\nstatus -> _Status\r\n<\/pre>\n<p>* Save all.<\/p>\n<span id=\"Test_BAM_Adapter_Connection\"><h3>Test BAM Adapter Connection<\/h3><\/span>\n<p>* Redeploy POProcessing<br \/>\n* Test with input message<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>SMALL1-VALID<\/ns1:ID>\r\n            <ns1:productName>iPod Shuffle<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>100.99<\/ns1:price>\r\n            <ns1:quantity>3<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>8765-8765-8765-8765<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<span id=\"Check_Data_Object_Contents\"><h3>Check Data Object Contents<\/h3><\/span>\n<p>* Log into BAM console.<br \/>\n* Click <strong>Architect <\/strong>to open Architect application.<br \/>\n* In Folders pane, click <strong>Data Objects -> Training -> POProcessing<\/strong> folder.<br \/>\n* In Data Objects pane, click <strong>DataOrders<\/strong>.<br \/>\n* In right pane, click <strong>contents<\/strong> link.<br \/>\n* Check that Orders data object contains data rows.<\/p>\n<span id=\"Add_BAM_Sensors_to_BPEL_Process\"><h2>Add BAM Sensors to BPEL Process<\/h2><\/span>\n<span id=\"Set_Order_Status_to_8216Pending_Approval8217\"><h4>Set Order Status to &#8216;Pending Approval&#8217;<\/h4><\/span>\n<p>* Open JDev.<br \/>\n* Open POProcessing <strong>composite.xml<\/strong> file.<br \/>\n* Double click <strong>approveLargeOrder <\/strong>BPEL component to open it.<br \/>\n* Double click <strong>assignCCNumber <\/strong>activity to open it.<br \/>\n* Copy <strong>&#8216;Pending Approval&#8217;<\/strong> (with single quotes) to the status field of the Order output Variable (<strong>ouputVariable\/payload\/\/ns2:Order\/ns2:status<\/strong>).<\/p>\n<span id=\"Add_sensor:_PendingApprovalActivitySensor\"><h4>Add sensor: <strong>PendingApprovalActivitySensor<\/strong><\/h4><\/span>\n<p>* On the upper right corner of editor pane, click <strong>Monitor<\/strong> button next to the BPEL button to turn on Monitor perspective.<br \/>\n* Right click <strong>assignCCNumber <\/strong>icon and select &#8220;<strong>Create -> Sensors<\/strong>&#8221; to open the Create Activity Sensor dialog.<br \/>\n&#8211; Name: <strong>PendingApprovalActivitySensor<\/strong><br \/>\n&#8211; Activity Name: <strong>assignCCNumber<\/strong><br \/>\n&#8211; Evaluation Time: <strong>Completion<\/strong><br \/>\n* Click the green plus sign in Activity Variable Sensors pane to open the Create Activity Variable Sensor dialog.<br \/>\n&#8211; Variable XPath: <strong>$outputVariable\/payload\/ns2:Order<\/strong><br \/>\n&#8211; Output Namespace: <strong>http:\/\/xmlns.oracle.com\/ns\/order<\/strong><br \/>\n&#8211; Output Datatype: <strong>OrderType<\/strong><br \/>\n* Click <strong>OK <\/strong>to close Create Activity Sensor dialog.<br \/>\n* Notice that assignCCNumber activity icon has a new sensor icon in it.<\/p>\n<span id=\"Add_sensor_action:_PendingApprovalSensorAction\"><h4>Add sensor action: <strong>PendingApprovalSensorAction<\/strong><\/h4><\/span>\n<p>* With <strong>approveLargeOrder.bpel<\/strong> file open, open Structure panel (<strong>View -> Structure<\/strong>)<br \/>\n* Right click <strong>Sensor Actions<\/strong> folder and select <strong>Create -> BAM Sensor Action&#8230;<\/strong> to open the Create Sensor Action dialog.<br \/>\n&#8211; Action Name:  <strong>PendingApprovalSensorAction<\/strong><br \/>\n&#8211; Sensor:  <strong>PendingApprovalActivitySensor<\/strong><br \/>\n&#8211; Data Object: <strong>Training\/POProcessing\/Orders<\/strong> (Click magnifying glass and browse to BAMServerConnection1 -> Training -> POProcessing -> Orders)<br \/>\n&#8211; Operation: <strong>Upsert<\/strong><br \/>\n&#8211; Keys: <strong>_Order_ID<\/strong><br \/>\n&#8211; Map File: <strong>bam\\xsl\\PendingApprovalSensorAction.xsl<\/strong> and map <strong>payload\/variableData\/data\/Order<\/strong> to<strong> Orders1Collection\/_Orders<\/strong>.<br \/>\n&#8211; BAM Connection Factory JNDI: <strong>eis\/bam\/rmi<\/strong><br \/>\n&#8211; Enable Batching: <strong>checked<\/strong><br \/>\n* Click <strong>OK<\/strong>.<\/p>\n<span id=\"Add_sensor:_CallbackActivitySensor\"><h4>Add sensor: <strong>CallbackActivitySensor<\/strong><\/h4><\/span>\n<p>* Right click <strong>callbackClient <\/strong>invoke activity at the end of BPEL process. Select <strong>Create -> Sensor&#8230;<\/strong><br \/>\n&#8211; Name: <strong>CallbackActivitySensor<\/strong><br \/>\n&#8211; Evaluation Time: <strong>Activation<\/strong><br \/>\n* Click the <strong>green plus sign<\/strong> in Activity Variable Sensors pane to open the Create Activity Variable Sensor dialog.<br \/>\n&#8211; Variable XPath: <strong>$outputVariable\/payload\/ns2:Order<\/strong><br \/>\n&#8211; Output Namespace: <strong>http:\/\/xmlns.oracle.com\/ns\/order<\/strong><br \/>\n&#8211; Output Datatype: <strong>OrderType<\/strong><br \/>\n* Click <strong>OK <\/strong>to close Create Activity Sensor dialog.<\/p>\n<span id=\"Add_sensor_action:_CallbackSensorAction\"><h4>Add sensor action: <strong>CallbackSensorAction<\/strong><\/h4><\/span>\n<p>* With <strong>approveLargeOrder.bpel<\/strong> file open, open Structure panel (View -> Structure)<br \/>\n* Right click <strong>Sensor Actions<\/strong> folder and select<strong> Create -> BAM Sensor Action&#8230;<\/strong> to open the Create Sensor Action dialog.<br \/>\n&#8211; Action Name:  <strong>CallbackSensorAction<\/strong><br \/>\n&#8211; Sensor:  <strong>CallbackActivitySensor<\/strong><br \/>\n&#8211; Data Object: <strong>Training\/POProcessing\/Orders<\/strong> (Click magnifying glass and browse to BAMServerConnection1 -> Training -> POProcessing -> Orders)<br \/>\n&#8211; Operation: <strong>Upsert<\/strong><br \/>\n&#8211; Keys: <strong>_Order_ID<\/strong><br \/>\n&#8211; Map File: <strong>bam\\xsl\\CallbackSensorAction.xsl<\/strong> and map <strong>payload\/variableData\/data\/Order<\/strong> to <strong>Orders1Collection\/_Orders<\/strong>.<br \/>\n&#8211; BAM Connection Factory JNDI: <strong>eis\/bam\/rmi<\/strong><br \/>\n&#8211; Enable Batching: <strong>checked<\/strong><br \/>\n* Click <strong>OK<\/strong>.<br \/>\n* Save all.<\/p>\n<span id=\"Test_BPEL_Sensors\"><h3>Test BPEL Sensors<\/h3><\/span>\n<p>* Redeploy <strong>POProcessing<\/strong>.<br \/>\n* Test with input message that contains invalid credit card number:<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>LARGE1-INVCC<\/ns1:ID>\r\n            <ns1:productName>Stereo<\/ns1:productName>\r\n            <ns1:itemType>Music<\/ns1:itemType>\r\n            <ns1:price>150.99<\/ns1:price>\r\n            <ns1:quantity>50<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>4321-4321-4321-4321<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* Log into BAM console<br \/>\n* Start <strong>Active Viewer<\/strong> application.<br \/>\n* Click<strong> Select Report<\/strong> and select <strong>POProcessing <\/strong>Report<br \/>\n* Notice that new purchase order is shown on the ordered list with status of invalidCreditCard:<\/p>\n<pre>\r\nLARGE1-INVCC  1111  Stereo  Music  150.99  50  7,549.5  invalidCreditCard\r\n<\/pre>\n<span id=\"Test_Large_Order\"><h4>Test Large Order<\/h4><\/span>\n<p>* Test with input message that has order larger than 5000 and valid credit card:<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>LARGE1-VALCC<\/ns1:ID>\r\n            <ns1:productName>Stereo<\/ns1:productName>\r\n            <ns1:itemType>Music<\/ns1:itemType>\r\n            <ns1:price>150.99<\/ns1:price>\r\n            <ns1:quantity>50<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* Open <strong>Active Viewer<\/strong> and check that new order is shown on the ordered list with a status of &#8220;<strong>Pending Approval<\/strong>&#8220;.<\/p>\n<pre>\r\nLARGE1-VALCC 1111 Stereo Music 150.99 50 7,549.5 Pending Approval\r\n<\/pre>\n<p>* Log into <strong>Worklist <\/strong>application to approve the order.<br \/>\n* Check that order status is changed to &#8220;Approved&#8221;.<\/p>\n<pre>\r\nLARGE1-VALCC 1111 Stereo Music 150.99 50 7,549.5 approved \r\n<\/pre>\n<span id=\"Issues\"><h2>Issues<\/h2><\/span>\n<span id=\"Cannot_Find_Sensor_Tab\"><h3>Cannot Find Sensor Tab<\/h3><\/span>\n<p> * Since JDev 11.1.1.2, all monitor features have been moved into a new perspective call &#8220;Monitor&#8221;. Click the <strong>Monitor<\/strong> button next to the BPEL button on the upper right corner of the editor pane to turn on Monitor perspective.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is part of the Oracle SOA11g hands on tutorials. Define Data Object * Define data object to hold event data. Login BAM Console * Login in BAM using IE (NOT Firefox): http:\/\/localhost:9001\/OracleBAM &#8211; User name: weblogic &#8211; Password: welcome1 &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=2788\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[100],"tags":[],"class_list":["post-2788","post","type-post","status-publish","format-standard","hentry","category-soa11g"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-IY","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2788"}],"version-history":[{"count":24,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2788\/revisions"}],"predecessor-version":[{"id":10639,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2788\/revisions\/10639"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}