diff --git a/src/site/fml/faq.fml b/src/site/fml/faq.fml index bac986f44..bd3065e74 100644 --- a/src/site/fml/faq.fml +++ b/src/site/fml/faq.fml @@ -14,33 +14,72 @@ - When will support for the more complex job execution - classes appear? Our Client has a number of - multi-threaded batch jobs. + Is it possible to execute jobs in multiple threads or + multiple processes? - Multi-threaded execution in a single VM is perfectly - possible - with 1.x - but we recommend exercising + There are three ways to approach this - but we recommend + exercising caution in the analysis of such requirements (is it - really necessary?). Several people have - tried it and - it works as long as the step is intrinsically - restartable (idempotent effectively). The parallel - job sample shows - how it might work in practice - this - uses a "process indicator" - pattern to mark input - records as complete, inside the business - transaction. + really + necessary?). + What is the Spring Batch philosophy on the use of flexible - strategies and default implementations? Can you add a public getter + strategies and default implementations? Can you + add a public getter for this or that property? @@ -48,11 +87,13 @@ There are a great many extension points in Spring Batch for the framework developer (as opposed to the - implementor of business + implementor of + business logic). We expect clients to create their own more specific strategies that can be - plugged in to control things like commit + plugged in to control + things like commit intervals ( CompletionPolicy ), rules about how to deal with exceptions ( @@ -62,15 +103,21 @@

In general we try to dissuade users from extending framework classes. - The Java language doesn't give us as much flexibility to + The Java language doesn't give us as much + flexibility to mark classes and interfaces as internal. Generally you can expect - anything at the top level of the source tree in packages + anything at the top level of the + source tree in packages org.springframework.batch.* to be public, but not necessarily sub-classable. Extending our concrete implementations of most - strategies is discouraged in favour + strategies is + discouraged in favour of a composition or forking - approach. + approach. If your code can use only the + interfaces from Spring + Batch, that gives you the greatest possible + portability.

@@ -85,15 +132,18 @@ Spring Batch and Quartz have different goals. Spring Batch provides functionality for processing large - volumes of data and Quartz + volumes of data + and Quartz provides functionality for scheduling tasks. So Quartz could complement - Spring Batch, but are not excluding technologies. A + Spring Batch, but are not excluding + technologies. A common combination would be to use Quartz as a trigger for a Spring Batch job using a Cron - expression and the Spring Core convenience + expression + and the Spring Core convenience SchedulerFactoryBean .

@@ -108,23 +158,27 @@ Use a scheduling tool. There are plenty of them out there. Examples: Quartz, Control-M, Autosys. Quartz - doesn't have all the + doesn't have + all the features of Control-M or Autosys - it is supposed to be lightweight. If you - want something even more lightweight you can just + want something even more + lightweight you can just use the OS (cron, at, etc.).

Simple sequential dependencies can be implemented using the - job-steps model of Spring Batch, and the non-sequential features in + job-steps model of Spring Batch, and the non-sequential + features in Spring Batch 2.0. We think this is quite common. And in fact it makes it easier - to correct a common mis-use of scehdulers + to correct a common mis-use + of scehdulers - having hundreds of jobs configured, many of which are not @@ -135,7 +189,7 @@ - How will Spring Batch allow project to optimize for + How does Spring Batch allow project to optimize for performance and scalability (through parallel processing or other)? @@ -147,35 +201,43 @@ deals with the concern of breaking apart the business logic and sharing it efficiently between parallel - processes or processors (see + processes or + processors (see PartitionStep ). There are a number of technologies that could play a role here. The essence is - just a set of concurrent remote calls to distributed + just a set of concurrent remote calls + to distributed agents that can handle some business processing. Since the business - processing is already typically modularised + processing is already typically + modularised - e.g. input an item, process it - Spring Batch can strategise the distribution in a number of ways. One implementation that we have had some experience with - (and have a prototype for) is a set of remote web services - handling - the - business processing. We send a specific range + is a + set of remote web services + handling the + business processing. + We send a + specific range of primary keys for the inputs to each of a number of remote calls. The same basic - strategy would work with + strategy would + work with any - of the Spring Remoting protocols (plain + of the Spring + Remoting protocols (plain RMI, HttpInvoker, JMS, - Hessian etc.) with little more than a + Hessian etc.) with + little more than a couple of lines change in the execution layer @@ -194,10 +256,12 @@ leading to resilience and high throughput. We are often faced with mission-critical - applications where audit trails are essential, and + applications + where audit trails are essential, and guaranteed processing is demanded, but where there are extremely - tight limits on performance under load, or + tight limits on + performance under load, or where high throughput gives a competitive advantage. Matt Welsh's work shows that a Staged @@ -208,17 +272,21 @@ AQ, MQ, Tibco etc.) gives us a lot of resilience out of the box. There are particular benefits - in a system where there is feedback + in a + system where there is feedback between downstream and upstream stages, so the number of consumers can be - adjusted to account for the amount of demand. So how + adjusted to + account for the amount of demand. So how does this fit into Spring Batch? The spring-batch-integration project has this pattern implemented in Spring Integration, and can - be used to scale up the remote processing of any step with many - items to process. + be used to scale up the remote processing of any + step with many + items to process. See in particular the "chunk" package, and the ItemWriter and ChunkHandler + implementations in there. @@ -231,18 +299,22 @@ eventually becoming a committer. The process is pretty standard for all Apache-licensed - projects. You make contributions through JIRA (so + projects. You + make contributions through JIRA (so sign up now); you assign the copyright of any contributions using a - standard Apache-like CLA (see the Apache one for + standard + Apache-like CLA (see the Apache one for example - ours might be slightly different); when the - contributions reach a certain level, + contributions reach a + certain level, or you convince us otherwise that you are going to be committed long term, - even if part time, then you can become a committer. + even if part time, then you + can become a committer.