{"id":1627,"date":"2010-07-14T14:47:35","date_gmt":"2010-07-14T19:47:35","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=1627"},"modified":"2011-08-25T12:29:32","modified_gmt":"2011-08-25T17:29:32","slug":"oraclesoasuitetutorial","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=1627","title":{"rendered":"OracleSOASuiteTutorial"},"content":{"rendered":"<span id=\"Download\"><h1>Download<\/h1><\/span>\n<p>* For 10gR1: <a href=\"http:\/\/download.oracle.com\/otn\/nt\/ias\/101310\/soademo_101310_prod.zip\">http:\/\/download.oracle.com\/otn\/nt\/ias\/101310\/soademo_101310_prod.zip<\/a><\/p>\n<span id=\"Setup_Environment\"><h1>Setup Environment<\/h1><\/span>\n<span id=\"Create_DB_Schema\"><h2>Create DB Schema<\/h2><\/span>\n<pre lang=\"sql\">\r\nset ORACLE_HOME=C:\\prog\\oracle\\product\\10.2.0\\db_1\r\nset ORACLE_SID=orcl\r\necho %ORACLE_HOME%\r\necho %ORACLE_SID%\r\n\r\nset SOADEMO_HOME=C:\\jml\\work\\rfid\\doc\\com\\oracle\\soa\\10.1.3.1.0\\SOADEMO\r\necho %SOADEMO_HOME%\r\ncd %SOADEMO_HOME%\r\n\r\nsqlplus \/nolog\r\nSQL> connect sys\/orcl as sysdba\r\nSQL>@build.sql\r\nSQL> connect soademo\/oracle\r\nConnected.\r\nSQL> select * from tab;\r\n\r\nTNAME                          TABTYPE  CLUSTERID\r\n------------------------------ ------- ----------\r\nSSN                            TABLE\r\nITEMS                          TABLE\r\nADDRESS                        TABLE\r\nCUSTOMER                       TABLE\r\nCUSTOMER_ADDRESS               TABLE\r\nORDERS                         TABLE\r\nPRODUCT                        TABLE\r\nEJB_TAB_ID_GEN                 TABLE\r\nFEDEXSHIPMENT                  TABLE\r\n\r\n9 rows selected.\r\n<\/pre>\n<span id=\"Define_Data_Source_and_Connection_Pool_in_Oracle_Application_Server\"><h2>Define Data Source and Connection Pool in Oracle Application Server<\/h2><\/span>\n<p>* Create Connection Pool: soademo_pool<\/p>\n<p>* Create Data Source: jdbc\/soademoDS<\/p>\n<p>* Create a Database Adapter Connection Factory: eis\/DB\/soademo<\/p>\n<span id=\"Set_Up_Connections_in_Oracle_JDeveloper\"><h2>Set Up Connections in Oracle JDeveloper<\/h2><\/span>\n<p>* Create a Database Connection to the SOADEMO Schema: SOADEMO<\/p>\n<p>* Create a Connection to Oracle Application Server: SoademoApplicationServer<\/p>\n<p>* Create a Connection to the Integration Server: SoademoIntegConnection<\/p>\n<span id=\"Create_the_SOADEMO_Application_in_JDeveloper\"><h2>Create the SOADEMO Application in JDeveloper<\/h2><\/span>\n<span id=\"CustomerService_Project\"><h1>CustomerService Project<\/h1><\/span>\n<p>The CustomerService project provides methods that enable client applications, such as the SOADemo-Client application, to retrieve customer information from the database and add customers to the database.<br \/>\n* Create a New Project for CustomerService<br \/>\n* Create Entity Beans from Tables in the Database<br \/>\n&#8211; Create New -> EJB -> Entities from tables (JPA\/EJB 3.0)<br \/>\n&#8211; Select Address and Customer tables<br \/>\n* Edit persistence.xml to include<\/p>\n<pre lang=\"xml\"<jta-data-source>jdbc\/soademoDS<\/jta-data-source><\/pre>\n<p>* Create a Session Bean in the business Directory<br \/>\n&#8211; Create New -> EJB -> Session Bean (EJB1.1\/2.x\/3.0)<br \/>\n* Define Additional Queries in Customer.java<br \/>\n* Use a Database Sequence to Generate Address IDs in Address.java<br \/>\n* Edit Session Facade for the Session Bean (CustomerServiceBean.java)<br \/>\n* Add and Modify Methods in the Session Bean (CustomerServiceBean.java)<br \/>\n&#8211; Modify queryCustomerFindCustomerById<br \/>\n&#8211; Modify queryCustomerFindCustomerByEmail<br \/>\n&#8211; Add getCustomerStatus and addNewCustomer Methods<br \/>\n* Add JSR-181 Annotations to the Web Service Endpoint Interface (CustomerService.java)<br \/>\n* Create EJB JAR Deployment Profile for the CustomerService Project<br \/>\n* Deploy CustomerService<br \/>\n* View the WSDL for CustomerService<br \/>\n&#8211; http:\/\/localhost:8888\/CustomerService\/CustomerService?WSDL<\/p>\n<span id=\"FulfillmentESB_Project\"><h1>FulfillmentESB Project<\/h1><\/span>\n<p>The FulfillmentESB project is an ESB project. After an order has been approved, the SOAOrderBooking project invokes the FulfillmentESB project to determine the shipping method for the order.<br \/>\n* Create a New Project for FulfillmentESB<br \/>\n* Create a System Called &#8220;Fulfillment&#8221;<br \/>\n* Create the &#8220;OrderFulfillment&#8221; Routing Service<br \/>\n* Create the &#8220;Shipment&#8221; Routing Service<br \/>\n* Create the &#8220;USPSShipment&#8221; Adapter (File Adapter)<br \/>\n* Create the &#8220;FedexShipment&#8221; Adapter (Database Adapter)<br \/>\n* Create the &#8220;FulfillmentBatch&#8221; Adapter (JMS Adapter)<br \/>\n* Create Routing Rules<br \/>\n&#8211; Between OrderFulfillment and Shipment<br \/>\n&#8211; Between OrderFulfillment and JMS Adapter<br \/>\n&#8211; Between Shipment and USPSShipment<br \/>\n&#8211; Between Shipment and FedexShipment<br \/>\n* Register the FulfillmentESB Project<\/p>\n<span id=\"CreditService_Project\"><h1>CreditService Project<\/h1><\/span>\n<p>Web services from WSDL. The CreditService project checks whether a customer\u2019s credit card is valid or not.<br \/>\n* Create a New Project for CreditService<br \/>\n* Copy the WSDL File<br \/>\n* Generate Java from the WSDL<br \/>\n* Build CreditService<br \/>\n* Write the Code to Perform Credit Card Validation<br \/>\n* Verify Hostname and Port in CreditService.wsdl<br \/>\n* Update the Context-Root<br \/>\n* Rebuild CreditService<\/p>\n<span id=\"RapidService_Project\"><h1>RapidService Project<\/h1><\/span>\n<p>Web services from Java. The RapidService project represents a supplier that provides price quotes for customer orders.<br \/>\n* Create a New Project for RapidService<br \/>\n* Add JSR-181 Library to the RapidService Project<br \/>\n* Create Item.java<br \/>\n* Create Quote.java<br \/>\n* Create RequestQuote.java<br \/>\n* Compile the Files<br \/>\n* Publish the Project as a Web Service<br \/>\n* Verify the Hostname and Port in the Generated WSDL File<br \/>\n* Set the Context Root to RapidService<br \/>\n* Edit the Deployment Descriptor<br \/>\n* Deploy the RapidService Project<\/p>\n<span id=\"SelectManufacturer_Project\"><h1>SelectManufacturer Project<\/h1><\/span>\n<p>The SelectManufacturer project is an asynchronous BPEL process. This means that it contains a receive activity to initiate the BPEL process flow and an invoke activity to call back the client asynchronously with the results (that is, the quote) at the end of the flow.<br \/>\n* Create a New BPEL Project for SelectManufacturer<br \/>\n* Create &#8220;SelectService&#8221; Partner Link<br \/>\n* Define Variables for the SelectManufacturer Project<br \/>\n&#8211; inputVariable<br \/>\n&#8211; outputVariable<br \/>\n* Receive Order Data from the Client through a Receive Activity<br \/>\n* Assign Values to be Returned<br \/>\n* Return Values to the Client Using an Invoke Activity<br \/>\n* Deploy the BPEL Process<br \/>\n* Viewing SelectManufacturer in the Oracle BPEL Control<\/p>\n<span id=\"SOAOrderBooking_Project\"><h1>SOAOrderBooking Project<\/h1><\/span>\n<p>A BPEL project for the main flow in the SOA Order Booking application. It sends the order information to the appropriate services at the appropriate times. For example, it contacts CreditService to check the customer\u2019s credit card, and if the credit card is acceptable, it contacts the suppliers (Select Manufacturer and Rapid Distributors) to get price quotes for the order.<\/p>\n<span id=\"Setup\"><h2>Setup<\/h2><\/span>\n<p>* Create a New BPEL Project for SOAOrderBooking<br \/>\n* Copy Files to &#8216;SOAOrderBooking\\bpel&#8217; subdirectory.<br \/>\n&#8211; SOAOrderBooking.wsdl<br \/>\n&#8211; OrderBookingPO.xsd<br \/>\n&#8211; OrderBookingRules.xsd<\/p>\n<span id=\"Define_Variables_for_the_SOAOrderBooking_Project\"><h2>Define Variables for the SOAOrderBooking Project<\/h2><\/span>\n<p>* Create a new variable named &#8216;inputVariable&#8217; of message type &#8216;SOAOrderBookingRequestMessage&#8217;<br \/>\n* Create a new variable named &#8216;outputVariable&#8217; of message type &#8216;SOAOrderBookingResponseMessage&#8217;<\/p>\n<span id=\"Create_8220client8221_Partner_Link\"><h2>Create &#8220;client&#8221; Partner Link<\/h2><\/span>\n<p>This client partner link represents the client, which passes data to the receiveInput activity and gets invoked at the end of the flow to receive the return value.<br \/>\n* Drag and drop &#8216;Parner Link&#8217; icon.<br \/>\n&#8211; Name: &#8216;client&#8217;.<br \/>\n&#8211; WSDL File: SOAOrderBooking.wsdl<br \/>\n&#8211; Partner Link Type: select SOAOrderBooking (automatically filled in for you).<br \/>\n&#8211; Partner Role: select SOAOrderBookingRequester.<br \/>\n&#8211; My Role: select SOAOrderBookingProvider.<br \/>\n&#8211; Process: leave it blank.<\/p>\n<span id=\"Receive_Input_from_the_Client_Receive_Activity\"><h2>Receive Input from the Client (Receive Activity)<\/h2><\/span>\n<p>Create a receive activity to receive the input data from the client. In the receive activity, you also define a sensor to send data to a JMS topic.<br \/>\n* Create the Receive Activity<br \/>\n&#8211; Drag and drop &#8216;Receive&#8217; activity.<br \/>\nName: receiveInput<br \/>\nOperation: initiate<br \/>\nVariable: inputVariable<br \/>\nCreate instance: check<br \/>\n* Create a Sensor for the Receive Activity<br \/>\n&#8211; Click &#8216;Create&#8217; in sensor tab<br \/>\nName: InstanceStart<br \/>\nEvaluation time: complete<br \/>\nVariable XPath: $inputVariable<br \/>\nOutput Namespace: http:\/\/www.globalcompany.com\/ns\/OrderBooking<br \/>\nOutput Datatype: SOAOrderBookingRequestMessage<br \/>\n&#8211; Create sensor action<br \/>\nName: InstanceStart.<br \/>\nPublish Type: JMS Topic.<br \/>\nJMS Connection Factory: jms\/TopicConnectionFactory.<br \/>\nPublish Target: jms\/demoTopic.<br \/>\nFilter: leave blank.<br \/>\nEnable: select this option.<\/p>\n<span id=\"Insert_Order_Information_in_the_Database_8220InsertOrderIntoDB8221_Scope\"><h2>Insert Order Information in the Database (&#8220;InsertOrderIntoDB&#8221; Scope)<\/h2><\/span>\n<p>In this scope, you create activities to insert the order information into the database.<\/p>\n<span id=\"Create_a_Database_Adapter_for_Writing_to_the_ORDERS_Table\"><h3>Create a Database Adapter for Writing to the ORDERS Table<\/h3><\/span>\n<p>* Drag and drop &#8216;Database Adatper&#8217; icon.<br \/>\nName: Order<br \/>\n&#8211; Database info<br \/>\nConnection: SOADEMO<br \/>\nJNDI Name: eis\/DB\/SOADEMO<br \/>\nPerform an operation on a table: Insert or Update (Merge)<br \/>\nImprt table: ORDERS, ITEMS<br \/>\n&#8211; Partner role: Order_role<\/p>\n<span id=\"Create_a_Database_Adapter_for_Retrieving_the_Order_ID_from_the_Database\"><h3>Create a Database Adapter for Retrieving the Order ID from the Database<\/h3><\/span>\n<p>Before you can insert order information in the ORDERS table in the database, you need to retrieve the order ID from the database. The order ID is generated from a database sequence.<br \/>\n* Drag and drop &#8216;Database Adapter&#8217; icon<br \/>\nName: OrderSequence<br \/>\nOperation type: Execute Custom SQL<br \/>\nSQL: select order_seq_id_gen.nextval from dual<br \/>\nPartner role: OrderSequence_role<\/p>\n<span id=\"Create_the_8220InsertOrderIntoDB8221_Scope\"><h3>Create the &#8220;InsertOrderIntoDB&#8221; Scope<\/h3><\/span>\n<p>* Drag and drop &#8216;Scope&#8217; icon.<br \/>\n&#8211; Name: enter InsertOrderIntoDB.<br \/>\n&#8211; Variable Access Serializable: do not select.<br \/>\n* Create new variable named &#8216;orderRequest&#8217; of message type &#8216;OrdersColllection_msg&#8217;<br \/>\n* Create new variable named &#8216;orderSequenceInput&#8217; of message type &#8216;OrderSequenceInput_msg&#8217;<br \/>\n* Create new variable named &#8216;orderSequenceOutput&#8217; of message type &#8216;OrderSequenceOutputCollection_msg&#8217;<\/p>\n<span id=\"Retrieve_the_Order_ID_from_the_Database_Sequence_8220GetOrderId8221_Invoke_Activity\"><h3>Retrieve the Order ID from the Database Sequence (&#8220;GetOrderId&#8221; Invoke Activity)<\/h3><\/span>\n<p>* Drag and drop &#8216;Invoke&#8217; icon.<br \/>\n* Drag Invoke icon arrow and drop in &#8216;OrderSequence&#8217; database adatper.<br \/>\n&#8211; Name: GetOrderId<br \/>\n&#8211; Operation: select OrderSequence.<br \/>\n&#8211; Input Variable: orderSequenceInput.<br \/>\n&#8211; Output Variable: orderSequenceOutput.<\/p>\n<span id=\"Prepare_the_Order_ID_and_Order_Status_Information_8220AssignOrderStatus8221_Assign_Activity\"><h3>Prepare the Order ID and Order Status Information (&#8220;AssignOrderStatus&#8221; Assign Activity)<\/h3><\/span>\n<p>* Drag and drop &#8216;Assign&#8217; activity. Name it &#8216;AssignOrderStatus&#8217;<br \/>\n* Create order id copy operation<br \/>\n* Create order status copy operation<\/p>\n<span id=\"Create_the_Mapping_File_8220TransformOrder8221_BPEL_Service\"><h3>Create the Mapping File (&#8220;TransformOrder&#8221; BPEL Service)<\/h3><\/span>\n<p>In this transform service, you create a file called TransformOrder.xsl to map the incoming order information to the schema defined in Order_table.xsd, which prepares it for insertion in the database. Order_table.xsd was created by the Adapter Configuration wizard that you ran in Section 8.7.1, &#8220;Create a Database Adapter for Writing to the ORDERS Table&#8221;.<br \/>\n* Drag and drop &#8216;Transform&#8217; icon. Name it &#8216;TransformOrder&#8217;<br \/>\n* In Transform tab<br \/>\n&#8211; Source Variable: inputVariable.<br \/>\n&#8211; Source Part: payload.<br \/>\n&#8211; Target Variable: orderRequest.<br \/>\n&#8211; Target Part: OrdersCollection.<br \/>\n&#8211; Mapper File: enter TransformOrder.xsl and click the Create Mapping icon (the middle icon). This displays the Data Mapping tool for TransformOrder.xsl.<\/p>\n<span id=\"Insert_the_Order_Information_into_the_Database_8220InsertOrder8221_Invoke_Activity\"><h3>Insert the Order Information into the Database (&#8220;InsertOrder&#8221; Invoke Activity)<\/h3><\/span>\n<p>* Drag and drop &#8216;Invoke&#8217; icon.<br \/>\n* Drag Invoke icon arrow and drop in &#8216;Order&#8217; dadabase adatper.<br \/>\n&#8211; Name: enter InsertOrder.<br \/>\n&#8211; Partner Link: should be set to Order.<br \/>\n&#8211; Operation: select write.<br \/>\n&#8211; Input Variable: orderRequest.<\/p>\n<span id=\"Retrieve_Information_About_the_Customer_8220CustomerService8221_Scope\"><h2>Retrieve Information About the Customer (&#8220;CustomerService&#8221; Scope)<\/h2><\/span>\n<p>This scope invokes the CustomerService service to retrieve information about the customer. It uses the assign activity to populate variables with the returned information.<br \/>\n* Create the &#8220;CustomerService&#8221; Partner Link<br \/>\n&#8211; Copy CustomerSvc.wsdl to bpel directory<br \/>\n&#8211; Verify CustomerSvc.wsdl for host\/port<br \/>\n&#8211; Drop Partner Link icon in a Services swimlane<br \/>\n* Create the &#8220;CustomerService&#8221; Scope<br \/>\n&#8211; Drag and drop &#8216;Scope&#8217; icon. Name it &#8216;CustomerService&#8217;.<br \/>\n&#8211; Create variable named &#8216;customerServiceRequest&#8217; of message type &#8216;CustomerService_findCustomerById&#8217;<br \/>\n* Assign Customer ID to the findCustomerById Operation (&#8220;AssignRequest&#8221; Assign Activity)<br \/>\n&#8211; Drag and drop &#8216;Assign&#8217; icon. Name it &#8216;AssignRequest&#8217;.<br \/>\n&#8211; Create new copy operation to copy customer id to scope.<br \/>\n* Create a Variable to Contain the Results of findCustomerById (&#8220;customerServiceResponse&#8221; Process Variable)<br \/>\nThe customerServiceResponse variable is used to contain the results of the findCustomerById operation.<br \/>\n&#8211; Create the &#8216;customerServiceResponse&#8217; variable in the SOAOrderBooking scope with message type &#8216;CustomerService_findCustomerByIdResponse&#8217;. The variable is created at this level so that any activity in this BPEL process can access it.<br \/>\n* Invoke findCustomerById (&#8220;GetCustInfo&#8221; Invoke Activity)<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; icon.<br \/>\n&#8211; Drag invoke arrow and drop into &#8216;CustomerService&#8217; partner link.<br \/>\nName: GetCustInfo<br \/>\nOperation: findCustomerById<br \/>\nInput variable: customerServiceRequest<br \/>\nOutput variable: customerServiceResponse<br \/>\n* Create the &#8220;AssignInitialCustomerResponse&#8221; Assign Activity<br \/>\nThis assign activity appends the customer\u2019s first name and last name to the payload part of the inputVariable. It uses an XML fragment to perform this append operation.<br \/>\n* Copy the Customer\u2019s First and Last Names to the inputVariable (&#8220;AssignCustomerResponse&#8221; Assign Activity)<br \/>\nThis assign activity assigns the first and last names of the customer (which were retrieved from the database) to the inputVariable.<\/p>\n<span id=\"Verify_the_Customers_Credit_Card_8220CreditService8221_Scope\"><h2>Verify the Customer\u2019s Credit Card (&#8220;CreditService&#8221; Scope)<\/h2><\/span>\n<p>This scope verifies the credit of the customer. If a customer does not pass the credit check, the scope throws a fault and does not continue with the rest of the flow.<br \/>\n* Create &#8220;CreditValidatingService&#8221; Partner Link<br \/>\n&#8211; Copy CreditValidatingService.wsdl to bpel directory<br \/>\n&#8211; Verify CustomerSvc.wsdl for host\/port<br \/>\n&#8211; Drop Partner Link icon in a Services swimlane<br \/>\n* Create the &#8220;CreditService&#8221; Scope<br \/>\n&#8211; Drag and drop a new scope. Name it CreditService.<br \/>\n&#8211; Create a new variable &#8216;validateRequest&#8217; of &#8216;CreditCardValidationRequestMessage&#8217; message type.<br \/>\n&#8211; Create a new variable &#8216;validateResponse&#8217; of &#8216;CreditCardValidationResponseMessage&#8217; message type.<br \/>\n* Assign the Credit Card Number and Credit Card Type Information (&#8220;InitializeRequest&#8221; Assign Activity)<br \/>\n&#8211; Drag and drop &#8216;Assign&#8217; activity to scope. Name it &#8216;InitializeRequest&#8217;.<br \/>\n&#8211; Create a new &#8216;Copy Operation&#8217; to copy from &#8216;\/ns9:findCustomerByIdResponse\/ns9:return\/ns9:creditcardnumber&#8217; to &#8216;\/ns12:CreditCard\/ccNum&#8217;<br \/>\n&#8211; Create a new &#8216;Copy Operation&#8217; to copy from &#8216;\/ns9:findCustomerByIdResponse\/ns9:return\/ns9:creditcardtype&#8217; to &#8216;\/ns12:CreditCard\/ccType&#8217;<br \/>\n* Verify the Customer\u2019s Credit Card (&#8220;InvokeCreditService&#8221; Invoke Activity)<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; icon to scope.<br \/>\n&#8211; Drag Invoke arrow and drop in &#8216;CreditValidatingService&#8217; partner link.<br \/>\nName: InvokeCreditService<br \/>\nPartner link: CreditValidatingService<br \/>\nOperation: verifyCC<br \/>\nInput variable: validateRequest<br \/>\nOutput variable: validateResponse<br \/>\n* Create the &#8220;OrderBookingFault&#8221; Process Variable<br \/>\n&#8211; Open the main &#8216;SOAOrderBooking&#8217; scope.<br \/>\n&#8211; Add a new variable &#8216;OrderBookingFault&#8217; of &#8216;SOAOrderBookingFaultMessage&#8217; message type.<br \/>\n* Check the Results of the Credit Card Validation (Switch Activity)<br \/>\n&#8211; Drag and drop &#8216;Switch&#8217; activity below &#8216;InvokeCreditService&#8217; activity.<br \/>\n&#8211; Delete &#8216;otherwise&#8217; case<br \/>\n&#8211; Build expression bpws:getVariableData(&#8216;validateResponse&#8217;,&#8217;valid&#8217;,&#8217;\/ns12:valid&#8217;) = &#8216;false&#8217;<br \/>\n* Set the Value of the OrderBookingFault Variable (&#8220;AssignFault&#8221; Assign Activity)<br \/>\n&#8211; Drag and drop an &#8216;Assign&#8217; activity onto switch case activity. Name it &#8216;AssignFault&#8217;<br \/>\n* Create the &#8220;ThrowCreditFault&#8221; Throw Activity<br \/>\n&#8211; Drag and drop a &#8216;Throw&#8217; activity below &#8216;AssignFault&#8217; activity. Name it &#8216;ThrowCreditFault&#8217;<\/p>\n<span id=\"Set_up_Oracle_Business_Rules\"><h2>Set up Oracle Business Rules<\/h2><\/span>\n<p>* Create sample repository<br \/>\n&#8211; Create &#8216;rules\\oracle&#8217; directory in &#8216;bpel&#8217; directory.<br \/>\n&#8211; Open *IE*. Login http:\/\/localhost:8888\/ruleauthor\/. Open Repository tab.<br \/>\n&#8211; Create &#8216;sample_repository&#8217; in SOADEMO\\SOAOrderBooking\\bpel\\rules\\oracle directory.<br \/>\n* Create a Dictionary in the Repository: A dictionary typically contains rulesets for an application.<br \/>\n&#8211; Create new dictionary named &#8216;OrderBookingRules&#8217;<br \/>\n* Copy OrderBookingRules.xsd to the Oracle Application Server Machine (if not already done)<br \/>\n* Generate JAXB Classes for the Elements in the XML Schema<br \/>\n&#8211; Click &#8216;Definitions&#8217; tab -> XML Fact -> Create<br \/>\nXML Schema: OrderBookingRules.xsd<br \/>\nJAXB Class Directory: rules<br \/>\nPackage: com.oracle.demos.orderbooking<br \/>\n&#8211; Click &#8216;Add Schema&#8217;<br \/>\n* Import the JAXB Classes into the Oracle Business Rules Data Model: After generating the JAXB classes, you can import them into the Oracle Business Rules data model. These JAXB classes become XML facts that you can use when you create your rules.<br \/>\n&#8211; Check &#8216;com&#8217;<br \/>\n&#8211; Click &#8216;Import&#8217;<br \/>\n* Define a Variable in the Data Model<br \/>\n&#8211; Click Variable -> Create<br \/>\n* Create a Ruleset<br \/>\n* Create Rules<br \/>\n&#8211; Create the &#8220;belowLimit&#8221; Rule<br \/>\n&#8211; Create the &#8220;overLimit&#8221; Rule<br \/>\n&#8211; Create the &#8220;platinumMember&#8221; Rule<\/p>\n<span id=\"Determine_If_an_Order_Requires_Manual_Approval_8220RequiresManualApproval8221_Decide_Activity\"><h2>Determine If an Order Requires Manual Approval (&#8220;RequiresManualApproval&#8221; Decide Activity)<\/h2><\/span>\n<p>* Create the Activities in the &#8220;RequiresManualApproval&#8221; Decide Activity<br \/>\n&#8211; Drag and drop a &#8216;Decide&#8217; icon after &#8216;CreditService&#8217; scope. Name it &#8216;RequiresManualApproval&#8217;<br \/>\n* Copy Order Total and Customer Status Information (&#8220;BPEL_Var_To_Rule_Facts&#8221; Assign Activity)<br \/>\n&#8211; Double click &#8216;BPEL_Var_To_Rule_Facts&#8217;<br \/>\n* Copy the ConversationId to the dsIn Variable (&#8220;BPEL_Header&#8221; Assign Activity)<br \/>\n&#8211; Double-click the &#8220;BPEL_Header&#8221; activity to display the Assign dialog<br \/>\n* Create the &#8220;requiresApproval&#8221; Process Variable<br \/>\n* Copy the Result of the Decision Service to the requiresApproval Variable (&#8220;Facts_To_BPEL_Var&#8221; Assign Activity)<\/p>\n<span id=\"Set_Up_a_Form_to_Process_Orders_That_Require_Manual_Approval_8220requiresApproval8221_Switch\"><h2>Set Up a Form to Process Orders That Require Manual Approval (&#8220;requiresApproval&#8221; Switch)<\/h2><\/span>\n<p>* Create the Switch<br \/>\n* Set the Condition for the <case><br \/>\n* Create a Sequence in the <case> Branch<br \/>\n* Create a Human Task<br \/>\n* Create a Form for the Worklist Application: When a manager wants to see the orders that are waiting for approval, the manager logs into the Worklist application. You can access this application from the Start menu of the machine running Oracle Application Server: Start > Programs > Oracle &#8211; ORACLE_HOME_NAME > Oracle BPEL Process Manager > Worklist Application.<\/p>\n<span id=\"Handle_the_Managers_Response_8220requiresApproval8221_Switch\"><h2>Handle the Manager\u2019s Response (&#8220;requiresApproval&#8221; Switch)<\/h2><\/span>\n<p>JDeveloper created a switch for you automatically after the human task activity.<br \/>\n* Handle the Reject Case<br \/>\n&#8211; Set the Status of the Order (Assign Activity)<br \/>\n&#8211; Create a Throw Activity<br \/>\n* Handle the Approve Case<br \/>\n&#8211; Drag and drop &#8216;Empty&#8217; activity<br \/>\n* Handle the Expired Case<br \/>\n&#8211; Drag and drop &#8216;Empty&#8217; activity<\/p>\n<span id=\"Choose_a_Supplier_8220SelectSupplier8221_Scope\"><h2>Choose a Supplier (&#8220;SelectSupplier&#8221; Scope)<\/h2><\/span>\n<p>This scope sends the order information to the two suppliers, Select Manufacturer and Rapid Service, and the suppliers return their bids for the orders. The scope then chooses the supplier that provided the lower bid.<br \/>\n* Create the &#8220;SelectManufacturer&#8221; Partner Link<br \/>\n&#8211; Drag and drop &#8216;Partner Link&#8217; icon into Services swimlane.<br \/>\nName: SelectService<br \/>\nWSDL: SelectManufacturer<br \/>\nPartner Role: SelectServiceProvider<br \/>\nMy Role: SelectServiceRequester<\/p>\n<p>* Create the &#8220;RapidService&#8221; Partner Link<br \/>\n&#8211; Copy RapidService.wsdl to bpel directory.<br \/>\n&#8211; Check wsdl file for hostname and port.<br \/>\n&#8211; Drag and drop &#8216;Partner Link&#8217; icon into Services swimlane.<br \/>\nName: RapidService<br \/>\nPartner Role: RapidQuote_Role<br \/>\nMy Role: blank<br \/>\n* Create the &#8220;SelectSupplier&#8221; Scope<br \/>\n&#8211; Drag and drop &#8216;Scope&#8217; icon. Name it &#8216;SelectSupplier&#8217;<br \/>\n&#8211; Create variable &#8216;selectManufacturerResponse&#8217; of message type &#8216;RequestQuote_processRequestQuoteResponse&#8217;<br \/>\n&#8211; Create variable &#8216;rapidManufacturerResponse&#8217; of message type &#8216;RequestQuotePortType_POItemsQuoteResponse&#8217;<br \/>\n* Create a Flow Activity<br \/>\nYou use a flow activity in order to send out requests to more than one supplier at the same time. In the case of this application, you send out requests to two suppliers: Select Manufacturer and Rapid Service.<br \/>\n&#8211; Drag and drop &#8216;Flow&#8217; icon into scope. Name it &#8216;CallManufacturers&#8217;<\/p>\n<span id=\"Set_the_Activities_for_Select_Manufacturer\"><h3>Set the Activities for Select Manufacturer<\/h3><\/span>\n<p>* Create a Scope for SelectManufacturer<br \/>\n&#8211; Drag and drop &#8216;Scope&#8217; icon into left side of the flow. Name it GetSelectMfrQuote.<br \/>\n&#8211; Create variable &#8216;manufacturerRequest&#8217; of message type &#8216;RequestQuote_processRequestQuote&#8217;<br \/>\n* Create a Transform Activity (&#8220;TransformSelectRequest&#8221; Transform Activity)<br \/>\n&#8211; Drag and drop &#8216;Transform&#8217; icon into scope. Name it &#8216;TransformSelectRequest&#8217;<br \/>\nSource Variable: inputVariable<br \/>\nSource Part: payload<br \/>\nTarget Variable: manufacturerRequest<br \/>\nTarget Part: parameters<br \/>\n&#8211; Set Mapper File to &#8216;SelectTransformation.xsl&#8217; and click &#8216;Create Mapping&#8217; icon to generate the mapper file.<br \/>\n* Create an Invoke Activity<br \/>\nThis invoke activity invokes the SelectManufacturer partner link.<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; icon in scope.<br \/>\n&#8211; Drag invoke arrow and drop into &#8216;SelectService&#8217; partner link. Name it &#8216;InvokeSelectManufacturer&#8217;<br \/>\nOperation: processRequestQuote<br \/>\nInput Variable: manufacturerRequest<br \/>\n* Create a receive activity<br \/>\nThis receive activity receives the quote from the Select Manufacturer.<br \/>\n&#8211; Drag and drop &#8216;Receive&#8217; icon<br \/>\n&#8211; Drag receive arrow and drop into &#8216;SelectService&#8217; partner link.<br \/>\nName: ReceiveSelectManufacturer<br \/>\nOperation: processRequestQuoteResponse<br \/>\nVariable: selectManufacturerResponse<\/p>\n<span id=\"Set_the_Activities_for_Rapid_Manufacturer\"><h3>Set the Activities for Rapid Manufacturer<\/h3><\/span>\n<p>* Create a Scope for Rapid Manufacturer<br \/>\n&#8211; Drag and drop &#8216;Scope&#8217; icon into right side of the flow. Name it &#8216;CallRapidManufacturer&#8217;<br \/>\n&#8211; Create variable &#8216;manufacturerRequest&#8217; of message type &#8216;RequestQuotePortType_POItemsQuote&#8217;<br \/>\n* Create a Transform Activity (&#8220;TransformRapidRequest&#8221; Transform Activity)<br \/>\n&#8211; Drag and drop &#8216;Transform&#8217; icon into scope. Name it &#8216;TransformRapidRequest&#8217;<br \/>\nSource Variable: inputVariable<br \/>\nSource Part: payload<br \/>\nTarget Variable: manufacturerRequest<br \/>\nTarget Part: parameters<br \/>\n&#8211; Set Mapper File to &#8216;RapidTransformation.xsl&#8217; and click &#8216;Create Mapping&#8217; icon to generate the mapper file.<br \/>\n* Create an Invoke Activity<br \/>\nThis invoke activity invokes the RapidService partner link.<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; icon in scope.<br \/>\n&#8211; Drag invike arrow and drop into &#8216;RapidService&#8217; partner link. Name it &#8216;InvokeRapidManufacturer&#8217;<br \/>\nOperation name: POItemsQuote<br \/>\nInput Variable: manufacturerRequest<br \/>\nOutput Variable: rapidManufacturerResponse<\/p>\n<span id=\"Create_a_Switch_to_Pick_the_Lower-Priced_Quote\"><h2>Create a Switch to Pick the Lower-Priced Quote<\/h2><\/span>\n<p>* Drag and drop a &#8216;Switch&#8217; icon below<br \/>\n* Name it &#8216;SelectByPrice&#8217;<br \/>\n* Set the Condition for the Switch<br \/>\n&#8211; Double click <case> box<br \/>\n&#8211; Set condition to<br \/>\nnumber(bpws:getVariableData(&#8216;selectManufacturerResponse&#8217;,&#8217;parameters&#8217;,&#8217;\/ns16:processRequestQuoteResponseElement\/ns16:return\/ns16:supplierPrice&#8217;) < bpws:getVariableData('rapidManufacturerResponse','parameters','\/ns17:POItemsQuoteResponse\/ns17:return\/ns17:supplierPrice'))\n* Set the Activities for Select Manufacturer: Define the activities for Select Manufacturer if it bid the lower quote. In this case, assign the bid value to the supplierPrice field of inputVariable.\n- Drag and drop an 'Assign' activity into <case> box. Name it &#8216;AssignSelectManufacturer&#8217;<br \/>\n&#8211; Create a copy operation to copy supplier price from SelectManufacturer to inputVariable<br \/>\n&#8211; Create a copy operation to copy supplier name from SelectManufacturer to inputVariable<br \/>\n* Set the Activities for Rapid Distributor<br \/>\n&#8211; Drag and drop an &#8216;Assign&#8217; activity into <otherwise> box. Name it &#8216;AssignRapidManufacturer&#8217;<br \/>\n&#8211; Create a copy operation to copy supplier price from RapidManufacturerto inputVariable<br \/>\n&#8211; Create a copy operation to copy supplier name from RapidManufacturerto inputVariable<\/p>\n<span id=\"Determine_the_Shipping_Method_8220PostFulfillmentReq8221_Scope\"><h2>Determine the Shipping Method (&#8220;PostFulfillmentReq&#8221; Scope)<\/h2><\/span>\n<p>This scope invokes the FulfillmentESB project, which determines how an order is to be shipped. For orders $500 and over, Fedex is the shipment method. For orders less than $500, USPS is the shipment method. These rules are defined in the FulfillmentESB project.<br \/>\n* Create the &#8220;OrderFulfillment&#8221; Partner Link<br \/>\n&#8211; Drag and drop &#8216;Partner Link&#8217; icon. Name it &#8216;OrderFulfillment&#8217;<br \/>\n* Create the &#8220;PostFulfillmentReq&#8221; Scope<br \/>\n&#8211; Drag and drop &#8216;Scope&#8217; activity. Name it &#8216;PostFulfillmentReq&#8217;<br \/>\n&#8211; Create a new variable named &#8216;orderFulfillmentRequest&#8217; with message type &#8216;PurchaseOrder_request&#8217;<br \/>\n* Copy Order Information to Scope Variable (&#8220;initializeRequest&#8221; Assign Activity)<br \/>\n&#8211; Drag and drop &#8216;Assign&#8217; activity onto scope. Name it &#8216;initializeRequest&#8217;<br \/>\n&#8211; Create a new &#8216;Copy Operation&#8217; and copy purchaseOrder from inputVariable to orderFulfillmentRequest<br \/>\n* Invoke OrderFulfillmentESB (&#8220;PostFulfillmentReq&#8221; Invoke Activity)<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; activity. Drop arrow onto OrderFulfillment partner link.<br \/>\n&#8211; Name Invoke activity &#8216;PostFulfillmentReq&#8217; with operatoin &#8216;execute&#8217; and input variable &#8216;orderFulfillmentRequest&#8217;<br \/>\n* Create a Catch-All Branch for the Scope<br \/>\nCreate a catch-all branch to catch all exceptions.<br \/>\n&#8211; Click &#8216;Add CatchAll Branch&#8217; icon<br \/>\n&#8211; Drag and drop &#8216;Empty&#8217; activity into catchall branch<\/p>\n<span id=\"Set_the_Order_Status_to_8220Completed8221_8220SetFinalOrderStatus8221_Scope\"><h2>Set the Order Status to &#8220;Completed&#8221; (&#8220;SetFinalOrderStatus&#8221; Scope)<\/h2><\/span>\n<p>This scope uses a database adapter to update the order status in the database.<br \/>\n* Create the &#8220;OrderStatus&#8221; Database Adapter<br \/>\n&#8211; Drag and drop &#8216;Database Adapter&#8217; into Service lane. Name it &#8216;OrderStatus&#8217;<br \/>\n&#8211; Setup to &#8216;Update only&#8217; on &#8216;ORDERS&#8217; table<br \/>\n* Create the &#8220;SetFinalOrderStatus&#8221; Scope<br \/>\n&#8211; Drag and drop &#8216;Scope&#8217; activity. Name it &#8216;SetFinalOrderStatus&#8217;<br \/>\n&#8211; Create a variable named &#8216;orderStatusRequest&#8217; of message type &#8216;OrdersCollection_msg&#8217;<br \/>\n* Prepare the Order ID and Status (&#8220;AssignOrderStatus&#8221; Assign Activity)<br \/>\n&#8211; Drag and drop &#8216;Assign&#8217; icon into scope. Name it &#8216;AssignOrderStatus&#8217;.<br \/>\n&#8211; Create a copy operation and copy order id to scope.<br \/>\n&#8211; Create another copy operation and copy string(&#8216;completed&#8217;) to status<br \/>\n* Update the Order Status in the Database (&#8220;UpdateOrderStatus&#8221; Invoke Activity)<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; icon into scope<br \/>\n&#8211; Drag arrow and drop into OderStaus partner link.<br \/>\nName: UpdateOrderStatus<br \/>\n&#8211; Input variable: orderStatusRequest<\/p>\n<span id=\"Send_an_Email_Notification_to_the_Customer_8220NotifyCustomer8221_Scope\"><h2>Send an Email Notification to the Customer (&#8220;NotifyCustomer&#8221; Scope)<\/h2><\/span>\n<p>This scope uses the notification service to send an email to the customer when the order is fulfilled.<br \/>\n* Create the Notification Scope<br \/>\n&#8211; Drag and drop &#8216;Email&#8217; activity icon. Name it &#8216;NotifyCustomer&#8217;<br \/>\n&#8211; Use XPath expression for email detals<\/p>\n<span id=\"Call_Back_the_Client_8220callbackClient8221_Invoke_Activity\"><h2>Call Back the Client (&#8220;callbackClient&#8221; Invoke Activity)<\/h2><\/span>\n<p>* Create the Invoke Activity<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; activity icon.<br \/>\n&#8211; Drag arrow and drop on &#8216;Client&#8217; partner link.<br \/>\nName: callbackClient<br \/>\nInput variable: outputVariable<br \/>\n&#8211; Add a Sensor<br \/>\nName: InstanceCompleted<br \/>\nEvaluation Time: Completion<br \/>\nActivity variable: inputVariable<br \/>\nActivity action: send to JMS topic<\/p>\n<span id=\"Add_a_Catch_Branch_to_the_Project\"><h2>Add a Catch Branch to the Project<\/h2><\/span>\n<p>* Add a &#8220;client:OrderBookingFault&#8221; Catch<br \/>\n* Catch dialog<br \/>\nNamespace URI: enter http:\/\/www.globalcompany.com\/ns\/OrderBooking.<br \/>\nLocal Part: enter OrderBookingFault.<br \/>\nFault Variable: enter OrderBookingFault.<br \/>\n* Create a Sequence<br \/>\n&#8211; Drag and drop a sequence icon in the catch area.<br \/>\n* Create a Scope<br \/>\n&#8211; Drag and drop Scope icon in the catch area<br \/>\nName: SetOrderStatus<br \/>\n&#8211; Create a variable named &#8216;orderStatusRequest&#8217; of message type &#8216;OrdersColllection_msg&#8217;<br \/>\n* Create the Assign Activity<br \/>\n&#8211; Drag and drop &#8216;Assign&#8217; activity onto the scope. Name it AssignOrderStatus.<br \/>\n&#8211; Create three copy operations to copy purchase order id, order status, and comments into scope.<br \/>\n* Create the Invoke Activity<br \/>\n&#8211; Drag and drop &#8216;Invoke&#8217; activity. Drag arrow and drop into &#8216;OrderStatus&#8217; database adapter.<br \/>\nName: SetFaultedOrderStatus.<br \/>\nInput variable: orderStatusRequest<br \/>\n* Create a Sensor in the Invoke Activity<br \/>\nName: InstanceFaulted<br \/>\nEvaluation Time: Completion<br \/>\nInput variable: OrderBookingFault<br \/>\nAction: publishh to JMS topic<\/p>\n<span id=\"Deploy_the_Project\"><h2>Deploy the Project<\/h2><\/span>\n<p>* Open build.properties<\/p>\n<pre lang=\"bash\">\r\nplatform = ias_10g\r\ndomain = default\r\nrev = 1.0\r\nadmin.user = oc4jadmin\r\nadmin.password =welcome1\r\nhttp.hostname = usres-ming-lj2.na.uis.unisys.com\r\nhttp.port = 8888\r\nj2ee.hostname = usres-ming-lj2.na.uis.unisys.com\r\nrmi.port = 12401\r\nopmn.requestport = 6003\r\noc4jinstancename = home\r\n<\/pre>\n<p>* Add build.properties to ant.xml<br \/>\n* Run ant<\/p>\n<span id=\"Creating_the_OrderBookingESB_Project\"><h1>Creating the OrderBookingESB Project<\/h1><\/span>\n<p>The OrderBookingESB project is the entry point to the SOA Order Booking application. The SOADemo-Client application invokes the OrderBookingESB project when a customer clicks the Place Order button. The OrderBookingESB project invokes the SOAOrderBooking project, which is a BPEL project that defines the main flow of the SOA Order Booking application. The OrderBookingESB project is an ESB project.<\/p>\n<span id=\"Create_a_New_Project_for_OrderBookingESB\"><h2>Create a New Project for OrderBookingESB<\/h2><\/span>\n<p>* Create a new ESB Project. Name it &#8216;OrderBookingESB&#8217;<\/p>\n<span id=\"Create_a_System_Called_8220OrderBooking8221\"><h2>Create a System Called &#8220;OrderBooking&#8221;<\/h2><\/span>\n<span id=\"Create_the_8220OrderBookingService8221_Routing_Service\"><h2>Create the &#8220;OrderBookingService&#8221; Routing Service<\/h2><\/span>\n<p>* Copy xsd files to project root directory.<br \/>\n&#8211; OrderBookingRequest.xsd<br \/>\n&#8211; OrderBookingPO.xsd<br \/>\n* Drag and drop Routing service<br \/>\nName: enter OrderBookingService.<br \/>\n&#8211; System\/Group: set to OrderBooking.<br \/>\n&#8211; Generate WSDL From Schemas: select this option.<br \/>\n&#8211; Schema Location: SOAOrderBookingProcessRequest.<br \/>\n&#8211; Operation Name: enter initiate.<br \/>\n&#8211; Namespace: enter http:\/\/www.globalcompany.com\/ns\/OrderBooking.<br \/>\n* Invoke the SOAOrderBooking Process (&#8220;OrderBookingProcess&#8221; External Service)<br \/>\n&#8211; Drag and drop &#8216;SOAP Service&#8217;.<br \/>\nName: OrderBookingProcess<br \/>\nWSDL File: http:\/\/USRES-MING-LJ2.na.uis.unisys.com:8888\/orabpel\/default\/SOAOrderBooking\/SOAOrderBooking?wsdl<br \/>\nPort Type: SOAOrderBooking<br \/>\n* Set up Routing Rules for OrderBookingService<br \/>\nSet up routing rules so that requests can go from OrderBookingService to OrderBookingProcess.<br \/>\n&#8211; Add routing rule<br \/>\n&#8211; Add filter<br \/>\n* Register OrderBookingESB project.<\/p>\n<span id=\"Interfacing_the_Client_Application_with_the_SOA_Order_Booking_Application\"><h1>Interfacing the Client Application with the SOA Order Booking Application<\/h1><\/span>\n<p>* Create SOADEMO-Client application.<\/p>\n<span id=\"Invoking_Services_from_CustomerService\"><h2>Invoking Services from CustomerService<\/h2><\/span>\n<p>This section describes how to generate a web service proxy for CustomerService, and how to call it from the client application.<\/p>\n<span id=\"Generate_a_Web_Service_Proxy_for_CustomerService\"><h3>Generate a Web Service Proxy for CustomerService<\/h3><\/span>\n<p>* Create a new Empty Project. Name it &#8216;CustomerService&#8217;<br \/>\n* Create a new Web Service Proxy<br \/>\nWSDL Document URL: http:\/\/usres-ming-lj2.na.uis.unisys.com:8888\/CustomerService\/CustomerService?WSDL<br \/>\nPort Endpoints, select Run against a service deployed to an external server<br \/>\nPackage Name: oracle.soademo.view.services<br \/>\nRoot Package for Generated Types: oracle.soademo.view.services.runtime.<br \/>\nSelect all the options on the page:<br \/>\n* Build files<\/p>\n<span id=\"Write_Code_to_Invoke_the_Web_Service_Proxy_for_CustomerService\"><h3>Write Code to Invoke the Web Service Proxy for CustomerService<\/h3><\/span>\n<span id=\"Invoking_the_OrderBookingESB_Project\"><h2>Invoking the OrderBookingESB Project<\/h2><\/span>\n<p>* Retrieve the Concrete WSDL URL from ESB console (OrderBooking -> OrderBookingService -> Definition)<br \/>\nhttp:\/\/usres-ming-lj2.na.uis.unisys.com:8888\/esb\/wsil\/OrderBooking\/OrderBookingService?wsdl<\/p>\n<span id=\"Create_the_Project_in_the_Client_and_Create_the_Web_Service_Proxy\"><h3>Create the Project in the Client and Create the Web Service Proxy<\/h3><\/span>\n<p>* Create a new Empty Project. Name it &#8216;OrderService&#8217;<br \/>\n* Create a new Web Service Proxy<br \/>\nWSDL Document URL: http:\/\/usres-ming-lj2.na.uis.unisys.com:8888\/esb\/wsil\/OrderBooking\/OrderBookingService?wsdl<br \/>\nPort Endpoints: select Run against a service deployed to an external server. Replace localhost with the name of the machine running the OrderBookingESB project.<br \/>\nPackage Name: enter oracle.soademo.view.services.<br \/>\nRoot Package for Generated Types: enter com.globalcompany.ns.order.<br \/>\nSelect all the options on the page.<br \/>\n* Build files<\/p>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* <a href=\"http:\/\/download.oracle.com\/docs\/cd\/B31017_01\/core.1013\/b28938\/toc.htm\">Oracle\u00ae SOA Suite Quick Start Guide 10g (10.1.3.1.0) Part Number B28938-01<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Download * For 10gR1: http:\/\/download.oracle.com\/otn\/nt\/ias\/101310\/soademo_101310_prod.zip Setup Environment Create DB Schema set ORACLE_HOME=C:\\prog\\oracle\\product\\10.2.0\\db_1 set ORACLE_SID=orcl echo %ORACLE_HOME% echo %ORACLE_SID% set SOADEMO_HOME=C:\\jml\\work\\rfid\\doc\\com\\oracle\\soa\\10.1.3.1.0\\SOADEMO echo %SOADEMO_HOME% cd %SOADEMO_HOME% sqlplus \/nolog SQL> connect sys\/orcl as sysdba SQL>@build.sql SQL> connect soademo\/oracle Connected. SQL> select * from &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=1627\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","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":[72,48,69,35],"tags":[],"class_list":["post-1627","post","type-post","status-publish","format-standard","hentry","category-bpel","category-esb","category-oc4j","category-oracle"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-qf","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1627","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=1627"}],"version-history":[{"count":4,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1627\/revisions"}],"predecessor-version":[{"id":3106,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1627\/revisions\/3106"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}