1 / 69

ID 352 An XML / Power B uilder Messaging System

ID 352 An XML / Power B uilder Messaging System. Paul Donohue Technical Architect JP Morgan (London) techwave@pauldonohue.com. Overview. Topics we will cover. The AutoTrade System Overview of XML PowerBuilder and XML PowerBuilder and NT Services Summary Questions.

Download Presentation

ID 352 An XML / Power B uilder Messaging System

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ID 352An XML/PowerBuilder Messaging System • Paul Donohue • Technical Architect • JP Morgan (London) • techwave@pauldonohue.com

  2. Overview Topics we will cover • The AutoTrade System • Overview of XML • PowerBuilder and XML • PowerBuilder and NT Services • Summary • Questions

  3. The AutoTrade System

  4. The AutoTrade System Bond trading in England was old fashioned • Deals were sent by phone or fax • Systems did not communicate • Data was entered many times • Delays were common

  5. The AutoTrade System Something had to be done A multi-bank working group investigated possible solutions and chose IssueLink from a vendor called CapitalNET. JP Morgan developed the AutoTrade suite of programs to interface with IssueLink.

  6. The AutoTrade System IssueLink is a B2B bond trading system • Browser based • Automates workflow • Interfaces with back office systems • XML messaging

  7. The AutoTrade System The participants Dealers JP Morgan IssueLink Clearing Systems Other Banks

  8. The AutoTrade System The technology Browser or In-house AutoTrade (PB) HTTP or XML XML IssueLink (C++) HTTP or XML CNTrade (C++) Browser or In-house XML

  9. The AutoTrade System There are four AutoTrade components • All developed with PowerBuilder • AutoTrade Server • AutoTrade Console • AutoTrade Administrator • AutoTrade Support

  10. The AutoTrade System What is AutoTrade Server? • An NT Service • Receives XML messages • Parses XML messages • Processes XML messages • Sends XML messages

  11. The AutoTrade System A success story • 6 weeks development • Runs 24 x 7 • Processed $20,000,000,000 USD in 9 months • Quickest trade was 1 minute 8 seconds • 25% of trades in less than 15 minutes

  12. Overview of XML

  13. Overview of XML What is XML? • XML = Extensible Markup Language • Uses tags like in HTML • A format for describing structured data • Describes data structure and content • Separates data from its presentation

  14. Overview of XML Why use XML? • Industry standard • Platform & vendor independent • Self describing • Flexible • Caters for nested & repeating data

  15. Overview of XML An example <?xml version="1.0"?> <!--Example XML file--> <presentation code="ID352"> <title>A PB / XML Messaging System</title> <presenter>Paul Donohue</presenter> <audience>PowerBuilder Developers</audience> <time>13:30</time> <date>2001-08-13</date> </presentation>

  16. Overview of XML Parts of an XML document • XML Declaration <?xml version="1.0"?> <!DOCTYPE presentation SYSTEM “DEMO.DTD"> <!--Example XML file--> <presentation code="ID352" > <title>A PB / XML Messaging System</title> <presenter>Paul Donohue</presenter> <audience>PowerBuilder Developers</audience> <time>13:30</time> <date>2001-08-13</date> </presentation> • Prolog • Elements • Attributes • Comments • Other Parts

  17. Overview of XML Valid and well formed • Document Type Definitions (DTDs) define rules about XML data • DTDs are optional • Well formed XML follows the basic rules of XML • Valid XML follows the rules of the DTD • Get your DTD correct before you code

  18. Overview of XML SAX vs DOM • Two XML interfaces • DOM = Document Object Model • SAX = Simple API for XML • AutoTrade uses DOM

  19. Overview of XML Demonstration

  20. PowerBuilder and XML

  21. PowerBuilder and XML Why use PowerBuilder? • Why not? • PB can access OLE objects • PB is good at data manipulation • PB is good at database access

  22. PowerBuilder and XML The Microsoft Redistributable XML Parser • There are many XML parsers • Internet Explorer includes a parser • An OLE object • Can be distributed royalty free • Current version is 3 • Easy to use

  23. PowerBuilder and XML How to parse an XML file • Connect to the parser • Load the XML file • Walk the tree • Process the results • Disconnect

  24. PowerBuilder and XML Parsing XML - Connecting • Declare an OLE object variable oleobject iole_xml • Connect to the XML parser iole_xml .ConnectToNewObject("Microsoft.XMLDOM") • Set parser attributes iole_xml.async = FALSE iole_xml.validateOnParse = TRUE iole_xml.preserveWhiteSpace = FALSE

  25. PowerBuilder and XML Parsing XML - Loading • Load the XML file iole_xml.load(filename) • Any errors will be in the parseerror property iole_xml.parseerror.errorCode iole_xml.parseerror.reason iole_xml.parseerror.filepos iole_xml.parseerror.line iole_xml.parseerror.linepos iole_xml.parseerror.srcText

  26. PowerBuilder and XML Parsing XML - Walking • Find the root element lole_root = iole_xml.documentElement • Use a recursive function to walk the tree • Arguments for the function are; • The node to process (start with the root) • This node’s level (start with 1) • A “stack” to hold node details

  27. PowerBuilder and XML Parsing XML - Walking (in circles) • Find the node’s name, type and value ls_node_name = aole_node.nodename ls_node_type = aole_node.nodetypestring ls_node_value = String(aole_node.nodevalue) • Add this node’s details to the “stack” ll_max_nodes = UpperBound(ai_level) + 1 ai_xml_node_level[ll_max_nodes]= ai_node_level as_xml_node_name[ll_max_nodes] = ls_node_name as_xml_node_type[ll_max_nodes] = ls_node_type as_xml_node_value[ll_max_nodes = ls_node_value

  28. PowerBuilder and XML Parsing XML - Walking (in circles) • Process this node’s attributes ll_max_nodes = 0 lole_node_list = aole_node.attributes IF IsValid(lole_node_list) THEN ll_max_nodes = lole_node_list.length END IF FOR ll_idx = 0 TO ll_max_nodes – 1 lole_node = lole_node_list.Item(ll_idx) of_process_node (ai_level + 1, lole_node, stack) NEXT

  29. PowerBuilder and XML Parsing XML - Walking (in circles) • Repeat the recursion for the child elements lole_node_list = aole_node.childNodes • There is a hasChildNodes property lb_any_children = aole_node.hasChildNodes • But there is no hasAttributeNodes property

  30. PowerBuilder and XML Parsing XML - Processing • After parsing the XML data can be processed • Examples; • Update the database • Call a business rule object • Write to a file • Send an email

  31. PowerBuilder and XML Parsing XML - Disconnecting • Disconnect from the XML parser iole_xml.DisConnectObject() • Destroy the OLE object variable DESTROY iole_xml

  32. PowerBuilder and XML The XML DOM tree Presentation Code (ID352) #text (ID352) #comment (Example XML file) Title (NULL) #text (A PB/XML Messaging System) Presenter (NULL) #text (Paul Donohue)

  33. PowerBuilder and XML Handy hints • Record macros • Generating XML files

  34. PowerBuilder and XML Demonstration

  35. PowerBuilder and NT Services

  36. PowerBuilder and NT Services Why use PowerBuilder? • Why not? • PB can generate an EXE • PB is fairly reliable

  37. PowerBuilder and NT Services How to write an NT service • Create a timer object • Use the NT event log • Run the EXE as a service

  38. PowerBuilder and NT Services Creating the timer object • Standard class inherited from timing • Add a function to initialise the service • Add a function to finalise the service • Add code to the timer event

  39. PowerBuilder and NT Services The initialise function • Open an invisible window Open (w_service) ll_app_handle = Handle(xml_service) IF ll_app_handle = 0 THEN w_service.Visible = True END IF • Record the start in the NT event log • Start the timer running This.Start(5)

  40. PowerBuilder and NT Services The finalise function • Perform any housekeeping • Record the stop in the NT event log

  41. PowerBuilder and NT Services The timer event • Stop the timer This.Stop() • Perform one cycle of work This.of_process_a_cycle() • Force garbage collection GarbageCollect() • Restart the timer This.Start(5)

  42. PowerBuilder and NT Services A cycle of work • A discrete unit of work • Should be stateless • For an XML messaging service this might be; • Check for incoming XML files • Parse the XML files • Process the XML • Generate any outgoing XML files

  43. PowerBuilder and NT Services A cycle of work • Services can not access network drives • Services can not interact with the user • Connect to database each cycle? • Maintain connection between cycles?

  44. PowerBuilder and NT Services The NT event log • Use Win32 API calls to write to the event log • RegisterEventSource() – Retrieves a handle to the event log • ReportEvent() – Writes an entry to the event log • DeregisterEventSource() – Closes the event log handle

  45. PowerBuilder and NT Services The nasty event log warning • All messages are prefixed by a nasty warning • This is because we don’t have a message file

  46. PowerBuilder and NT Services Message files • The wording of events is stored in message files • Each has a unique ID • Messages can have placeholders • Message files are compiled into DLLs • PowerBuilder can’t create message file DLLs • Make a generic message file

  47. PowerBuilder and NT Services Using the timer object • Declare a global variable n_cst_service gnv_service • Instantiate the object in Application Open event gnv_service = CREATE n_cst_service gnv_service.of_initialise() • Destroy the object in Application Close event gnv_service.of_finalise() DESTROY gnv_service

  48. PowerBuilder and NT Services Running as a service • Compile your application into an EXE. • Windows NT4 Resource Kit utilities • SRVANY run any EXE as an NT service • SRVINSTW install an NT service

  49. PowerBuilder and NT Services Using SRVINSTW – Step 1 • An easy to follow wizard interface

  50. PowerBuilder and NT Services Using SRVINSTW – Step 2 • Select local machine

More Related