invokeAndWait() might seem useful under certain circumstances, but that
still does not make it safe to use.  One should not write code that can
deadlock -- that would not be what I would call "useful" code.

Perhaps there is way to fix the invokeAndWit() implementation so that nested
calls will not hang?

Sam

> -----Original Message-----
> From: Lolling, Jan [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, March 13, 2003 10:43 AM
> To: [EMAIL PROTECTED]
> Subject: AW: InvokeAndWait problem
> 
> 
> It exists a same reasons for using invokeAndWait!
> It is not usful to avoid invokeAndWait in all clases. If you 
> want to manipultae the DOM in a sequence and it is necessary 
> to be shure that the sequence is done in the correct order 
> than you shoud use invokeAndWait. But if your action is 
> atomar (complete transaction) concerned to the DOM than it is 
> better using invokeLater.
> 
> Jan
> 
> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Gesendet: Donnerstag, 13. M�rz 2003 19:14
> An: [EMAIL PROTECTED]
> Betreff: RE: InvokeAndWait problem
> 
> 
> It seems to me, just from following this thread (and without 
> looking at the code), that there is a problem with 
> invokeAndWait().  If the following 2 assertions are true, 
> then invokeAndWait() is dangerous and should be avoided.
> 
>   (1) There is, in general, no way to guarantee that the code 
> launched by
> invokeAndWait() will not perform another call to invokeAndWait().
>   (2) "Nesting" invokeAndWait() calls in this way causes deadlocks.
> 
> Assuming my assertions are true, then the only time you can 
> safely call
> invokeAndWait() is when the launched code is completely owned 
> by you (that is, does not rely on anything other than the 
> Java library), and you can guarantee that for the life of the 
> code that it will never make a nested call (even when someone 
> else is maintaining it).  Actually, even then you are not 
> absolutely safe, since the invokeAndWait() implementation 
> could itself initiate a nested call to invokeAndWait() 
> [although that would be a serious bug].
> 
> Sam
> 
> > -----Original Message-----
> > From: Lolling, Jan [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, March 13, 2003 7:38 AM
> > To: [EMAIL PROTECTED]
> > Subject: AW: InvokeAndWait problem
> > 
> > 
> > hello,
> > my experience is, that it could be, that invokeAndWait 
> never come back 
> > an than our application hangs. I have not found the necessary 
> > circumstances to reproduce this bug, but invokeLater avoid a total 
> > crash. invokeLater does how it is
> > called: invoke and do not wait. Your method goes on after
> > invoking the thread. You have the same theme in Swing.
> > 
> > Jan
> > 
> > -----Urspr�ngliche Nachricht-----
> > Von: Siarhei Biarozkin [mailto:[EMAIL PROTECTED]
> > Gesendet: Donnerstag, 13. M�rz 2003 16:33
> > An: Batik Users; [EMAIL PROTECTED]
> > Betreff: Re: InvokeAndWait problem
> > 
> > 
> > Hi,
> > how about using invokeLater() on the runnable queue ? we see only 
> > minor delay when using invokeLater() instead of
> > invokeAndWait() Cheers Sergey Beryozkin
> > ----- Original Message -----
> > From: "Harm Cuppens" <[EMAIL PROTECTED]>
> > To: "'Batik Users'" <[EMAIL PROTECTED]>
> > Sent: Thursday, March 13, 2003 3:20 PM
> > Subject: RE: InvokeAndWait problem
> > 
> > 
> > > Hi,
> > >
> > > Thanks for the reply, I see your point, but the problem
> > will still be
> > there.
> > > In the  void redo
> > > 
> > 
> svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeAndWait(ne
> > > w
> > > Runnable() {
> > >        // my code which acts on the DOM
> > >     });
> > > }
> > >
> > > Batik would still be able to call invokeAndWait in one of it's 
> > > methods. Because my undo/redo code works with the DOM, lots
> > of events
> > > are triggered as a result. These events can be for example
> > in my case:
> > > DOMNodeInserted, which the Bridge takes care of. In my case
> > an Image
> > > element being inserted with an XLink, then the 
> URIResolver calls the
> > > checkLoadExternalResource(...,...) which calls 
> invokeAndWait again!
> > >
> > > Harm
> > >
> > > -----Original Message-----
> > > From: Siarhei Biarozkin [mailto:[EMAIL PROTECTED]
> > > Sent: donderdag 13 maart 2003 16:12
> > > To: Batik Users; [EMAIL PROTECTED]
> > > Subject: Re: InvokeAndWait problem
> > >
> > >
> > > Hi,
> > > I'd recommend not to couple your undo/redo functionality with the 
> > > Batik, after all, it's just one component of your application. 
> > > Instead, use something like this :
> > >
> > > Undoable undoable = new Undoable() {
> > >  void  do() {
> > >
> > svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeAn
> > dWait(new
> > > Runnable() {
> > >          // do it/redo it
> > >     });
> > > }
> > >    void redo() {
> > >
> > > 
> > 
> svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeAndWait(ne
> > > w
> > > Runnable() {
> > >        // undo it
> > >     });
> > >   }
> > > }
> > >
> > > YourUndoManager.redo() {
> > >      undoable.redo();
> > > }
> > >
> > > YourUndoManager.do() {
> > >      undoable.do();
> > > }
> > >
> > > There may be many more, perhaps, better approaches, but the
> > key is to
> > > separate concerns Cheers
> > > Sergey Beryozkin
> > >
> > > ----- Original Message -----
> > > From: "Harm Cuppens" <[EMAIL PROTECTED]>
> > > To: "Batik Users (E-mail)" <[EMAIL PROTECTED]>
> > > Sent: Thursday, March 13, 2003 2:58 PM
> > > Subject: InvokeAndWait problem
> > >
> > >
> > > > Hello all,
> > > >
> > > > I'm adding undo/redo support to my application (a little
> > SVGEditor).
> > > > I
> > > have
> > > > a JSVGCanvas where I can draw my lines, rectangles etc. 
> I can also
> > import
> > > > images (or reference them) into the SVG document.
> > > >
> > > > For every action I perform I added undo/redo support.
> > > > For the undo/redo action to happen immediately on the
> > canvas, i call
> > > > the InvokeAndWait method:
> > > >
> > > > 
> > svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeAndWait(
> > > > new
> > > > Runnable() { undoManager.redo() });
> > > >
> > > > But I have the following problem, I insert an <image>
> > with a xlink
> > > > to a
> > > file
> > > > on my disk into the document. I then undo this 
> operation (so the 
> > > > image
> > is
> > > > removed again). Now when I try to redo this action, I call the
> > > InvokeAndWait
> > > > method (to get immediate results on the canvas) which 
> starts the 
> > > > redo
> > > code.
> > > > But it seems that the class org.apache.batik.bridge.URIResolver
> > > > calls
> > the
> > > > method  userAgent.checkLoadExternalResource(purl, 
> pDocURL). This 
> > > > brings
> > me
> > > > to the code inside the BridgeUserAgentWrapper inner class of
> > JSVGComponent
> > > > where the method calls another InvokeAndWait resulting a
> > total halt
> > > > of
> > the
> > > > program. So I'm in a situation where i'm calling 
> invokeAndWait to 
> > > > run
> > code
> > > > that could call invokeAndWait again :-(
> > > > I have tried the invokeLater method, but that gave the
> > same results,
> > > program
> > > > just hangs.
> > > >
> > > > Is there any way to get arround this (besides not using 
> > > > invokeAndWait)?
> > I
> > > > really like to have my undo/redo actions to occur immediately 
> > > > without
> > > having
> > > > to worry about that code calling another invokeAndWait.
> > > >
> > > > Thanks,
> > > >
> > > > Harm
> > > >
> > > >
> > > >
> > > > 
> > --------------------------------------------------------------------
> > > > -
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > >
> > >
> > >
> > > 
> > 
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > > 
> > 
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > >
> > 
> > 
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to