> Hi Marcel, > > we are in charging of developing a business critical application, and >after discovering xmlBlaster we are experimenting its functionalities. > > We are using the C-Socket implentation for the connection to xmlBlaster, >the functionalities required by our xmlBlaster clients are > > 1) Get asynchronous messages > 2) do some processing > 3) publishing a new message for another client > > We tried to do the publishing inside the callback function ( like >myUpdate in the examples) > >static bool myUpdate(MsgUnitArr *msgUnitArr, void *userData, >XmlBlasterException *exception) >{ > ..................... > > MsgUnit m; > > // here we create a message > XmlBlasterAccessUnparsed *xa = (XmlBlasterAccessUnparsed *)userData; > > char *response = (char *)0; > XmlBlasterException xmlBlasterException; > > > response = xa->publish(xa, &m, &xmlBlasterException); > > freeMsgUnitData(&m); > free(response); > > ........................ >} > > but when we publish a message the callback hangs and after a while >return these error messages > >[Tue Oct 7 11:57:42 2003 ERROR >/home/myuser/xmlBlaster/src/c/socket/CallbackServerUnparsed.c] RequestId '3' >is not registered >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so(getStackTrace+0x46) >[0x4007b264] >/home/myuser/mlBlaster/lib/libxmlBlasterClientC.so(xmlBlasterDefaultLogging+ >0x6f) [0x4007bde7] >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so [0x40076c5d] >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so [0x40076ebb] >/lib/i686/libpthread.so.0 [0x40028881] >/lib/i686/libc.so.6(__clone+0x57) [0x420e3887] > >[Tue Oct 7 11:57:42 2003 ERROR >/home/myuser/xmlBlaster/src/c/socket/CallbackServerUnparsed.c] PANIC: Did >not expect an INVOCATION 'R'='82' as a callback >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so(getStackTrace+0x46) >[0x4007b264] >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so(xmlBlasterDefaultLogging >+0x6f) [0x4007bde7] >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so [0x40076f97] >/lib/i686/libpthread.so.0 [0x40028881] >/lib/i686/libc.so.6(__clone+0x57) [0x420e3887] > >[Tue Oct 7 11:57:42 2003 ERROR >/home/myuser/xmlBlaster/src/c/socket/CallbackServerUnparsed.c] Received >unknown callback methodName=publish >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so(getStackTrace+0x46) >[0x4007b264] >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so(xmlBlasterDefaultLogging >+0x6f) [0x4007bde7] >/home/myuser/xmlBlaster/lib/libxmlBlasterClientC.so [0x4007716d] >/lib/i686/libpthread.so.0 [0x40028881] >/lib/i686/libc.so.6(__clone+0x57) [0x420e3887] > We don't have any idea about this happens, and where is the problem. Do >you have any example of how to implement this functionality?> > > Whilst using the Java API the publishing of a message from a callback >works. > > Do you think that is better to develop the clients using Java, are the >Java APIs more complete, stable ....? > > > Is it available an 'how to' document > > Kindest regards > > Settimio
Hi Settimio,
i expected something like the behavior as you experience, see the TODO section hint:
http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.c.socket.html#todo
Publishing() within the update() thread will dead lock and after a timeout of 60 sec you will see the above errors. You need to open an own thread to do the publish or implement a thread pool in our SOCKET C callback library (and probably donate it to us :-).
The Java client library has a client side thread pool already, see property "dispatch/callback/plugin/socket/multiThreaded" at http://www.xmlblaster.org/xmlBlaster/doc/requirements/protocol.socket.html#configuration
The Java client library is the most sophisticated implementation compared to the other libs for C, C++, Python and Perl. It has features like client side persistence queues for swapping of huge messsage backlogs and crash recovery, see the feature matrix at
http://www.xmlblaster.org/FeatureMatrix.html
On the other hand the C library is tiny and high performing ...
best regards,
Marcel
-- http://www.xmlBlaster.org