Technical Notes |
|
This is an example of an Execute Procedure event handler, which is triggered when a table procedure is executed.
This event handler is to generate an XML document using data from a table procedure, which is then sent to a JMS (SonicMQ) message queue.
The following sample shows output from all procedures in the CCSDemo model. The same event handler could work with all procedures; however, parameters vary according to the procedure.
<?xml version="1.0" encoding="UTF-8"?> <Transactions> <GetAccount Table="Accounts"> <FilterParameters> <AcctNumber>167439459</AcctNumber> </FilterParameters> <InputParameters/> </GetAccount> <AccountSearch Table="Accounts"> <FilterParameters> <MiddleInitial>c</MiddleInitial> <State>ri</State> <LastName>smith</LastName> </FilterParameters> <InputParameters/> </AccountSearch> <GetTransactions Table="Transactions"> <FilterParameters> <AcctNumber>167439459</AcctNumber> </FilterParameters> <InputParameters/> </GetTransactions> </Transactions> |
It is undesirable for an exception to interfere with procedure execution (unless this is the intended behavior), so log any XML-related exceptions and continue processing.
Parameters for connecting to the JMS queue can be hard coded or read from the Verastream properties files script.properties (server) or dt_script.properties (Design Tool).
This Verastream Event Handler example has 3 steps:
The first two steps are functions called from the main handler method. generateXMLdocument() generates an XML document from input parameters, filter and data parameters, appending each key/value parameter pair as an element node to either a FilterParameter or InputParameter parent node. outputDoc2String() serializes the XML document to a string, transactionXML.
public ProcedureRecordSet executeProcedure(ExecuteProcedureEvent event) throws ApptrieveException { try { generateXMLdocument(event); outputDoc2String(transactionXML); } catch (Exception e) { //throw new ApptrieveException(e.getMessage()); } } |
The remaining steps continue within executeProcedure(), prior to executing the actual table procedure. Parameters for connecting to the JMS queue are read from script.properties (server only) or dt_script.properties (Design Tool only):
broker = event.getHandlerProperty("broker"); queueName = event.getHandlerProperty("queue"); uname = event.getHandlerProperty("user"); password = event.getHandlerProperty("password"); |
Next, a transaction queue is opened, the XML string is sent to the appropriate queue, and the queue is closed.
try { queueTransactionData(broker, uname, password); sendMessage(queueName, transactionXML); closeQueueConnection(); } catch (Exception e) { //System.out.println("Caught exception: " + e.getMessage()); } |
Finally, the table procedure is executed, returning the recordset.
return event.defaultProcedure(); |
The zipped Java file and ReadMe, can be downloaded from the Download Library at logTransactionToQueue.zip.
To install the event handler, follow these steps.
To set the classpath, follow these steps, where <JMS> is the directory that contains the SonicMQ jar files:
vhi.script.classpath=<JMS>\\sonic_Client.jar;<JMS>\\broker.jar;<JMS>\\gnu-regexp-1.0.6.jar; <JMS>\\javax.jms.jar;<JMS>\\jaxp.jar;<JMS>\\xercesImpl.jar;<JMS>\\xmlParserAPIs.jar;For use by Design Tool, dt_script.properties in <VHI>\etc needs to be edited in a similar manner.
Parameters for connecting to the JMS queue can either be hard-coded or (as here) read from the Verastream properties file: script.properties (server) or dt_script.properties (Design Tool). To use properties, copy the following to the appropriate .properties file.
queue=SampleQ1 user= broker=<SonicMQ server>:2506 password= |
To test the event handler, be sure that the necessary SonicMQ broker is running. The default queues in SonicMQ are SampleQ1, SampleQ2, SampleQ3 and SampleQ4; be sure that the expected queue is availabe. In Design Tool, choose "Procedure test..." from the "Debug" menu. Select table and procedure desired. Enter Procedure filters or data parameters, click "Execute". Some messages are written to the Debug Console. A new message has been added to the desired queue. XML data is readable in the body of the message using a browser.