{"id":2067,"date":"2011-05-12T23:16:54","date_gmt":"2011-05-13T04:16:54","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=2067"},"modified":"2015-04-17T13:58:00","modified_gmt":"2015-04-17T18:58:00","slug":"soa-11g-tutorial-human-tasks","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=2067","title":{"rendered":"SOA 11g Tutorial: Human Tasks"},"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=\"#Human_Tasks_Overview\">Human Tasks Overview<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Human_Work_Flow_Service\">Human Work Flow Service<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Work_List_App\">Work List App<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Add_Human_Task_to_Composite_Diagram\">Add Human Task to Composite Diagram<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Add_Human_Task\">Add Human Task<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Call_Human_Task_from_BPEL_Process\">Call Human Task from BPEL Process<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Auto_Generate_Task_Form\">Auto Generate Task Form<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Manual_Generate_Task_Form\">Manual Generate Task Form<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Deploy\">Deploy<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Deploy_SOA_App\">Deploy SOA App<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Deploy_ApproveTaskDetails__Project\">Deploy ApproveTaskDetails  Project<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Test\">Test<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Test_Manual_PO_Approval\">Test Manual PO Approval<\/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=\"#Input_message\">Input message<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Perform_Human_Task\">Perform Human Task<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Message_Flow\">Message Flow<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#New_Order_File\">New Order File<\/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=\"#Caused_by:_java.lang.ClassNotFoundException:_oracle.adf.library.webapp.ResourceServlet\">Caused by: java.lang.ClassNotFoundException: oracle.adf.library.webapp.ResourceServlet<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Warning:_Error_assignee_not_specified\">Warning: Error assignee not specified<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#JDBC_driver_does_not_support_XA\">JDBC driver does not support XA<\/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=\"Human_Tasks_Overview\"><h2>Human Tasks Overview<\/h2><\/span>\n<span id=\"Human_Work_Flow_Service\"><h3>Human Work Flow Service<\/h3><\/span>\n<p>* Exposed as<br \/>\n&#8211; Web Service<br \/>\n&#8211; Java API<br \/>\n* Provides<br \/>\n&#8211; Task Service<br \/>\n&#8211; Task Query Service<br \/>\n&#8211; Task Metadata Service<br \/>\n&#8211; User Metadata Service<br \/>\n&#8211; Identity Service<br \/>\n&#8211; Notification Service<\/p>\n<span id=\"Work_List_App\"><h3>Work List App<\/h3><\/span>\n<p>* ADF based web app<br \/>\n* Default roles<br \/>\n&#8211; Adminitrator<br \/>\n&#8211; Process owner<br \/>\n&#8211; Supervisor<br \/>\n&#8211; Assignee<br \/>\n* Example actions<br \/>\n&#8211; Update payload<br \/>\n&#8211; Attach doc<br \/>\n&#8211; Route tasks<br \/>\n&#8211; Complete  tasks<br \/>\n* User actions<br \/>\n&#8211; Perform authorized actions<br \/>\n&#8211; Acquire and checkout shared tasks<br \/>\n&#8211; Define personal to-do tasks<br \/>\n&#8211; Define subtasks<br \/>\n&#8211; Filter tasks<br \/>\n&#8211; Define custom work queue<br \/>\n&#8211; Proxy access to other user&#8217;s work list<br \/>\n&#8211; Define vacation and delegation rules<br \/>\n&#8211; Access work history and audit trails<\/p>\n<span id=\"Add_Human_Task_to_Composite_Diagram\"><h2>Add Human Task to Composite Diagram<\/h2><\/span>\n<span id=\"Add_Human_Task\"><h3>Add Human Task<\/h3><\/span>\n<p>* Open POProcessing > composite.xml<br \/>\n* Drag and drop a Human Task icon onto Components lane and enter<br \/>\n&#8211; Name: ManualPOApproval<br \/>\n&#8211; Click OK<br \/>\n* Wire from BPEL process to human task<br \/>\n&#8211; Drag a wire from lower right corner of approveLargeOder icon to upper left of ManualPOApproval icon.<br \/>\n* Double click ManualPOApproval icon to open human task editor, enter<br \/>\n&#8211; General tab<br \/>\nTask Title: Approve Order<br \/>\nDescription: Manual approval task for large orders<br \/>\n&#8211; Data tab<br \/>\nclick green plus sign and select <em>Add other parameter<\/em> to open Add Task Parameter dialog<br \/>\nclick magnifying glass to the right of Element and browse to Project Schema Files -> internalorder.xsd -> Order<br \/>\nclick OK<br \/>\nselect Editable via worklist<br \/>\nclick OK<br \/>\n&#8211; Assignment tab<br \/>\ndouble click Edit Participant box and enter<br \/>\nType: Single<br \/>\nLable: Large Order Approver<br \/>\nclick green plus icon and select <em>Add User<\/em>. Enter weblogic in Value field<br \/>\n* Click OK<br \/>\n* Save all<br \/>\n* Close human task editor<\/p>\n<span id=\"Call_Human_Task_from_BPEL_Process\"><h3>Call Human Task from BPEL Process<\/h3><\/span>\n<p>* Open BPEL designer by double clicking BPEL icon<br \/>\n* Drag and drop a Human Task below assignApproval Assign activity<br \/>\n* Double click Human Task icon to open Human Task editor<br \/>\nTask Definition: ManualPOApproval<br \/>\n&#8211; Click [&#8230;] underneath BPEL Variable field and select Variables -> Process -> Variables -> inputVariable -> payload -> Order, click OK<br \/>\n&#8211; Click OK again on Human Task editor<br \/>\n* Drag and drop assignApproval Assign activity <strong>below <\/strong>CopyPayloadFromTask icon in the APPROVE lane<br \/>\n* Double click CopyPayloadFromTask icon in the REJECT lane<br \/>\n&#8211; drag and drop the Expression icon (with fx on it located in the upper right corner) onto <strong>outputVariable <\/strong>-> payload -> OrderType -> status field on the right field . Enter &#8216;rejected&#8217; and click ok<br \/>\n&#8211; click OK again on Edit Assign dialog.<br \/>\n* Double click CopyPayloadFromTask in the otherwise lane.<br \/>\n&#8211; Do the same and set status to &#8216;expired&#8217;<br \/>\n* Save All<\/p>\n<span id=\"Auto_Generate_Task_Form\"><h3>Auto Generate Task Form<\/h3><\/span>\n<p>* On approveLargeOrder.bpel diagram,<br \/>\n&#8211; double click ManualPOApproval1 icon<br \/>\n&#8211; click the Edit Task Definition icon (pencil) to the right of Task Definition label.<br \/>\n* On ManualPOApproval.task file screen, click Create Form -> Auto-Generate Task Form&#8230; (upper left corner), enter<br \/>\nProject Name: ApproveTaskDetails<br \/>\nDirectory: C:\\po\\POProcessing\\ApproveTaskDetails<br \/>\n* Click OK<br \/>\n* Wait until TaskDetails1.jspx opens<br \/>\n* Click Save All<\/p>\n<span id=\"Manual_Generate_Task_Form\"><h3>Manual Generate Task Form<\/h3><\/span>\n<p>* TODO<\/p>\n<span id=\"Deploy\"><h2>Deploy<\/h2><\/span>\n<span id=\"Deploy_SOA_App\"><h3>Deploy SOA App<\/h3><\/span>\n<p>* Right click POProcessing -> Deploy<\/p>\n<span id=\"Deploy_ApproveTaskDetails__Project\"><h3>Deploy ApproveTaskDetails  Project<\/h3><\/span>\n<p>* Note that right click <em>ApproveTaskDetails project -> Deploy ApproveTaskDetails&#8230;<\/em> <strong>won&#8217;t<\/strong> work.<br \/>\n* Select ApproveTaskDetails project<br \/>\n* From Application menu,<br \/>\nselect Application -> Deploy -> ApproveTaskDetails<br \/>\n* Select Deploy to Application Server, click Next<br \/>\n* Select MyAppServerConnection, click Next<br \/>\n* Select<br \/>\n&#8211; Deploy to selected instances in the domain<br \/>\n&#8211; soa_server1<br \/>\nclick Next<br \/>\n* Click Finish<\/p>\n<span id=\"Test\"><h2>Test<\/h2><\/span>\n<span id=\"Test_Manual_PO_Approval\"><h3>Test Manual PO Approval<\/h3><\/span>\n<span id=\"Input_message\"><h4>Input message<\/h4><\/span>\n<p>* Log into EM and enter the test message for POProcessing<\/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>2222<\/ns1:ID>\r\n            <ns1:productName>iPod shuffle<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>145<\/ns1:price>\r\n            <ns1:quantity>30<\/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>* Click Launch Message Flow Trace<br \/>\n&#8211; Check ManualPOApproval Human Workflow Component has a state of <strong>Running<\/strong><\/p>\n<span id=\"Perform_Human_Task\"><h4>Perform Human Task<\/h4><\/span>\n<p>* Login worklistapp<br \/>\nURL: <a href=\"http:\/\/localhost:8001\/integration\/worklistapp\">http:\/\/localhost:8001\/integration\/worklistapp<\/a><br \/>\nUsername: weblogic<br \/>\nPass: welcome1<br \/>\n* Click Approve Order in My Tasks window<br \/>\n* Click Approve or Reject<\/p>\n<span id=\"Message_Flow\"><h4>Message Flow<\/h4><\/span>\n<p>* Back in EM<br \/>\n* Click Launch Message Flow Trace<br \/>\n&#8211; Check ManualPOApproval Human Workflow Component has a state of <strong>Completed<\/strong><\/p>\n<span id=\"New_Order_File\"><h4>New Order File<\/h4><\/span>\n<p>* Check that a new order file is created<\/p>\n<span id=\"Issues\"><h2>Issues<\/h2><\/span>\n<span id=\"Caused_by:_java.lang.ClassNotFoundException:_oracle.adf.library.webapp.ResourceServlet\"><h3>Caused by: java.lang.ClassNotFoundException: oracle.adf.library.webapp.ResourceServlet<\/h3><\/span>\n<p>* You tried to deploy ApproveTaskDetails with right click <em>ApproveTaskDetails project -> Deploy ApproveTaskDetails&#8230;<\/em> method.<br \/>\n* Deploy instead with <em>Application -> Deploy -> ApproveTaskDetails<\/em> <\/p>\n<span id=\"Warning:_Error_assignee_not_specified\"><h3>Warning: Error assignee not specified<\/h3><\/span>\n<p>* This is can be ignored<br \/>\n* See <a href=\"http:\/\/forums.oracle.com\/forums\/thread.jspa?threadID=950504&#038;start=0&#038;tstart=0\">http:\/\/forums.oracle.com\/forums\/thread.jspa?threadID=950504&#038;start=0&#038;tstart=0<\/a><\/p>\n<span id=\"JDBC_driver_does_not_support_XA\"><h3>JDBC driver does not support XA<\/h3><\/span>\n<p>* Exception in soa_server1.out:<\/p>\n<pre>\r\nJDBC driver does not support XA, hence cannot be a participant in two-phase comm\r\nit. To force this participation, set the GlobalTransactionsProtocol attribute to\r\n LoggingLastResource (recommended) or EmulateTwoPhaseCommit for the Data Source\r\n= soademoDatabase\r\n        at weblogic.transaction.internal.TransactionImpl.throwRollbackException(\r\nTransactionImpl.java:1881)\r\n<\/pre>\n<p>* Cause: soademoDatabase was created with the non-XA jdbc driver.<br \/>\n* Fix: recreate soademoDatabase and make sure to select <em>Oracle&#8217;s Driver (<strong>Thin XA<\/strong>) for Service connections; Verions:9.0.1 and later<\/em> as database driver.<\/p>\n<p>* <a href=\"http:\/\/download.oracle.com\/docs\/cd\/E15523_01\/integration.1111\/e10224\/partpage_iv.htm#CHDGICFI\">OFMW Developer&#8217;s Guide: Using the Human Workflow Service Component<\/a><br \/>\n* <a href=\"http:\/\/redstack.wordpress.com\/2010\/01\/08\/human-workflow-in-11g\/\">http:\/\/redstack.wordpress.com\/2010\/01\/08\/human-workflow-in-11g\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is part of the Oracle SOA11g hands on tutorials. Human Tasks Overview Human Work Flow Service * Exposed as &#8211; Web Service &#8211; Java API * Provides &#8211; Task Service &#8211; Task Query Service &#8211; Task Metadata Service &#8211; &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=2067\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","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-2067","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-xl","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2067","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=2067"}],"version-history":[{"count":22,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2067\/revisions"}],"predecessor-version":[{"id":10663,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2067\/revisions\/10663"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}