For the user
The user can make all invocations to xmlBlaster by using the class XmlBlasterAccess. This class
hides all intrinsic communication protocol dependencies. In other words if you want to write a client
to xmlBlaster you don't need any knowledge of the communication layer, i.e. CORBA, XMLRPC, SOCKET
or whatever protocol you decide to use.
For the programmer
It is relatively easy to write a plugin that handles the communication to xmlBlaster.
First of all you must make sure you have the counterpart on the server side. Lets say you want to
write the socket plugin, such a protocol is already supported on the server side (and java clients).
-
Get familiar with the details of the protocol you want to implement (for example by reading the
socket requirement).
-
Write a requirement describing the protocol (I should not say so since I am bad at it myself).
-
Write a class which implements I_XmlBlasterConnection (this will be the sender) and one which
implements I_CallbackServer (the receiver). Note that I_CallbackServer and I_XmlBlasterConnection
could be implemented by one single class (this is currently done in CORBA. See for that the
CorbaDriver).
-
Add the code for the creation of an instance of the sender in the method
DispatchManager::getPlugin(...) and the removal or deletion of that instance in the method
DispatchManager::releasePlugin(...).
-
Add the code for the creation of an instance of the receiver in
CbServerPluginManager::getPlugin(...) and the removal of the instance in
CbServerPluginManager::releasePlugin(...)
-
Write a test suite which tests the good work you have done
-
Since you want to enjoy but also let others enjoy and admire your work, commit the code to CVS
and make a statement on the mailing list
Normally, that is if the communication protocol driver is handled and controlled internally by the
XmlBlasterAccess class, you don't need to bother about the underlying protocol. An example is if you
are using the CORBA protocol and you you don't need/want to bother about CORBA, then you can
instantiate XmlBlasterAccess and directly work with it. In such a case XmlBlasterAccess will
create an orb instance, it will start the orb performing thread and it will clean up all corba
resources on destruction.
There are usages where this is not sufficient. Suppose you have already an application which
communicates with some other software via a particular CORBA implementation and you want to use the
same orb instance for the communication to xmlBlaster. In such a case you need to
- Instantiate the orb outside XmlBlasterAccess
- invoke orb->run() or orb->perform_work() yourself
- make a duplicate of the orb and pass it to CorbaDriverFactory::getFactory(global, orb).
It is important that you do that before you create the first instance of
XmlBlasterAccess. This way it is garanteed that XmlBlasterAccess will use the
CorbaDriverFactory (which is a singleton) with the orb you passed to it.
- You must cleanup the corba resources yourself (i.e. you need to invoke shutdown and destroy.
for example you
For situations where you have to configure and instantiate protocol specific stuff, for example as
if you would want to use an instance of an orb which you have instantiated outside XmlBlaster, you
must make sure to instantiate the protocol driver by passing all external parameters. In the
mentionned case we would create an instance of CorbaDriver by passing an external orb by assigning it
a certain instance name. Then, when instantiating an XmlBlasterAccess object we must make sure to
pass to it the same instance name. This way we make sure that we will use that particular instance of
the driver and at the same time XmlBlasterAccess does not need to know anything about the protocol it
will be using.