File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Can both MessageListener and periodic processing in run() be handled?

 
Les Hartzman
Ranch Hand
Posts: 35
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Basically what I'm asking is if I would see any problems in a class that extends Thread and implements MessageListener handling both asynch messages in onMessage and some periodic processing in run?

The 'run' code wakes up every 5 seconds, checks the status of some caches and processes according to the states before going back to sleep again. Or should I have run fire off another Runnable via scheduleWithFixedDelay from the ScheduledExecutorService?

Thanks.

Les
 
Ranganathan Kaliyur Mannar
Bartender
Posts: 1101
10
Java Netbeans IDE Ubuntu
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
In the Enterprise world it is better to rely on Timer services than to handle threads directly (even if it is via Executors).

If you are using EJB 3.1, you can use the @Schedule annotation to periodically run tasks. I think this works for both Session and MDBs.

If you are using EJB 3.0, you can use the timer service. The timers can be initialized programatically. This trigger can be based on user request (from a Servlet's service method which in turn invokes a Session bean method which then initializes the timer) or a message to an MDB. But a proper initiation of timer would be done via ServletContextListener (this will again invoke a Session Bean method that initializes a timer). And remember that, in this case you should also handle cancellation of the timer when application is stopped.
 
Les Hartzman
Ranch Hand
Posts: 35
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Sorry. I should have pointed out that I'm using ActiveMQ with POJOs. So no EJBs or app server is involved. This is also using the Spring Framework.

Les
 
Ranganathan Kaliyur Mannar
Bartender
Posts: 1101
10
Java Netbeans IDE Ubuntu
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
oh ok. I don't know much about Active MQ, but I will post some questions for you to think about:
1) How are you going to start the service? I mean, are you going to do it in your onMessage method? if so you will have to do it based on some condition. what is that condition? is that a specific message which signals you to start the service?
2) How are you going to stop the service? i.e suppose your listener is supposed to run from 8-8, then you should stop your service when the listener is stopped. You have to decide how you are going to handle this.
3) In the Enterprise world, the application server will manage the listeners...there can be more than one listener for the same queue/topic. I am not sure how it is done in your case. If there is going to be more than one listener, then potentially there is a possibility of your scheduler running at more than 1 place - may be this is far-fetched, but I think you have to think about all these...
 
I agree. Here's the link: http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic