From c2ba752725b6b61a8c3a77f7600e2b4b2a180793 Mon Sep 17 00:00:00 2001
From: dsyer
Date: Tue, 4 Dec 2007 18:54:55 +0000
Subject: [PATCH] Updated site (tidied and added migration guide) for m3
release.
---
src/.project | 5 +
src/site/apt/changelog.apt | 4 +
src/site/apt/getting-started.apt | 10 +
src/site/apt/migration/1.0-m2-m3.apt | 67 +++
src/site/fml/faq.fml | 629 +++++++++++++--------------
src/site/ppt/Figures.ppt | Bin 90112 -> 94720 bytes
src/site/site.xml | 5 +-
7 files changed, 403 insertions(+), 317 deletions(-)
create mode 100644 src/site/apt/getting-started.apt
create mode 100644 src/site/apt/migration/1.0-m2-m3.apt
diff --git a/src/.project b/src/.project
index 44c6d4e5f..8aaaa6d5e 100644
--- a/src/.project
+++ b/src/.project
@@ -19,5 +19,10 @@
1PARENT_DIR/pom.xml
+
+ parent
+ 2
+ PARENT_DIR/parent
+
diff --git a/src/site/apt/changelog.apt b/src/site/apt/changelog.apt
index 8f2bd585c..6ee9c36cb 100644
--- a/src/site/apt/changelog.apt
+++ b/src/site/apt/changelog.apt
@@ -1,3 +1,7 @@
Changelog: Spring Batch
See the changes report generated from {{{issue-tracking.html}JIRA}}.
+
+ There is a pre-built {{{http://opensource.atlassian.com/projects/spring/secure/IssueNavigator.jspa?reset=true&mode=hide&pid=10090&status=5&status=6&updated:previous=-1w&sorter/field=updated&sorter/order=DESC}Resolved Recently}} query that might be useful.
+
+ You can also browse the upcoming releases and look at the {{{http://opensource.atlassian.com/projects/spring/browse/BATCH?report=com.atlassian.jira.plugin.system.project:roadmap-panel}Road Map}} query.
diff --git a/src/site/apt/getting-started.apt b/src/site/apt/getting-started.apt
new file mode 100644
index 000000000..55f3fd6ff
--- /dev/null
+++ b/src/site/apt/getting-started.apt
@@ -0,0 +1,10 @@
+ ------
+ Spring Batch Getting Started
+ ------
+ Dave Syer
+ ------
+ December 2007
+
+Spring Batch Getting Started
+
+* Work in Progress
diff --git a/src/site/apt/migration/1.0-m2-m3.apt b/src/site/apt/migration/1.0-m2-m3.apt
new file mode 100644
index 000000000..0629cebb9
--- /dev/null
+++ b/src/site/apt/migration/1.0-m2-m3.apt
@@ -0,0 +1,67 @@
+ ------
+ Spring Batch Upgrade
+ ------
+ Robert Kasanicky
+ ------
+ December 2007
+
+Updating Spring Batch from 1.0-m2 to 1.0-m3
+
+ This is a description of what needed to be done to migrate the samples from m2 to the new m3 release.
+
+ [Tip:] if you use SpringIDE, make sure it tracks all your configuration files,
+so that errors are immediately visible.
+
+* VARIOUS
+
+ * OutputSource interface has been renamed to ItemWriter, implementations have been renamed correspondingly
+(e.g. FlatFileOutputSource is now FlatFileItemWriter). ItemWriter no longer extends ResourceLifecycle
+(which declares methods open() and close). Often you don't need to call these methods at all, in case
+you do you should implement InitializingBean and DisposableBean interfaces and declare the bean
+in step scope.
+
+ * Sql renamed to Jdbc (e.g. SqlInputSource -> JdbcInputSource).
+
+ * Database input sources split into driving and cursor packages (cursor makes a single query and iterates
+over the result set, driving query for keys and then make a new query for each key).
+
+ * ExceptionHandler interface has been changed to handle single throwable instead of a collection of throwables
+and it has become responsible for deciding about step completion. See javadoc for more details.
+
+ * FlatFileInputSources now include FieldSet mapping logic - you can inject a FieldSetMapper
+into the input source, so you no longer need to handle this in ItemProvider. Therefore
+FieldSetInputSource interface and FlatFileItemProvider have been removed. Where FlatFileItemProvider
+was used you can use the InputSourceItemProvider and inject the mapper into the input source.
+
+ * Validation has been removed from input sources and moved upwards to ValidatingItemProvider.
+
+ * XML related classes have been moved from io.stax package under io.file
+
+ * Fixed-length tokenizer accept ranges property instead of array of lengths, e.g. "2,3"
+(see javadoc for more details and fixedLengthImportJob.xml for example usage).
+
+
+* CONTAINER CONFIGURATION
+
+ * Use the value of JobConfiguration name property as the bean id.
+
+ * Simplest approach to update is to use the simple-container-definition.xml,
+data-source-context.xml (plus hibernate-context.xml) and batch.properties
+from M3 samples and replace the post-processor bean in your job xml file with
+"\"
+
+ * JobLauncher has been moved from execution.bootstrap to execution.launch
+
+ * JobExecutor facade has been removed, it's properties are now injected directly
+into SimpleJobLauncher intead of the facade itself.
+
+ * DefaultStepExecutorFactory is now SimpleStepExecutorFactory located in simple subpackage
+and needs a reference to jobRepository instead of value for StepExecutor name.
+
+ * ScheduledJobIdentifier has a new jobKey property replaces jobRun and jobStream.
+
+ * SimpleStepConfiguration has been moved one package up (from execution.step.simple to execution.step).
+
+ * Transaction manager class is specified in batch.properties
+
+
diff --git a/src/site/fml/faq.fml b/src/site/fml/faq.fml
index db6c3cde9..a9c6df090 100644
--- a/src/site/fml/faq.fml
+++ b/src/site/fml/faq.fml
@@ -1,315 +1,314 @@
-
-
-
-
-
- When will Batch 1.0 be out? My understanding is that the
- current product can be used on projects, is that
- correct?
-
-
- We expect m3, m4, rc1 before 1.0 final, so realistically
- not soon. You can track the progress and planning in
- JIRA
- (http://opensource.atlassian.com/projects/spring/browse/BATCH).
- But it is already usable at m2 as long as there is an
- understanding that upgrading might take a small amount
- of effort - there are 5 or 6 projects using it, with at
- least one in production. That project upgraded from m1
- to m2 (which was distinctly less trivial than m2 to m3
- is likely to be) in less than a day. We intend to keep
- changes from here to 1.0 as close to internal as
- possible, so the client touch points are pretty stable.
-
-
-
-
- How stable are the interfaces in Spring Batch?
-
-
-
- We are still in the milestone release phase (1.0-m3
- is in the pipeline). This means that we are still
- adding functionality that we want to be part of a
- 1.0 release. We do not rule out changes to package
- and interface names in this phase, but that said we
- think the basic domain concepts in Spring Batch are
- sound enough to survive significant re-factoring.
- The bulk of the application developer "touch points"
- have been stable for quite some time now, and we
- have several early adopter projects already using
- snapshot releases.
-
-
- The process from here is to collect feedback from
- the community and use that to decide on what extra
- features need to be added to get us to 1.0. When we
- are feature complete we will move to the "release
- candidate" phase, and the first release in that
- phase will be 1.0-rc1. When significant issues are
- resolved (if there are any) we will promote the
- release through the "rc" numbers, until we have a
- clean 1.0 release.
-
-
-
-
-
- When will support for the more complex job execution
- classes appear? Our Client has a number of
- multi-threaded batch jobs.
-
-
- Multi-threaded execution in a single VM is perfectly
- possible with 1.0 - but we recommend exercising caution
- in the analysis of such requirements (is it really
- necessary?). Several people have tried it and we haven't
- had any issues yet (except documentation requests).
-
-
-
-
- There are 4 main layers of the architecture
- (application, core, execution, and infrastructure), what
- is the vision for how the execution layer might be used
- in future? What happened to the "container" layer?
-
-
-
- The "layers" described are nicely segregated in
- terms of dependency. Each layer only depends (at
- compile time) on layers below it.
-
-
- We recognised that what we used to call the
- container layer actually is composed of two distinct
- contexts, "Core" and "Execution". So the full
- catalogue of contexts is:
-
-
- Application
- is the business logic. It is written by the
- application developer - the client of Spring
- Batch - and only depends on the other Core
- interfaces for compilation and
- configuration.
-
-
- Core
- is the public API of Spring Batch, including
- the core batch domain of Job, Step,
- configuration and Executor interfaces.
-
-
- Execution
- is the deployment, execution and management
- concerns. Different execution environments
- (e.g. in a JEE container, out of container)
- are configured differently, but can execute
- the same application business logic.
-
-
- Infrastructure
- is a set of low level tools, that are used
- to implement the execution and parts of the
- core layers.
-
-
-
-
-
- The "execution" layer is fertile ground for
- collaboration and contributions from the community
- and from projects in the field. The central
- interface is
- JobExecutorFacade
- with methods for starting and stopping jobs. The
- vision for this is that there can be multiple
- implementations of
- JobExecutorFacade
- providing different architectural patterns, and
- delivering different levels of scalability and
- robustness, without changing either the business
- logic or the job configuration. The initial 1.0
- release of Spring Batch will have a single
- implementation
- SimpleJobExecutorFacade
- (formerly known as
- SimpleBatchContainer
- .)
-
-
-
-
-
- What is the Spring Batch philosophy on the use of
- flexible strategies and default implementations?
-
-
- There are a great many extension points in Spring Batch
- for the framework developer (as opposed to the
- implementor of business logic). We expect clients to
- create their own more specific strategies that can be
- plugged in to control things like commit intervals (
- CompletionPolicy
- ), rules about how to deal with exceptions (
- ExceptionHandler
- ), and many others.
-
-
-
-
- How does Spring Batch differ from Quartz? Is there a
- place for them both in a solution?
-
-
-
- Spring Batch and Quartz have different goals. Spring
- Batch provides functionality for processing large
- volumes of data and Quartz provides functionality
- for scheduling tasks. So Quartz could complement
- 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
- SchedulerFactoryBean
- .
-
-
-
-
-
- How do I schedule a job with Spring Batch?
-
-
-
- Use a scheduling tool. There are plenty of them out
- there. Examples: Quartz, Control-M, Autosys. Quartz
- 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
- use the OS (cron, at, etc.).
-
-
- Simple sequential dependencies can be implemented
- using the job-steps model of Spring Batch. We think
- this is quite common. And in fact it makes it easier
- to correct a common mis-use of scehdulers - having
- hundreds of jobs configured, many of which are not
- independent, but only depend on one other.
-
-
-
-
-
- How will Spring Batch allow project to optimize for
- performance and scalability (through parallel processing
- or other)?
-
-
- We see this as one of the roles of the Execution layer.
- A specific implementation (or implementations) of the
- StepExecutor
- can deal with the concern of breaking apart the business
- logic and sharing it efficiently between parallel
- processes or processors. There are a number of
- technologies that could play a role here. The essence is
- just a set of concurrent remote calls to distributed
- agents that can handle some business processing. Since
- the business 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 EJBs
- handling the business processing. We switch off Home
- caching in the container and then 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
- any of the Spring Remoting protocols (plain RMI,
- HttpInvoker, JMS, Hessian etc.) with little more than a
- couple of lines change in the execution layer
- configuration.
-
-
-
-
- What are the key concepts in the Spring Batch core
- domain?
-
-
-
- In a nutshell: A JobConfiguration with a list of
- StepConfigurations is passed to an ExecutionService.
- From this a Job is constructed consisting of a
- series of Steps, each of which is executed by a
- StepExecutor. The StepExecutor contains all the
- strategies for deciding when to complete, when to
- commit, when to abort and when to continue.
-
-
- Many Jobs in practice consist of a single Step. Step
- is very useful and best practice for breaking a Job
- down into logical units, rather than having to
- execute separate Jobs (potentially in separate OS
- processes) which have no obvious logical connection.
-
-
- Jobs can be executed once, or many times with
- different logical identifiers (JobIdentifier). It is
- also possible to restart a failed Job with the same
- or a modified input source, and identify the
- resulting JobExecution as a separate entity. In this
- way the progress of a Job and its history of
- successful and failed executions can easily be
- tracked. The same argument applies to Steps, which
- have their corresponding StepExecution entity.
-
-
-
-
-
- How can messaging be used to scale batch architectures?
-
-
- There is a good deal of practical evidence from existing
- projects that a pipeline approach to batch processing is
- highly beneficial, leading to resilience and high
- throughput. We are often faced with mission-critical
- applications where audit trails are essential, and
- guaranteed processing is demanded, but where there are
- extremely tight limits on performance under load, or
- where high throughput gives a competitive advantage.
- Matt Welsh's work shows that a Staged Event Driven
- Architecture (SEDA) has enormous benefits over more
- rigid processing architectures, and message-oriented
- middleware (JMS, 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 between downstream
- and upstream stages, so the number of consumers can be
- adjusted to account for the amount of demand. So how
- does this fit into Spring Batch? Well it's a good
- example of an
- StepExecutor
- or (more broadly) execution runtime if the deployment is
- grid- or cluster-based, or in any way involves multiple
- OS processes.
-
-
-
- How can I contribute to Spring Batch?
-
- Use JIRA and the forum to get involved in discussions
- about the product and its design. There is a process for
- contributions and eventually becoming a committer. The
- process is pretty standard for all Apache-licensed
- 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
- example - ours might be slightly different); when the
- 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.
-
-
-
-
+
+
+
+
+
+ When will Batch 1.0 be out? My understanding is that the
+ current product can be used on projects, is that
+ correct?
+
+
+ We expect m3, m4, rc1 before 1.0 final, so realistically
+ not soon. You can track the progress and planning in
+ JIRA
+ (http://opensource.atlassian.com/projects/spring/browse/BATCH).
+ But it is already usable at m3 as long as there is an
+ understanding that upgrading might take a small amount
+ of effort - there are 5 or 6 projects using it, with at
+ least one in production. That project upgraded from m1
+ to m2 in less than a day. We intend to keep changes from
+ here to 1.0 as close to internal as possible, so the
+ client touch points are pretty stable.
+
+
+
+
+ How stable are the interfaces in Spring Batch?
+
+
+
+ We are still in the milestone release phase (1.0-m4
+ is in the pipeline). This means that we are still
+ adding functionality that we want to be part of a
+ 1.0 release. We do not rule out changes to package
+ and interface names in this phase, but that said we
+ think the basic domain concepts in Spring Batch are
+ sound enough to survive significant re-factoring.
+ The bulk of the application developer "touch points"
+ have been stable for quite some time now, and we
+ have several early adopter projects already using
+ snapshot releases.
+
+
+ The process from here is to collect feedback from
+ the community and use that to decide on what extra
+ features need to be added to get us to 1.0. When we
+ are feature complete we will move to the "release
+ candidate" phase, and the first release in that
+ phase will be 1.0-rc1. We only expect one release
+ candidate, but if there is enough demand for new
+ features, or significant problems occur in rc1, then
+ we might need an rc2. We aim for 2 weeks elapsed
+ time between release candidates (and between the
+ last milestone and rc1).
+
+
+
+
+
+ When will support for the more complex job execution
+ classes appear? Our Client has a number of
+ multi-threaded batch jobs.
+
+
+ Multi-threaded execution in a single VM is perfectly
+ possible with 1.0 - but we recommend exercising caution
+ in the analysis of such requirements (is it really
+ necessary?). Several people have tried it and there are
+ some issues with restartability (plus the usual
+ documentation requests), but otherwise it should work.
+ With a little more effort starting in m4 it should work
+ even better, but we aren't planning to solve the
+ restartability problem until after 1.0.
+
+
+
+
+ There are 4 main layers of the architecture
+ (application, core, execution, and infrastructure), what
+ is the vision for how the execution layer might be used
+ in future? What happened to the "container" layer?
+
+
+
+ The "layers" described are nicely segregated in
+ terms of dependency. Each layer only depends (at
+ compile time) on layers below it.
+
+
+ We recognised that what we used to call the
+ container layer actually is composed of two distinct
+ contexts, "Core" and "Execution". So the full
+ catalogue of contexts is:
+
+
+ Application
+ is the business logic. It is written by the
+ application developer - the client of Spring
+ Batch - and only depends on the other Core
+ interfaces for compilation and
+ configuration.
+
+
+ Core
+ is the public API of Spring Batch, including
+ the core batch domain of Job, Step,
+ configuration and Executor interfaces.
+
+
+ Execution
+ is the deployment, execution and management
+ concerns. Different execution environments
+ (e.g. in a JEE container, out of container)
+ are configured differently, but can execute
+ the same application business logic.
+
+
+ Infrastructure
+ is a set of low level tools, that are used
+ to implement the execution and parts of the
+ core layers.
+
+
+
+
+
+ The "execution" layer is fertile ground for
+ collaboration and contributions from the community
+ and from projects in the field. The central
+ interface is
+ JobLauncher
+ with methods for starting and stopping jobs. The
+ vision for this is that there can be multiple
+ implementations of
+ JobLauncher
+ providing different architectural patterns, and
+ delivering different levels of scalability and
+ robustness, without changing either the business
+ logic or the job configuration.
+
+
+
+
+
+ What is the Spring Batch philosophy on the use of
+ flexible strategies and default implementations?
+
+
+ There are a great many extension points in Spring Batch
+ for the framework developer (as opposed to the
+ implementor of business logic). We expect clients to
+ create their own more specific strategies that can be
+ plugged in to control things like commit intervals (
+ CompletionPolicy
+ ), rules about how to deal with exceptions (
+ ExceptionHandler
+ ), and many others.
+
+
+
+
+ How does Spring Batch differ from Quartz? Is there a
+ place for them both in a solution?
+
+
+
+ Spring Batch and Quartz have different goals. Spring
+ Batch provides functionality for processing large
+ volumes of data and Quartz provides functionality
+ for scheduling tasks. So Quartz could complement
+ 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
+ SchedulerFactoryBean
+ .
+
+
+
+
+
+ How do I schedule a job with Spring Batch?
+
+
+
+ Use a scheduling tool. There are plenty of them out
+ there. Examples: Quartz, Control-M, Autosys. Quartz
+ 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
+ use the OS (cron, at, etc.).
+
+
+ Simple sequential dependencies can be implemented
+ using the job-steps model of Spring Batch. We think
+ this is quite common. And in fact it makes it easier
+ to correct a common mis-use of scehdulers - having
+ hundreds of jobs configured, many of which are not
+ independent, but only depend on one other.
+
+
+
+
+
+ How will Spring Batch allow project to optimize for
+ performance and scalability (through parallel processing
+ or other)?
+
+
+ We see this as one of the roles of the Execution layer.
+ A specific implementation (or implementations) of the
+ StepExecutor
+ can deal with the concern of breaking apart the business
+ logic and sharing it efficiently between parallel
+ processes or processors. There are a number of
+ technologies that could play a role here. The essence is
+ just a set of concurrent remote calls to distributed
+ agents that can handle some business processing. Since
+ the business 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 EJBs
+ handling the business processing. We switch off Home
+ caching in the container and then 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
+ any of the Spring Remoting protocols (plain RMI,
+ HttpInvoker, JMS, Hessian etc.) with little more than a
+ couple of lines change in the execution layer
+ configuration.
+
+
+
+
+ What are the key concepts in the Spring Batch core
+ domain?
+
+
+
+ In a nutshell: A JobConfiguration with a list of
+ StepConfigurations is passed to a JobExecutor.
+ From this a Job is constructed consisting of a
+ series of Steps, each of which is executed by a
+ StepExecutor. The StepExecutor contains all the
+ strategies for deciding when to complete, when to
+ commit, when to abort and when to continue.
+
+
+ Many Jobs in practice consist of a single Step. Step
+ is very useful and best practice for breaking a Job
+ down into logical units, rather than having to
+ execute separate Jobs (potentially in separate OS
+ processes) which have no obvious logical connection.
+
+
+ Jobs can be executed once, or many times with
+ different logical identifiers (JobIdentifier). It is
+ also possible to restart a failed Job with the same
+ or a modified input source, and identify the
+ resulting JobExecution as a separate entity. In this
+ way the progress of a Job and its history of
+ successful and failed executions can easily be
+ tracked. The same argument applies to Steps, which
+ have their corresponding StepExecution entity.
+
+
+
+
+
+ How can messaging be used to scale batch architectures?
+
+
+ There is a good deal of practical evidence from existing
+ projects that a pipeline approach to batch processing is
+ highly beneficial, leading to resilience and high
+ throughput. We are often faced with mission-critical
+ applications where audit trails are essential, and
+ guaranteed processing is demanded, but where there are
+ extremely tight limits on performance under load, or
+ where high throughput gives a competitive advantage.
+ Matt Welsh's work shows that a Staged Event Driven
+ Architecture (SEDA) has enormous benefits over more
+ rigid processing architectures, and message-oriented
+ middleware (JMS, 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 between downstream
+ and upstream stages, so the number of consumers can be
+ adjusted to account for the amount of demand. So how
+ does this fit into Spring Batch? Well it's a good
+ example of an
+ StepExecutor
+ or (more broadly) execution runtime if the deployment is
+ grid- or cluster-based, or in any way involves multiple
+ OS processes.
+
+
+
+ How can I contribute to Spring Batch?
+
+ Use JIRA and the forum to get involved in discussions
+ about the product and its design. There is a process for
+ contributions and eventually becoming a committer. The
+ process is pretty standard for all Apache-licensed
+ 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
+ example - ours might be slightly different); when the
+ 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.
+
+
+
+
diff --git a/src/site/ppt/Figures.ppt b/src/site/ppt/Figures.ppt
index e3c0c354e8c9b5fb493891cf536d47b4aec5c9b8..519f59798204fd66e97a6fa0590fc8a4f61d020d 100644
GIT binary patch
delta 5738
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
diff --git a/src/site/site.xml b/src/site/site.xml
index 9668a2333..2d530dcdf 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -28,9 +28,10 @@
-
+
-
+
+