Re: T5: Quartz and the IoC Registry?
Hi Angelo, It looks like I forgot one piece of info...each descendent of HENJob should be registered as a service in AppModule, just like your other services: // Jobs that are scheduled by Quartz binder.bind( SendMailJob.class, SendMailJobImpl.class ); It is actually the Tapestry IoC framework that instantiates these services, so Tapestry needs to know about them. Andy On Sat, 2008-10-11 at 23:41 -0700, Angelo Chen wrote: > Hi Andy, > > Thanks for the code, the HenJob does not have a default constructor, will it > have this error: > > [ERROR] ErrorLogger An error occured instantiating job to be executed. job= > 'group1.job1' > org.quartz.SchedulerException: Problem instantiating class > 'org.sample.myjob' > > ? > > > And here's the parent of the above class...all of my quartz jobs are > descendants of this class: > > public abstract class HENJob implements Job { > > private final Logger _logger; > private final Session _sn; > private final PerthreadManager _perThrdMngr; > private final HibernateSessionManager _hbrntSnMngr; > > private JobDataMap _jobDataMap = null; > > public HENJob( Logger prmLogger, Session prmSn, > PerthreadManager prmThrdMngr, HibernateSessionManager > prmHbrntSnMngr ) { > _logger = prmLogger; > _sn = prmSn; > _userDAO = prmUserDAO; > _systmPrmtrSrvc = prmSystmPrmtrSrvc; > _perThrdMngr = prmThrdMngr; > _hbrntSnMngr = prmHbrntSnMngr; > } > > public void execute(JobExecutionContext arg0) throws > JobExecutionException { > try { > _jobDataMap = arg0.getMergedJobDataMap(); > > run(); > > _hbrntSnMngr.commit(); > } finally { > _perThrdMngr.cleanup(); > } > } > > protected abstract String getSystmPrmtrPrfx(); > > protected abstract void run(); > > public JobDataMap getJobDataMap() { > return _jobDataMap; > } > > public Logger getLogger() { > return _logger; > } > > public Session getSn() { > return _sn; > } > > } > > Good luck! > > Andy > > On Sat, 2008-10-11 at 02:40 -0700, Angelo Chen wrote: > > Hi Andy, > > > > Any sample code for this? Thanks. > > > > Angelo > > > > > > Andy Huhn wrote: > > > > > > Thanks, Howard...ServiceResources did the trick! > > > > > > On Sat, 2007-12-15 at 06:53 -0800, Howard Lewis Ship wrote: > > >> The Registry is not exposed, a service may be passed its > > >> ServiceResources via a constructor parameter. This is an extension of > > >> ServiceLocator, which includes all the key methods of Registry, > > >> allowing services to be obtained by type or by service id. > > >> > > >> In addition, starting in 5.0.7., service proxies are serializable, > > >> which helps when integrating with Quartz. You can store a reference > > >> to a service in a non-transient field of your Job. I did some Quartz > > >> integration for a project using the 5.0.5 code, and it required > > >> jumping through some serious hoops. > > >> > > >> In fact, that code code was an example of why I think you are going > > >> down the wrong path. I had a JobRunner service that tooks mapped > > >> contribution of ScheduledJobs; the ScheduledJob was a wrapper around > > >> some scheduling information and a Runnable object. Dependencies were > > >> injected into the contribute method(s) and packaged up as Runnable's > > >> that are part of the configuration. The JobRunner was @EagerLoad. > > >> > > >> On Dec 14, 2007 9:22 PM, Andy Huhn <[EMAIL PROTECTED]> wrote: > > >> > All, > > >> > > > >> > I'd like to use Quartz with tapestry. As such, I'd like to get a > > >> > reference to the Registry and pass it into a Tapestry service (so > > that > > >> I > > >> > can use it in my Quartz jobs to instantiate all of my DAOs and > > >> Hibernate > > >> > Sessions). > > >> > > > >> > I saw some discussion here on the list a few days ago about the > > >> > Registry...it sounds like it's not exposed to services at all. Is > > this > > >> > true? Does anyone have any ideas how I can get a reference to it? > > >> > > > >> > I have also thought about building a completely new registry inside > > >> this > > >> > service for all of the quartz jobs to use, but my guess is that there > > >> > would be quite an impact on the machine's resources. Does anyone > > have > > >> a > > >> > good feel for how much memory I can expect to give up if I > > instantiate > > >> a > > >> > second instance of the Registry? > > >> > > > >> > Thanks, > > >> > Andy > > >> > > > >> > - > > >> > To unsubscribe, e-mail: [EMAIL PROTECTED] > > >> > For additional commands, e-mail: [EMAIL PROTECTED] > > >> > > > >> > > > >> > > >> > > >> > > > > > > - > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > >
Re: T5: Quartz and the IoC Registry?
Hi Andy, Thanks for the code, the HenJob does not have a default constructor, will it have this error: [ERROR] ErrorLogger An error occured instantiating job to be executed. job= 'group1.job1' org.quartz.SchedulerException: Problem instantiating class 'org.sample.myjob' ? And here's the parent of the above class...all of my quartz jobs are descendants of this class: public abstract class HENJob implements Job { private final Logger _logger; private final Session _sn; private final PerthreadManager _perThrdMngr; private final HibernateSessionManager _hbrntSnMngr; private JobDataMap _jobDataMap = null; public HENJob( Logger prmLogger, Session prmSn, PerthreadManager prmThrdMngr, HibernateSessionManager prmHbrntSnMngr ) { _logger = prmLogger; _sn = prmSn; _userDAO = prmUserDAO; _systmPrmtrSrvc = prmSystmPrmtrSrvc; _perThrdMngr = prmThrdMngr; _hbrntSnMngr = prmHbrntSnMngr; } public void execute(JobExecutionContext arg0) throws JobExecutionException { try { _jobDataMap = arg0.getMergedJobDataMap(); run(); _hbrntSnMngr.commit(); } finally { _perThrdMngr.cleanup(); } } protected abstract String getSystmPrmtrPrfx(); protected abstract void run(); public JobDataMap getJobDataMap() { return _jobDataMap; } public Logger getLogger() { return _logger; } public Session getSn() { return _sn; } } Good luck! Andy On Sat, 2008-10-11 at 02:40 -0700, Angelo Chen wrote: > Hi Andy, > > Any sample code for this? Thanks. > > Angelo > > > Andy Huhn wrote: > > > > Thanks, Howard...ServiceResources did the trick! > > > > On Sat, 2007-12-15 at 06:53 -0800, Howard Lewis Ship wrote: > >> The Registry is not exposed, a service may be passed its > >> ServiceResources via a constructor parameter. This is an extension of > >> ServiceLocator, which includes all the key methods of Registry, > >> allowing services to be obtained by type or by service id. > >> > >> In addition, starting in 5.0.7., service proxies are serializable, > >> which helps when integrating with Quartz. You can store a reference > >> to a service in a non-transient field of your Job. I did some Quartz > >> integration for a project using the 5.0.5 code, and it required > >> jumping through some serious hoops. > >> > >> In fact, that code code was an example of why I think you are going > >> down the wrong path. I had a JobRunner service that tooks mapped > >> contribution of ScheduledJobs; the ScheduledJob was a wrapper around > >> some scheduling information and a Runnable object. Dependencies were > >> injected into the contribute method(s) and packaged up as Runnable's > >> that are part of the configuration. The JobRunner was @EagerLoad. > >> > >> On Dec 14, 2007 9:22 PM, Andy Huhn <[EMAIL PROTECTED]> wrote: > >> > All, > >> > > >> > I'd like to use Quartz with tapestry. As such, I'd like to get a > >> > reference to the Registry and pass it into a Tapestry service (so > that > >> I > >> > can use it in my Quartz jobs to instantiate all of my DAOs and > >> Hibernate > >> > Sessions). > >> > > >> > I saw some discussion here on the list a few days ago about the > >> > Registry...it sounds like it's not exposed to services at all. Is > this > >> > true? Does anyone have any ideas how I can get a reference to it? > >> > > >> > I have also thought about building a completely new registry inside > >> this > >> > service for all of the quartz jobs to use, but my guess is that there > >> > would be quite an impact on the machine's resources. Does anyone > have > >> a > >> > good feel for how much memory I can expect to give up if I > instantiate > >> a > >> > second instance of the Registry? > >> > > >> > Thanks, > >> > Andy > >> > > >> > - > >> > 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] -- View this message in context: http://www.nabble.com/T5%3A-Quartz-and-the-IoC-Registry--tp14348106p19939133.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: T5: Quartz and the IoC Registry?
Hi Angelo, It's been several months since I wrote this, so the details are fuzzy...but here are some snippets of some code that I'm currently running in production: /* The following service is registered with Tapestry IOC. It schedules jobs via Quartz */ public class SchedulerServiceImpl implements SchedulerService { public class TapestryIocJobFactory implements JobFactory { ServiceResources _srvcRsrcs; Logger _logger; TapestryIocJobFactory( ServiceResources prmSrvcRsrcs, Logger prmLogger ) { _srvcRsrcs = prmSrvcRsrcs; _logger = prmLogger; } public Job newJob( TriggerFiredBundle prmTrgrFiredBndl ) { Class c = prmTrgrFiredBndl.getJobDetail().getJobClass(); return( (Job)_srvcRsrcs.getService( c ) ); } } public SchedulerServiceImpl( ServiceResources prmSrvcRsrcs, Logger prmLogger, SystemParameterService prmSystmPrmtrSrvc ) { try { SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); Scheduler sched = schedFact.getScheduler(); sched.setJobFactory( new TapestryIocJobFactory( prmSrvcRsrcs, prmLogger ) ); sched.start(); /* The first job to be registered: the job that * looks for newly-queued messages to send via smtp. */ JobDetail jobDetail = new JobDetail("sendMailJob", null, SendMailJob.class ); Trigger trigger = TriggerUtils.makeSecondlyTrigger( 10 ); trigger.setStartTime( new Date() ); trigger.setName( "sendMailTrigger" ); sched.scheduleJob(jobDetail, trigger); /* The second job to be registered: the job that * deletes any pending messages that were never * completed. */ jobDetail = new JobDetail("cleanPendingMailJob", null, CleanPendingMailJob.class ); trigger = TriggerUtils.makeDailyTrigger( 2, 3 ); trigger.setName( "cleanPendingMailTrigger" ); sched.scheduleJob(jobDetail, trigger); /* And so one and so forth, registering more jobs. */ } catch (SchedulerException e) { e.printStackTrace(); } } } The above service is registered in AppModule like this, to force it to load when the IOC registry starts up: binder.bind( SchedulerService.class, SchedulerServiceImpl.class ).eagerLoad(); Here's an example of one of the jobs registered above: public class SendMailJobImpl extends HENJob implements SendMailJob { final private MessageService _msgSrvc; /** * */ public SendMailJobImpl( Logger prmLogger, org.hibernate.Session prmSn, UserDAO prmUserDAO, MessageService prmMsgSrvc, SystemParameterService prmSystmPrmtrSrvc, PerthreadManager prmThrdMngr, HibernateSessionManager prmHbrntSnMngr ) { super( prmLogger, prmSn, prmUserDAO, prmSystmPrmtrSrvc, prmThrdMngr, prmHbrntSnMngr ); _msgSrvc = prmMsgSrvc; } @Override public void run() { /* Code to get a list of emails ready to send, and to send them via SMTP. */ } } And here's the parent of the above class...all of my quartz jobs are descendants of this class: public abstract class HENJob implements Job { private final Logger _logger; private final Session _sn; private final PerthreadManager _perThrdMngr; private final HibernateSessionManager _hbrntSnMngr; private JobDataMap _jobDataMap = null; public HENJob( Logger prmLogger, Session prmSn, PerthreadManager prmThrdMngr, HibernateSessionManager prmHbrntSnMngr ) { _logger = prmLogger; _sn = prmSn; _userDAO = prmUserDAO; _systmPrmtrSrvc = prmSystmPrmtrSrvc; _perThrdMngr = prmThrdMngr; _hbrntSnMngr = prmHbrntSnMngr; } public void execute(JobExecutionContext arg0) throws JobExecutionException { try { _jobDataMap = arg0.getMergedJobDataMap(); run(); _hbrntSnMngr.commit(); } finally { _perThrdMngr.cleanup(); } } protected abstract String getSystmPrmtrPrfx(); protected abstract void run(); public JobDataMap getJobDataMap() { return _jobDataMap; } public Logger getLogger() { return _logger; } public Session getSn() { return _sn; } } Good luck! Andy On Sat, 2008-10-11 at 02:40 -0700, Angelo Chen wrote: > Hi Andy, > > Any sample code for this? Thanks. > > Angelo > > > Andy Huhn wrote: > > > > Thanks, Howard...ServiceResources did the trick! > > > > On Sat, 2007-12-15 at 06:53 -0800, Howard Lewi
Re: T5: Quartz and the IoC Registry?
Hi Andy, Any sample code for this? Thanks. Angelo Andy Huhn wrote: > > Thanks, Howard...ServiceResources did the trick! > > On Sat, 2007-12-15 at 06:53 -0800, Howard Lewis Ship wrote: >> The Registry is not exposed, a service may be passed its >> ServiceResources via a constructor parameter. This is an extension of >> ServiceLocator, which includes all the key methods of Registry, >> allowing services to be obtained by type or by service id. >> >> In addition, starting in 5.0.7., service proxies are serializable, >> which helps when integrating with Quartz. You can store a reference >> to a service in a non-transient field of your Job. I did some Quartz >> integration for a project using the 5.0.5 code, and it required >> jumping through some serious hoops. >> >> In fact, that code code was an example of why I think you are going >> down the wrong path. I had a JobRunner service that tooks mapped >> contribution of ScheduledJobs; the ScheduledJob was a wrapper around >> some scheduling information and a Runnable object. Dependencies were >> injected into the contribute method(s) and packaged up as Runnable's >> that are part of the configuration. The JobRunner was @EagerLoad. >> >> On Dec 14, 2007 9:22 PM, Andy Huhn <[EMAIL PROTECTED]> wrote: >> > All, >> > >> > I'd like to use Quartz with tapestry. As such, I'd like to get a >> > reference to the Registry and pass it into a Tapestry service (so that >> I >> > can use it in my Quartz jobs to instantiate all of my DAOs and >> Hibernate >> > Sessions). >> > >> > I saw some discussion here on the list a few days ago about the >> > Registry...it sounds like it's not exposed to services at all. Is this >> > true? Does anyone have any ideas how I can get a reference to it? >> > >> > I have also thought about building a completely new registry inside >> this >> > service for all of the quartz jobs to use, but my guess is that there >> > would be quite an impact on the machine's resources. Does anyone have >> a >> > good feel for how much memory I can expect to give up if I instantiate >> a >> > second instance of the Registry? >> > >> > Thanks, >> > Andy >> > >> > - >> > 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] > > > -- View this message in context: http://www.nabble.com/T5%3A-Quartz-and-the-IoC-Registry--tp14348106p19931081.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: T5: Quartz and the IoC Registry?
Any example of this somewhere? On Dec 18, 2007, at 8:41 PM, Andy Huhn wrote: Thanks, Howard...ServiceResources did the trick! On Sat, 2007-12-15 at 06:53 -0800, Howard Lewis Ship wrote: The Registry is not exposed, a service may be passed its ServiceResources via a constructor parameter. This is an extension of ServiceLocator, which includes all the key methods of Registry, allowing services to be obtained by type or by service id. In addition, starting in 5.0.7., service proxies are serializable, which helps when integrating with Quartz. You can store a reference to a service in a non-transient field of your Job. I did some Quartz integration for a project using the 5.0.5 code, and it required jumping through some serious hoops. In fact, that code code was an example of why I think you are going down the wrong path. I had a JobRunner service that tooks mapped contribution of ScheduledJobs; the ScheduledJob was a wrapper around some scheduling information and a Runnable object. Dependencies were injected into the contribute method(s) and packaged up as Runnable's that are part of the configuration. The JobRunner was @EagerLoad. On Dec 14, 2007 9:22 PM, Andy Huhn <[EMAIL PROTECTED]> wrote: All, I'd like to use Quartz with tapestry. As such, I'd like to get a reference to the Registry and pass it into a Tapestry service (so that I can use it in my Quartz jobs to instantiate all of my DAOs and Hibernate Sessions). I saw some discussion here on the list a few days ago about the Registry...it sounds like it's not exposed to services at all. Is this true? Does anyone have any ideas how I can get a reference to it? I have also thought about building a completely new registry inside this service for all of the quartz jobs to use, but my guess is that there would be quite an impact on the machine's resources. Does anyone have a good feel for how much memory I can expect to give up if I instantiate a second instance of the Registry? Thanks, Andy - 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]
Re: T5: Quartz and the IoC Registry?
Thanks, Howard...ServiceResources did the trick! On Sat, 2007-12-15 at 06:53 -0800, Howard Lewis Ship wrote: > The Registry is not exposed, a service may be passed its > ServiceResources via a constructor parameter. This is an extension of > ServiceLocator, which includes all the key methods of Registry, > allowing services to be obtained by type or by service id. > > In addition, starting in 5.0.7., service proxies are serializable, > which helps when integrating with Quartz. You can store a reference > to a service in a non-transient field of your Job. I did some Quartz > integration for a project using the 5.0.5 code, and it required > jumping through some serious hoops. > > In fact, that code code was an example of why I think you are going > down the wrong path. I had a JobRunner service that tooks mapped > contribution of ScheduledJobs; the ScheduledJob was a wrapper around > some scheduling information and a Runnable object. Dependencies were > injected into the contribute method(s) and packaged up as Runnable's > that are part of the configuration. The JobRunner was @EagerLoad. > > On Dec 14, 2007 9:22 PM, Andy Huhn <[EMAIL PROTECTED]> wrote: > > All, > > > > I'd like to use Quartz with tapestry. As such, I'd like to get a > > reference to the Registry and pass it into a Tapestry service (so that I > > can use it in my Quartz jobs to instantiate all of my DAOs and Hibernate > > Sessions). > > > > I saw some discussion here on the list a few days ago about the > > Registry...it sounds like it's not exposed to services at all. Is this > > true? Does anyone have any ideas how I can get a reference to it? > > > > I have also thought about building a completely new registry inside this > > service for all of the quartz jobs to use, but my guess is that there > > would be quite an impact on the machine's resources. Does anyone have a > > good feel for how much memory I can expect to give up if I instantiate a > > second instance of the Registry? > > > > Thanks, > > Andy > > > > - > > 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]
Re: T5: Quartz and the IoC Registry?
The Registry is not exposed, a service may be passed its ServiceResources via a constructor parameter. This is an extension of ServiceLocator, which includes all the key methods of Registry, allowing services to be obtained by type or by service id. In addition, starting in 5.0.7., service proxies are serializable, which helps when integrating with Quartz. You can store a reference to a service in a non-transient field of your Job. I did some Quartz integration for a project using the 5.0.5 code, and it required jumping through some serious hoops. In fact, that code code was an example of why I think you are going down the wrong path. I had a JobRunner service that tooks mapped contribution of ScheduledJobs; the ScheduledJob was a wrapper around some scheduling information and a Runnable object. Dependencies were injected into the contribute method(s) and packaged up as Runnable's that are part of the configuration. The JobRunner was @EagerLoad. On Dec 14, 2007 9:22 PM, Andy Huhn <[EMAIL PROTECTED]> wrote: > All, > > I'd like to use Quartz with tapestry. As such, I'd like to get a > reference to the Registry and pass it into a Tapestry service (so that I > can use it in my Quartz jobs to instantiate all of my DAOs and Hibernate > Sessions). > > I saw some discussion here on the list a few days ago about the > Registry...it sounds like it's not exposed to services at all. Is this > true? Does anyone have any ideas how I can get a reference to it? > > I have also thought about building a completely new registry inside this > service for all of the quartz jobs to use, but my guess is that there > would be quite an impact on the machine's resources. Does anyone have a > good feel for how much memory I can expect to give up if I instantiate a > second instance of the Registry? > > Thanks, > Andy > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Howard M. Lewis Ship TWD Consulting, Inc. Creator Apache Tapestry and Apache HiveMind - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]