File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Java in General and the fly likes Callout Handler - receiving delayed events on the same thread Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCA/OCP Java SE 7 Programmer I & II Study Guide this week in the OCPJP forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Callout Handler - receiving delayed events on the same thread" Watch "Callout Handler - receiving delayed events on the same thread" New topic
Author

Callout Handler - receiving delayed events on the same thread

Stuart James
Greenhorn

Joined: Nov 23, 2010
Posts: 4
Hi,

I'm new to Java, but not to software development. I have a requirement to be able to schedule events to occur in the future on the same thread - which I believe rules out using java.util.concurrent.Future and friends. What I have implemented allows any number of "Callouts" to be placed with a "CalloutHandler". The placer of the Callouts must register as an event listener with the CalloutHandler. Each Callout has an associated "action" and delay. The CalloutHandler periodically checks its collection of Callouts. When a Callout is found whose delay has passed, the CalloutHandler fires an event that is caught by the event listener. The listener then runs code associated with the Callout action. The CalloutHandler then removes the Callout from its collection. Example code follows:

Callout:




CalloutHandler:



CalloutEvent:



ICalloutEventListener:



The above code is all implemented in a library.

Test harness that calls the above code:



Produces output similar to this:

No callouts in list.
3 callouts in list.
3 callouts in list.
Callout interval has passed.
TestStuff.doTest(): event action: 1
2 callouts in list.
2 callouts in list.
Callout interval has passed.
TestStuff.doTest(): event action: 2
1 callouts in list.


I have another implementation that uses Futures to fire events back to a listener, but I will not bore you with the details of it.

The above implementation is bare bones - the final implementation will need to allow for the canceling of any/all existing Callouts, and the placement of "conditional" Callouts (only add to the collection if a Callout with the same action does not already exist). Which I can cope with.

This is all well and good, but is there already something in the Java library that provides this functionality? Either in full, or something I can extend to fit my needs? I have been trawling both the Java API docs and Google, but have not found anything to satisfy my requirements.

Or should I be looking at using Futures and running the delayed code in another thread? I fear the concurrency issues that may/will arise from this approach. Or am I missing the point entirely?
Christophe Verré
Sheriff

Joined: Nov 24, 2005
Posts: 14688
    
  16

I haven't looked fully at your code, but isn't it what java.util.Timer does ? If your class extends TimerTask, you should be able do the same. Unless I overlooked something.


[My Blog]
All roads lead to JavaRanch
Stuart James
Greenhorn

Joined: Nov 23, 2010
Posts: 4
No, a quick test shows that you have not overlooked anything. I have made the problem seem much bigger than it was - I'm still thinking like a COBOL/VB6 programmer. In hindsight, I should have posted this in the Beginning Java forum. I have some work ahead of me...

Thanks for your advice.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Callout Handler - receiving delayed events on the same thread