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

RE: [xmlblaster] Exception in the method I_Session.init



Hi Michele,

Thanks for your very quick answer.

The problem of throwing the error code USER_SECURITY_AUTHENTICATION is
that the method
I_XmlblasterAccess.connect never fails. The connection is well dead, but
how the client will be
able to know that the connection dies because the password is not the
good one.

By example, if I throw the error code USER_SECURITY_AUTHENTICATION the
following code never catch
an exception.

try {
	   I_XmlblasterAccess xbconnection = ...

	   .....          

          qos.setAddress (address);
	   xbconnection.registerConnectionListener(this);
          xbconnection.setClientErrorHandler (new ClientHandlerError
());
          returnQos = xbconnection.connect(qos, this); 
          ...
} catch (XmlBlasterException e) {
System.out.println ("Cannot connect due to the following error :" +
e.getMessage());
}


If the server throws the error code USER_SECURITY_AUTHENTICATION during
the initialization of the session,
the line xbconnection.connect should throw an exception because the
connection fails no ? 

But strangely the line xbconnection.connect(qos.this) successes and I'm
informed that the connection dies thanks to the 
ConnectionStateListener.

Is it a normal behavior ?

Best regards,

Xavier.

> -----Original Message-----
> From: owner-xmlblaster at server.xmlBlaster.org [mailto:owner-
> xmlblaster at server.xmlBlaster.org] On Behalf Of Michele Laghi
> Sent: mardi 4 septembre 2007 11:23
> To: xmlblaster at server.xmlBlaster.org
> Subject: Re: [xmlblaster] Exception in the method I_Session.init
> 
> Hi Xavier,
> 
> Xavier Roques wrote:
> > Hi,
> >
> > I 'm using Xmlblaster 1.6
> >
> > I implemented my own class implementing the interface I_Session
> >
> > In the method
> > public String init(I_SecurityQos securityQos) throws
XmlBlasterException
> > I throws the exception when the user cannot connect to the server
(wrong
> > password ...)
> > 	new XmlBlasterException (this.global
> >                                , ErrorCode.USER_ILLEGALARGUMENT
> >                                , ""
> >                                , e.getMessage());
> >
> > All works perfectly, but it does not work for one particular case:
> >    1) The client is connected to the Server A in fail safe mode with
a
> > specified number of retries.
> >    2) The server A is stopped and restarted with another database
> >    3) the client tries to connect again to the Server A but cannot
> > because the database has changed and the client does
> >       Not have anymore the rights to connect to the Server.
> >
> > Here the problem is that the connection of the client will never die
> > even if the number of retries is exceeded.
> >
> > I fixed this problem by throwing the exception:
> >                 throw new XmlBlasterException (this.global
> >                         , ErrorCode.USER_SECURITY_AUTHENTICATION
> >                         , ""
> >                         , e.getMessage());
> > In the method I_Session.init (I_SecurityQos securityQos).
> >
> > But with this exception, when the client invokes
> > I_XmlBlasterAccess.connect it never throws an exception even if the
> > password is not the good one :(
> > The connection is dead OK but the client cannot know that the
connection
> > is refused because the password is the bad one.
> >
> > So my question is "What is the good exception to throw in the method
> > I_Session.init."
> >
> 
> As you did: the ErrorCode.USER_SECURITY_AUTHENTICATION is the correct
> one to throw. On the client side a check is made against this
exception
> when the client library (the dispatcher) tries to reconnect: If this
> exception is detected the connection goes to DEAD: if you have
> registered a connection listener to your I_XmlBlasterAccess, the
toDead
> method of this listener should be invoked.
> 
> Regards
> Michele
> 
> > Thanks in advance,
> >
> > Xavier.
> >