[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [xmlblaster-devel] LOCAL not working?
On Thu, 2003-09-18 at 10:34, Marcel Ruff wrote:
> Peter Antman wrote:
> > Hi again,
> > I have also done some changes to the JXM/Embedded/JBoss service, which
> > makes it possible for clients running in the same JBoss/JMX server to
> > get access to the serverside engine global, and as an effect of that is
> > able to use the LOCAL in vm protocol.
>
> Yep.
>
> >
> > This is done through JNDI.
> >
> > The embedded service creates a utility class (GlobalUtil) which holds
> > the engine global:
> >
> > if ( jndiName != null) {
> > bind( blaster.getMain().getGlobal() );
> > } // end of if ()
> >
> > private void bind(org.xmlBlaster.engine.Global engineGlobal) throws
> > Exception{
> > if ( jndiName == null) {
> > return;
> > } // end of if ()
> >
> > // Do we have JNDI at all?
> > Context ctx = null;
> > try {
> > ctx = new InitialContext();
> > } catch (NamingException e) {
> > throw new IllegalStateException("No NamingContext available,
> > trying to run with a jndiName in a server withouth jndi is not valid:
> > "+e);
> > } // end of try-catch
> >
> > GlobalUtil gu = new GlobalUtil(engineGlobal);
> > bind(ctx,jndiName,gu);
> >
> > }
> >
> > The GlobalUtil holds the engine.Global as a transient variable, which
> > means that if its not serialized (looked up in the same VM) it will be
> > accessable by the client doing the lookup. The client then uses the
> > GlobalUtil to hanlde its global creation and cloning, so that
> > engine.Global will be put in its objectEntry:
> >
> > public Global newGlobal(String propertyFileName, Properties args)
> > throws IllegalStateException {
> > Global glob = new Global(new String[]{},false,false);
> > Global clone = getClone(glob);
> > addEngineProperties(clone);
> > addServerProperties(clone);
> > loadPropertyFile(clone,propertyFileName);
> > addArguments(clone,args);
> > return clone;
> > }
> >
> > public Global getClone(Global global) {
> > Global g = global.getClone(null);
> >
> > Object engine = global.getObjectEntry("ServerNodeScope");
> > Object eg = engine != null ? engine : engineGlobal;
> > if ( eg != null) {
> > g.addObjectEntry("ServerNodeScope", eg);
> > } // end of if ()
> >
> > // Should we perhaps also clone POA???
> >
> > return g;
> > }
> >
> > Here's how for example the JCA adapter uses this:
> >
> > globalUtil = new GlobalUtil();
> > if ( jndiName != null) {
> > try {
> > globalUtil = (GlobalUtil)new
> > InitialContext().lookup(jndiName);
> > } catch (NamingException e) {
> > throw new IllegalStateException("Could not lookup GlobalUtil
> > with JNDI " + jndiName + ": "+e);
> > } // end of try-catch
> > } // end of if ()
> >
> > glob = globalUtil.newGlobal( propFile,
> > glob.getProperty().getProperties() );
> >
> > This means that if a JNDI name is specified and the lookup is done in
> > the same VM as the process that bound the GlobalUtil into jndi, the
> > global the JCA adapter uses will be able to use a LOCAL protocol to
> > access the server.
> >
> > Any complaints about this design?
>
> Cool! Exactly what we need.
> Is there a way to implement an automatic testsuite to check all this?
Not that I know of. It would require us to have a JBoss in the
XmlBlaster distro.
> This way all developers are forced to look at issues if this
> framework fails in future xmlBlaster versions.
> I think its the only way to keep this framework alive
> over all versions in future.
I agree, but see no way of fixing that now. If we do not use XmlBlaster
as the container also for the standalone XmlBlaster (which I actually
think would be a rather good idea, at least the minimal JMX part, and
perhaps with JCA and JNDI).
//Peter
>
> regards
>
> Marcel
> >
> > //Peter
> >
>
>
> --
> http://www.xmlBlaster.org
--
------------------------------------------------------------
Peter Antman Chief Technology Officer, Development
Technology in Media, Box 34105 100 26 Stockholm
WWW: http://www.tim.se WWW: http://www.backsource.org
Email: pra at tim.se
Phone: +46-(0)8-506 381 11 Mobile: +46-(0)704 20 58 11
------------------------------------------------------------