BPEL Development with ActiveBPEL Brendan Tansey What is BPEL? • Business Process Execution Language for Web Services (BPEL4WS) • Web service orchestration language • Simple arithmetic and logical operators • Lecture on Oct 26th! BPEL Development • Requires: – BPEL Engine – BPEL Developer (or text editor, for the masochistic) • BPEL Engine – – – – Executes BPEL processes IBM BPWS4J ActiveBPEL Engine Installation notes on Wiki BPEL Developer • Oracle BPEL Designer – Oracle BPEL Process Manager (OC4J, JBOSS, BEA WebLogic) • • • • Eclipse BPEL Project Parasoft BPEL Maestro Intalio Designer Many others ActiveBPEL Designer • • • • • Construct graphical workflows Assist with WSDL creation Simulate workflow execution Prepare service for deployment Deploy service to ActiveBPEL server • Eclipse-based • Makes your life easier ActiveBPEL Designer Cons • Windows-only – – – – Windows lab in CSC 1-67 Go to CSC 1-43 to get an account Install onto network drive Make workspace on network drive • Quirky – Hence, presentation ActiveBPEL Designer Demo • Create a simple web service that adds 4 input numbers • Uses an existing web service – Takes 4 numbers as input {a,b,c,d} – Returns two sums as output {a+b, c+d} • Create client for service Live Demo! (with slides) Using an external web service to add four numbers Create project/BPEL Add external web references Create sequence • Drag ‘Sequence’ from palette • In sequence, insert “Operation Wizard” • Follow wizard instructions, creating a new WSDL file in your current project • Refresh project so new WSDL is visible Create service instance • Force first element of sequence to create a new instance Using external services • Add WSDLs as imports Using external services • Create input and output variables for services Create assignment activity • Assign our service’s input to input for other service Invoke web service • Create invoke activity with Operation Wizard • Select local copy of remote WSDL (can’t use remote copy – buggy) • Choose port type and operation • Create new PLT • Add to existing WSDL (buggy) Assign service output • Use built-in arithmetic operator Simulating execution Providing sample input Error! • Need to initialize complex types before using • Initialize with literals. <in0 xmlns="" xmlns:def="http://siffleur.cs.ualberta.ca:9999/axis/services/AddFunction1Service" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:Complex"> <i xmlns:tns="Sum4WSDL" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:double">0.0</i> <r xmlns:tns="Sum4WSDL" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:double">0.0</r> </in0> • • • • Red = Invoked service’s namespace Green = Your service’s namespace Yellow = Variable type & element types Magenta = Variable structure Creating complex responses <?xml version="1.0" encoding="UTF-8"?> <ns1:addComplexReturn xmlns:ns1="urn:BeanService"> <i>4.2</i> <r>5.7</r> </ns1:addComplexReturn> Successful simulation Can now examine output variable Deploying your service • The ActiveBPEL Engine requires that all services are packaged into .bpr files. – These packages need deployment descriptors and manifests • These files need to be placed in the Tomcat/bpr directory • Or, deployed through ActiveBPEL Designer (easiest) Creating a Deployment Descriptor Finish deployment ‘Binding’ must be set to ‘RPC Encoded’ Change Deployment URL to Match ActiveBPEL Engine installation Creating a client • See sample code on Wiki • String endpoint = URL of service • URL can be found in Axis servlet • call.setOperationName(new QName(“”,”<processName>”); • <processName> from BPEL Admin Console Engine admin client • http://siffleur.cs.ualberta.ca:9999/active-bpel/ • Can conflict with other Tomcat applications. Errors in the admin client are likely caused by this. • Can view process graph for deployed services online Tips • If working from home, authenticate to access.cs.ualberta.ca to access non-standard remote ports. • When creating an ‘invoke’ activity, copy remote WSDL to local project in order to use it. Local copy also needs to be added to web references. More tips • ‘Invoke’ creation wizard is buggy. If you can’t select your WSDL, click ‘Create new …’ then back to ‘Use existing …’. • Remember the ‘…’ when creating static endpoints. • There is more than one way to accomplish most things in ActiveBPEL. Yet more tips • If an import isn’t being read correctly, remove it and re-add it. • If properties give errors when they should work, check imports, then re-select each value References • ActiveBPEL documentation: http://www.activebpel.org/docs/index.html • BPEL v1.1 Specifications: http://www128.ibm.com/developerworks/l ibrary/specification/ws-bpel/ • More on BPEL: next Tuesday in class