[Info-vax] RDB, trigger, native procedure and ActiveMQ

Jan-Erik Söderholm jan-erik.soderholm at telia.com
Mon May 31 06:36:18 EDT 2021


Den 2021-05-31 kl. 01:47, skrev Arne Vajhøj:
> Rdb features have been discussed here a few times and
> some time ago I read a bit in the Rdb manual and found
> the section on native procedure.
> 
> And since I like playing around with such stuff I
> created a little demo.
> 
> Setup:
> 
> Rdb table -> insert trigger -> procedure written in C -> STOMP library -> 
> message queue on ActiveMQ
> 
> That means that when some application (residing on VMS or
> elsewhere) insert data in that table, then another
> application (residing on VMS or elsewhere) get
> notified in near real time.
> 
> C snippet:
> 
> void stomp_send(struct dsc$descriptor *host,
>                  int port,
>                  struct dsc$descriptor *dest,
>                  struct dsc$descriptor *data)
> {
>      char host2[256];
>      char dest2[256];
>      char data2[256];
>      simple_stomp_t ctx;
>      desc2buf(host, host2);
>      desc2buf(dest, dest2);
>      desc2buf(data, data2);
>      simple_stomp_debug(0);
>      simple_stomp_init(&ctx, host2, port, print);
>      simple_stomp_write(&ctx, dest2, data2);
>      simple_stomp_close(&ctx);
> }
> 
> Define procedure in Rdb:
> 
> CREATE PROCEDURE stomp_send(IN VARCHAR(255) BY DESCRIPTOR,
>                              IN INTEGER BY VALUE,
>                              IN VARCHAR(255) BY DESCRIPTOR,
>                              IN VARCHAR(255) BY DESCRIPTOR);
> EXTERNAL NAME stomp_send LOCATION 'disk2:[arne.dbmq]cproc.exe'
> LANGUAGE GENERAL PARAMETER STYLE GENERAL
> BIND ON SERVER SITE;
> 
> Insert trigger:
> 
> CREATE TRIGGER t1insert
> AFTER INSERT ON t1
> (CALL stomp_send('arnepc4', 61613, '/queue/t1insert', CAST(t1.f1 AS 
> VARCHAR(10)))) FOR EACH ROW;
> 
> Tested with 3 database clients:
> * Cobol on VMS
> * Java on PC
> * C# on PC
> and 1 message queue client:
> * Python on VMS
> 
> It works.
> 
> More details and complete code available at:
>      https://www.vajhoej.dk/arne/articles/vmstd1.html
> 
> Arne
> 
> 

Was it the "database clients" that did the table insert?
If so, it would work from any source, it doesn't matter *how* the
record was inserted into the table, the trigger would fire anyway.




More information about the Info-vax mailing list