[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [xmlblaster-devel] Get connection states of connected nodes...



Matthew Sargent wrote:
Marcel,

Thanks for the info, that sounds like the way to do it, but it may be more
than I really need right now. Given that I have a list of the node ids, can
I make a simple query to see if they are connected to my local xmlBlaster
instance? I can query my local node for the nodeList using:

MsgUnit[] msgs = con.get(
"<key oid='__cmd:/node/?nodeList'/>",
"<qos/>");
Say we have the master 'heron' and the slave 'avalon'.
If you open jconsole for heron you will see avalon as a client and you click into its session to see its connection state.
The same is possible with __cmd: messages/telnet.
and that gives me the nodeList, but when I attempt to get any information
about any of those nodes, I get an error:

errorCode=user.illegalArgument message=#1.1.1 Query of foreign cluster node
'vsp' is not implemented, sorry '/node/vsp/?numTopics' rejected
Yes, the forwarding of a __cmd to the remote cluster node to find out its attributes (like topic names) is not implemented.


I can, however, query my local node for the same information and I get it:

<key oid='__cmd:/node/stauntonstc/?numTopics'/>' =  <qos> <isGet/> </qos>
<key oid='__cmd:/node/stauntonstc/?numTopics'/> <content
type='String'>3</content>

I really just need a simple method to make sure that my local cluster node
is in contact with the others.
See my first remark above, isn't this enough then?

Marcel


Matt


----- Original Message ----- From: "Marcel Ruff" <mr at marcelruff.info>
To: <xmlblaster-devel at server.xmlBlaster.org>
Sent: Wednesday, March 08, 2006 7:56 PM
Subject: Re: [xmlblaster-devel] Get connection states of connected nodes...



Matthew Sargent wrote:
Hi,

We are using the simple domain to master mapping and have setup
several mater/slave relationships. I would like to test if the
xmlBlaster instance I am connected to is further connected to others
in the cluster. I have a list of domains that I am making
subscriptions to and would like to use those to figure out if the
masters associated with each particular domain is connected. I see
many examples if you already have the master node id, but is there a
way to get the master node id for a domain so I can use that to query
the connection state?
Hmm, probably not out of the box ...

What you can certainly to is to register a native plugin in
xmlBlasterPlugins.xml,
you can take a copy of org.xmlBlaster.engine.EventPlugin.java as a base
and throw
out everything you don't need.
Find the code line where
  this.engineGlob = ...
is assigned.
With this you can call

   ClusterNode[] nodes =
this.engineGlob.getClusterManager().getClusterNodes();
   for (int i=0; i<nodes.length; i++) {
      ClusterNode node = nodes[i];
      node.getConnectionState();  // See javadoc, marks alive, polling
      node.getId();               // the nodes name


Now you know the cluster nodes and if the connection is alive.

On the other side note that the EventPlugin implements
I_SubscriptionListener.
With this listener you get notifed about all coming and going
subscriptions:
  public void subscriptionAdd(SubscriptionEvent subscriptionEvent) {
      SubscriptionInfo subscriptionInfo =
subscriptionEvent.getSubscriptionInfo();
      String domain = subscriptionInfo.getKeyData().getDomain();
      ...
  }
  public void subscriptionRemove(SubscriptionEvent subscriptionEvent) {
    ...
  }

Now you know about all subscribed domains.

You could now publish a PtP message to the clients interested or better
publish the current list
to a topic (say oid="myCurrentDomainList") where your clients retrieve
it from with get().

regards
Marcel


I would like to use the con.get() to gather this information
periodically so I can report on connection status.

Thanks,

Matt