Notes from our meeting (David and I) this morning:
Non-Rice Classes depended upon by KFS Batch:
import org.kuali.kfs.sys.context.SpringContext; (to get SchedulerService, beans of type Step.class, etc.)
- referenced from PurgeDocumentContentsStep
1) Everything under org.kuali.kfs.sys.batch should be extracted. With the possible exception of:
- PurgeDocumentContentsStep since it references FinancialSystemDocumentHeaderDao
- this may also include the KFS SchedulerFactoryBean (see notes below on this)
2) Batch classes should go into the KNS module
- another possibility is to create these in the core module, but that would likely result in us bringing a lot more into that core module
- need to determine if the time required to do this is worth it
3) ParameterService and related classes will also need to be extracted since there is a bi-directional dependency between this and batch
Implementation notes of batch in Rice:
1) Rice will have a single scheduler
2) Clients can customize by injecting their scheduler into Rice Configurer
3) Remove the injection of the scheduler into KSB Configurer
4) By default, if no scheduler injected, use the RiceSchedulerFactoryBean
5) Jobs in Quartz need to be able to be identified by whether they are batch jobs, or ksb message retries
- This helps to determine rendering in the KSB Quartz.do or the Batch screens
- thought was given to if we should include all of these in a single screen and we thought having a bunch of service bus message retries in the batch screen would end up cluttering it up
6) It needs to possible to include the batch GUI in a rice client application (in particular batchModify.do)
7) Ultimately, there will be a batch scheduler per Rice client application
- This means each rice client application will have it's own copy of the quartz tables (are there other tables as well?)
- This is the same as how the KSB scheduler is implemented
8) Add the ability to turn off just the batch piece (see questions below).
Implementation notes for KFS:
1) KFS will inject it's SchedulerFactoryBean into RiceConfigurer. This will allow for the useQuartzScheduling configuration to still work for KFS
2) We considered extracting this as well, but since Rice will use a single scheduler internally, it doesn't really make sense to turn off the
scheduler globally like this. However, if we are able to allow for turning off just the batch piece of the scheduler (and not the KSB) then KFS could just use the same scheduler and set the appropriate config property.
1) Will it be possible to distinguish batch jobs from messages in the scheduler?
- can this be implemented with JobDetail.jobDataMap by adding a type code of some sort to this map?
2) Will batch jobs/messages need different sets of properties?
3) If problems with above, will we need to have seperate schedulers for the KSB vs. Batch?
1) Discuss plan with KFS representitives
2) Attempt to extract and identify problems
3) Work with KFS team to update KFS appropriately
4) Is there a way in Quartz to turn off certain jobs? We would need something like this is order to allow them to turn off just the batch piece but not the KSB piece.