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

RE: [xmlblaster] Subscriber getting first message only - big clue!



Global is confusing because it acts like a singleton... but isn't.  I'd
suggest that it be made into a factory - make the constructors private
and provide static methods to create each connection-specific global.
In order to avoid having to pass in the args everytime, have one of the
static factory methods take the config parameters and store them as
static members.  Have another no-arg factory method which creates a
global using those stored values.  I think this is much cleaner.

-----Original Message-----
From: Marcel Ruff [mailto:mr at marcelruff.info] 
Sent: Tuesday, April 08, 2003 2:43 AM
To: xmlblaster at server.xmlblaster.org
Subject: Re: [xmlblaster] Subscriber getting first message only - big
clue!


Hi,

HelloWorld5.java uses two connections, here
the second connection clones a global:

   ...
   Global globReceiver = glob.getClone(null);
   receiver = globReceiver.getXmlBlasterAccess();

   ConnectQos qos = new ConnectQos(receiver.getGlobal());
   ConnectReturnQos conRetQos = receiver.connect(qos, new I_Callback() {
   ...

The getClone(String[]) is probably the way to go.

The Global is a 'local stack' of execution, the
local settings of a client connection (and as well
the local settings of an embedded xmlBlaster server).
With this approach you can have many independent
client connections and embedded servers in the same
JVM.

We don't use ANY singletons in xmlBlaster (apart from
finals) as they are only causing problems.
Global can be seen as a connection specific singleton.

Since this is now the second time that somebody
gets confused about using different global instances
for different connections we need to think about
the design or a better naming ... any ideas?


David Hooker wrote:
> Well, if I call "new Global()" more than once, it prints a warning
> message to the screen.  So the best thing I see is to do something
like
> this:
> 
> 	global = new Global(Global.instance());

I have set this to deprecated, please use getClone() instead.

thanks

Marcel
> 
> I hope that's the preferred way to create multiple Globals.  The 3-arg
> constructor is very cumbersome.