On 8/9/07, Stefano Bagnara <[EMAIL PROTECTED]> wrote:
> Stefano Bagnara ha scritto:
> > /**
> > * Method execute executes a Block within the context of a new
> > ConditionManager.
> > * @param mail
> > * @param block
> > * @return Object
> > * @throws SieveException
> > */
> > protected Object execute(MailAdapter mail, Block block) throws
> > SieveException {
> > // Switch to a new ConditionManager
> > ConditionManager oldManager = ConditionManager.getInstance();
> > ConditionManager.resetInstance();
> >
> > // Execute the Block
> > Object result = block.execute(mail);
> >
> > // Restore the old ConditionManager
> > ConditionManager.setInstance(oldManager);
> >
> > return result;
> > }
> >
> > I don't get how it works. ConditionManager.resetInstance will set the
> > static thread local fieldInstance to null: doesn't this invalidate also
> > instances of every other thread using the ConditionManager ? Shouldn't
> > resetInstance simply remove the conditionManager from the fieldInstance
> > ThreadLocal using a fieldInstance.set(null) ?
>
> Forgot to say that if this is the case it should be pretty easy to
> create a test case to prove it.
how would you approach the management of the multiple threads?
> Furthermore, I see that this block is allowed to send SieveException.
> Maybe the setInstance(oldManager) should be called in a finally to make
> sure we place back the status to the right one (well, maybe after an
> exception the ConditionManager is ignored, but I think it is anyway
> better to cleanup).
+1
- robert
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]