diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/DecisionParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/DecisionParser.java index 31dd8b653..be343db6b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/DecisionParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/DecisionParser.java @@ -26,7 +26,7 @@ import org.w3c.dom.Element; /** * Internal parser for the <decision/> elements inside a job. A decision * element references a bean definition for a - * {@link org.springframework.batch.core.job.flow.support.state.JobExecutionDecider} + * {@link org.springframework.batch.core.job.flow.JobExecutionDecider} * and goes on to list a set of transitions to other states with <next * on="pattern" to="stepName"/>. Used by the {@link JobParser}. * diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java index eed536384..6bc340a3e 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/FlowParser.java @@ -21,6 +21,7 @@ import java.util.List; import org.springframework.batch.core.job.flow.support.SimpleFlow; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; @@ -58,17 +59,18 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { /** * @param element the top level element containing a flow definition - * @param outerContext the {@link ParserContext} + * @param parserContext the {@link ParserContext} */ @Override - protected void doParse(Element element, ParserContext outerContext, BeanDefinitionBuilder builder) { + protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { List stateTransitions = new ArrayList(); StepParser stepParser = new StepParser(); DecisionParser decisionParser = new DecisionParser(); SplitParser splitParser = new SplitParser(); - ParserContext parserContext = new ParserContext(outerContext.getReaderContext(), outerContext.getDelegate(), - builder.getBeanDefinition()); + CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), + parserContext.extractSource(element)); + parserContext.pushContainingComponent(compositeDef); NodeList children = element.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { @@ -82,7 +84,8 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { stateTransitions.addAll(decisionParser.parse((Element) node, parserContext)); } else if (nodeName.equals("split")) { - stateTransitions.addAll(splitParser.parse((Element) node, parserContext)); + stateTransitions.addAll(splitParser.parse((Element) node, new ParserContext(parserContext + .getReaderContext(), parserContext.getDelegate(), builder.getBeanDefinition()))); } } } @@ -95,6 +98,8 @@ public class FlowParser extends AbstractSingleBeanDefinitionParser { builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + parserContext.popAndRegisterContainingComponent(); + } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobExecutionListenerParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobExecutionListenerParser.java index 02972c942..0f01b08a3 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobExecutionListenerParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobExecutionListenerParser.java @@ -21,9 +21,7 @@ import static org.springframework.util.StringUtils.hasText; import java.util.ArrayList; import java.util.List; -import org.springframework.beans.factory.config.BeanReference; -import org.springframework.beans.factory.config.RuntimeBeanReference; -import org.springframework.beans.factory.parsing.BeanComponentDefinition; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedList; @@ -37,26 +35,26 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; /** - * {@link BeanDefinitionParser} for {@link org.springframework.batch.core.JobExecutionListener}s + * {@link BeanDefinitionParser} for + * {@link org.springframework.batch.core.JobExecutionListener}s * * @author Lucas Ward - * + * @author Dave Syer + * */ public class JobExecutionListenerParser { @SuppressWarnings("unchecked") - public ManagedList parse(Element element, - ParserContext parserContext) { - List listeners = new ArrayList(); + public ManagedList parse(Element element, ParserContext parserContext) { + List listeners = new ArrayList(); List listenerElements = (List) DomUtils.getChildElementsByTagName(element, "listener"); - for(Element listenerElement : listenerElements){ - BeanDefinitionBuilder listenerBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.batch.core.listener.JobListenerFactoryBean"); + for (Element listenerElement : listenerElements) { + BeanDefinitionBuilder listenerBuilder = BeanDefinitionBuilder + .genericBeanDefinition("org.springframework.batch.core.listener.JobListenerFactoryBean"); String id = listenerElement.getAttribute("id"); String listenerRef = listenerElement.getAttribute("ref"); String className = listenerElement.getAttribute("class"); - if ((StringUtils.hasText(id) || StringUtils.hasText(className)) - && StringUtils.hasText(listenerRef)) { + if ((StringUtils.hasText(id) || StringUtils.hasText(className)) && StringUtils.hasText(listenerRef)) { NamedNodeMap attributeNodes = listenerElement.getAttributes(); StringBuilder attributes = new StringBuilder(); for (int i = 0; i < attributeNodes.getLength(); i++) { @@ -65,48 +63,43 @@ public class JobExecutionListenerParser { } attributes.append(attributeNodes.item(i)); } - parserContext.getReaderContext().error("Both 'ref' and 'class' specified; use 'class' with an optional 'id' or just 'ref' for <" + - listenerElement.getTagName() + "> element with attributes: " + attributes, listenerElement); + parserContext.getReaderContext().error( + "Both 'ref' and 'class' specified; use 'class' with an optional 'id' or just 'ref' for <" + + listenerElement.getTagName() + "> element with attributes: " + attributes, + listenerElement); } - - if(hasText(listenerRef)){ + + if (hasText(listenerRef)) { listenerBuilder.addPropertyReference("delegate", listenerRef); } - else if(hasText(className)){ + else if (hasText(className)) { RootBeanDefinition beanDef = new RootBeanDefinition(className, null, null); - String delegateId = parserContext.getReaderContext().generateBeanName(beanDef); - beanDef.setSource(parserContext.extractSource(listenerElement)); - parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, delegateId)); - listenerBuilder.addPropertyReference("delegate", delegateId); + listenerBuilder.addPropertyValue("delegate", beanDef); } else { - parserContext.getReaderContext().error("Neither 'ref' or 'class' specified for <" + listenerElement.getTagName() + "> element", listenerElement); + parserContext.getReaderContext().error( + "Neither 'ref' or 'class' specified for <" + listenerElement.getTagName() + "> element", + listenerElement); } - + ManagedMap metaDataMap = new ManagedMap(); String beforeMethod = listenerElement.getAttribute("before-method"); - if(StringUtils.hasText(beforeMethod)){ + if (StringUtils.hasText(beforeMethod)) { metaDataMap.put("beforeMethod", beforeMethod); } - + String afterMethod = listenerElement.getAttribute("after-method"); - if(StringUtils.hasText(beforeMethod)){ + if (StringUtils.hasText(beforeMethod)) { metaDataMap.put("afterMethod", afterMethod); } listenerBuilder.addPropertyValue("metaDataMap", metaDataMap); AbstractBeanDefinition beanDef = listenerBuilder.getBeanDefinition(); - if (!StringUtils.hasText(id)) { - id = parserContext.getReaderContext().generateBeanName(beanDef); - } - parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, id)); - beanDef.setSource(parserContext.extractSource(listenerElement)); - BeanReference bean = new RuntimeBeanReference(id); - listeners.add(bean); + listeners.add(beanDef); } - + ManagedList managedList = new ManagedList(); managedList.addAll(listeners); - + return managedList; } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java index 16db155b2..803661b26 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java @@ -17,6 +17,7 @@ package org.springframework.batch.core.configuration.xml; import org.springframework.batch.core.job.flow.FlowJob; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; @@ -76,8 +77,12 @@ public class JobParser extends AbstractSingleBeanDefinitionParser { JobExecutionListenerParser listenerParser = new JobExecutionListenerParser(); Element listenersElement = (Element)DomUtils.getChildElementByTagName(element, "listeners"); if(listenersElement != null){ + CompositeComponentDefinition compositeDef = + new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); + parserContext.pushContainingComponent(compositeDef); ManagedList managedList = listenerParser.parse(listenersElement, parserContext); builder.addPropertyValue("jobExecutionListeners", managedList); + parserContext.popAndRegisterContainingComponent(); } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java index 16b17ed66..b74109120 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/SplitParser.java @@ -31,7 +31,7 @@ import org.w3c.dom.Element; /** * Internal parser for the <split/> elements inside a job. A split element * references a bean definition for a - * {@link org.springframework.batch.core.job.flow.support.state.JobExecutionDecider} and goes on to + * {@link org.springframework.batch.core.job.flow.JobExecutionDecider} and goes on to * list a set of transitions to other states with <next on="pattern" * to="stepName"/>. Used by the {@link JobParser}. * diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParser.java index 61fc0dab6..c68511bf4 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParser.java @@ -23,6 +23,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanReference; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.parsing.BeanComponentDefinition; +import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedList; @@ -405,32 +406,40 @@ public class StepParser { Element listenersElement = DomUtils.getChildElementByTagName(element, "listeners"); if (listenersElement != null) { - List listenerBeans = new ArrayList(); + CompositeComponentDefinition compositeDef = + new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); + parserContext.pushContainingComponent(compositeDef); + List listenerBeans = new ArrayList(); handleStepListenerElements(parserContext, listenersElement, listenerBeans); ManagedList arguments = new ManagedList(); arguments.addAll(listenerBeans); bd.getPropertyValues().addPropertyValue(property, arguments); + parserContext.popAndRegisterContainingComponent(); } } @SuppressWarnings("unchecked") private void handleRetryListenersElement(Element element, BeanDefinition bd, ParserContext parserContext) { - Element retryListenersElement = + Element listenersElement = DomUtils.getChildElementByTagName(element, "retry-listeners"); - if (retryListenersElement != null) { - List retryListenerBeans = new ArrayList(); - handleListenerElements(parserContext, retryListenersElement, + if (listenersElement != null) { + CompositeComponentDefinition compositeDef = + new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); + parserContext.pushContainingComponent(compositeDef); + List retryListenerBeans = new ArrayList(); + handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans); ManagedList arguments = new ManagedList(); arguments.addAll(retryListenerBeans); bd.getPropertyValues().addPropertyValue("retryListeners", arguments); + parserContext.popAndRegisterContainingComponent(); } } @SuppressWarnings("unchecked") - private void handleListenerElements(ParserContext parserContext, - Element element, List beans) { + private void handleRetryListenerElements(ParserContext parserContext, + Element element, List beans) { List listenerElements = DomUtils.getChildElementsByTagName(element, "listener"); if (listenerElements != null) { @@ -449,10 +458,7 @@ public class StepParser { if (!StringUtils.hasText(id)) { id = parserContext.getReaderContext().generateBeanName(beanDef); } - beanDef.setSource(parserContext.extractSource(listenerElement)); - parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, id)); - BeanReference bean = new RuntimeBeanReference(id); - beans.add(bean); + beans.add(beanDef); } else { parserContext.getReaderContext().error("Neither 'ref' or 'class' specified for <" + listenerElement.getTagName() + "> element", element); @@ -463,7 +469,7 @@ public class StepParser { @SuppressWarnings("unchecked") private void handleStepListenerElements(ParserContext parserContext, - Element element, List beans) { + Element element, List beans) { List listenerElements = DomUtils.getChildElementsByTagName(element, "listener"); if (listenerElements != null) { @@ -480,10 +486,7 @@ public class StepParser { } else if (StringUtils.hasText(className)) { RootBeanDefinition beanDef = new RootBeanDefinition(className, null, null); - String delegateId = parserContext.getReaderContext().generateBeanName(beanDef); - beanDef.setSource(parserContext.extractSource(listenerElement)); - parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, delegateId)); - listenerBuilder.addPropertyReference("delegate", delegateId); + listenerBuilder.addPropertyValue("delegate", beanDef); } else { parserContext.getReaderContext().error("Neither 'ref' or 'class' specified for <" + listenerElement.getTagName() + "> element", element); @@ -520,10 +523,7 @@ public class StepParser { if (!StringUtils.hasText(id)) { id = parserContext.getReaderContext().generateBeanName(beanDef); } - parserContext.registerBeanComponent(new BeanComponentDefinition(beanDef, id)); - beanDef.setSource(parserContext.extractSource(listenerElement)); - BeanReference bean = new RuntimeBeanReference(id); - beans.add(bean); + beans.add(beanDef); } } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/JobExecutionDecider.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/JobExecutionDecider.java similarity index 95% rename from spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/JobExecutionDecider.java rename to spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/JobExecutionDecider.java index 29922b962..6f476d493 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/JobExecutionDecider.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/JobExecutionDecider.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.batch.core.job.flow.support.state; +package org.springframework.batch.core.job.flow; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.StepExecution; diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java index 85f7876d2..19240aa33 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/state/DecisionState.java @@ -17,6 +17,7 @@ package org.springframework.batch.core.job.flow.support.state; import org.springframework.batch.core.job.flow.FlowExecutor; +import org.springframework.batch.core.job.flow.JobExecutionDecider; /** diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd b/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd index fd0940372..3144ee024 100644 --- a/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd @@ -30,7 +30,7 @@ - + @@ -109,10 +109,13 @@ Defines a stage in job processing backed by a - Step. + Step. The name attribute must be specified and - can match the id of a bean definition - for a Step. If it does not, then you must provide a + can match the id of + a bean + definition + for a Step. If it does not, then you must provide + a tasklet definition. The next attribute is a synonym for <next on="*" .../> @@ -133,6 +136,11 @@ The tasklet is a reference to another bean definition that defines implements the Tasklet interface. + + + + + @@ -176,6 +184,11 @@ The decider is a reference to a JobExecutionDecider that can produce a status to base the next transition on. + + + + + @@ -196,7 +209,16 @@ maxOccurs="unbounded"> - + + + + A reference to a JobExecutionListener or a POJO (with before-method / after-method). + + + + + + @@ -451,9 +473,9 @@ - - - + + + @@ -526,9 +548,9 @@ - - - + + + diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DecisionJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DecisionJobParserTests.java index fc659b179..08d2e9d61 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DecisionJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/DecisionJobParserTests.java @@ -26,7 +26,7 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.job.flow.support.state.JobExecutionDecider; +import org.springframework.batch.core.job.flow.JobExecutionDecider; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests.java index 4d0174c45..c806e6768 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests.java @@ -111,7 +111,7 @@ public class StepWithFaultTolerantProcessTaskJobParserTests { Object listeners = ReflectionTestUtils.getField(factory, "listeners"); assertEquals("wrong number of listeners:", 2, ((StepListener[])listeners).length); Object retryListeners = ReflectionTestUtils.getField(factory, "retryListeners"); - assertEquals("wrong number of retry-listeners:", 1, ((RetryListener[])retryListeners).length); + assertEquals("wrong number of retry-listeners:", 2, ((RetryListener[])retryListeners).length); Object streams = ReflectionTestUtils.getField(factory, "streams"); assertEquals("wrong number of streams:", 1, ((ItemStream[])streams).length); JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), new JobParameters()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java index 0767cb6e8..92548f461 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/StopJobParserTests.java @@ -26,7 +26,7 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.job.flow.support.state.JobExecutionDecider; +import org.springframework.batch.core.job.flow.JobExecutionDecider; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java index 6a1549616..674be81e4 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/flow/FlowJobTests.java @@ -38,7 +38,6 @@ import org.springframework.batch.core.job.flow.support.SimpleFlow; import org.springframework.batch.core.job.flow.support.StateTransition; import org.springframework.batch.core.job.flow.support.state.DecisionState; import org.springframework.batch.core.job.flow.support.state.EndState; -import org.springframework.batch.core.job.flow.support.state.JobExecutionDecider; import org.springframework.batch.core.job.flow.support.state.StepState; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests-context.xml index 769cfed04..c84ca113d 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepWithFaultTolerantProcessTaskJobParserTests-context.xml @@ -15,6 +15,7 @@ is-reader-transactional-queue="true" task-executor="taskExecutor"> + @@ -39,6 +40,8 @@ + + \ No newline at end of file diff --git a/spring-batch-core/template.mf b/spring-batch-core/template.mf index 36d93a390..497a81473 100644 --- a/spring-batch-core/template.mf +++ b/spring-batch-core/template.mf @@ -7,13 +7,14 @@ Ignored-Existing-Headers: Import-Package, Export-Package Import-Template: - com.thoughtworks.xstream.*;version="[1.3,1.4)", - org.codehaus.jettison.*;version="[1.0,1.1)", + com.thoughtworks.xstream.*;version="[1.3,1.4)";resolution:=optional, + org.codehaus.jettison.*;version="[1.0,1.1)";resolution:=optional, org.aopalliance.*;version="[1.0.0, 2.0.0)", - org.aspectj.*;version="[1.5.2,1.7.0)", - org.apache.commons.logging.*;version="[1.1.0, 2.0.0)", + org.aspectj.*;version="[1.5.2,1.7.0)";resolution:=optional, + org.osgi.framework;resolution:=optional, + org.apache.commons.logging.*;version="[1.0.4, 2.0.0)", + org.springframework.batch.*;version="[2.0.0, 3.0.0)";resolution:=optional, org.springframework.aop.*;version="[2.5.5, 3.0.0)", - org.springframework.batch.*;version="[2.0.0, 3.0.0)", org.springframework.beans.*;version="[2.5.5, 3.0.0)", org.springframework.context.*;version="[2.5.5, 3.0.0)", org.springframework.core.*;version="[2.5.5, 3.0.0)", diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/loopFlow/LimitDecider.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/loopFlow/LimitDecider.java index e3cce4a02..33956c953 100644 --- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/loopFlow/LimitDecider.java +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/loopFlow/LimitDecider.java @@ -17,7 +17,7 @@ package org.springframework.batch.sample.loopFlow; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.job.flow.support.state.JobExecutionDecider; +import org.springframework.batch.core.job.flow.JobExecutionDecider; /** * This decider will return "CONTINUE" until the limit it reached, at which diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/common/SkipCheckingDecider.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/common/SkipCheckingDecider.java index cb468aa7f..7360ca7b5 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/common/SkipCheckingDecider.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/common/SkipCheckingDecider.java @@ -3,7 +3,7 @@ package org.springframework.batch.sample.common; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.job.flow.support.state.JobExecutionDecider; +import org.springframework.batch.core.job.flow.JobExecutionDecider; public class SkipCheckingDecider implements JobExecutionDecider { diff --git a/src/site/apt/downloads.apt b/src/site/apt/downloads.apt index 5d114ae3e..7548fc6e0 100644 --- a/src/site/apt/downloads.apt +++ b/src/site/apt/downloads.apt @@ -3,7 +3,7 @@ --------- Dave Syer, Ben Hale ------ - December 2007 + December 2007, February 2009 Spring Batch Downloads @@ -11,7 +11,7 @@ Spring Batch Downloads * Zip Downloads - There are ZIP based artifacts that contain the release JARs. There are two ZIP files in the release. The first zip file is called <<>>. This file contains only the JAR files for the release. The second zip file is called <<>>. This file contains the JAR files for the release as well as all of the third-party dependencies for the release. In addition, this release contains the Spring Batch source code including the samples and their third-party dependencies as well. + There are ZIP based artifacts that contain the release JARs. There are two ZIP files in the release. The first zip file is called <<>>. This file contains only the JAR files for the release. The second zip file is called <<>>. This file contains the JAR files for the release as well as all of the third-party dependencies for the release. In addition, this release contains the Spring Batch source code including the samples and their third-party dependencies as well. * Full releases: {{{http://static.springframework.org/downloads/nightly/release-download.php?project=BATCH}here}}. @@ -19,11 +19,44 @@ Spring Batch Downloads * Maven Artifacts - Final releases are published on Maven central repo, and also in our s3 repository, browseable {{{http://s3browse.com/explore/maven.springframework.org/release/org/springframework/batch}here}}: + All releases are published in the SpringSource Enterprise Repository, browseable {{{http://www.springsource.com/repository/app/}here}}. The repository is segregrated by release, milestone and snaphot releases. For full releases use these repositories: + ++--- + + com.springsource.repository.bundles.release + SpringSource Enterprise Bundle Repository - + SpringSource Bundle Releases + http://repository.springsource.com/maven/bundles/release + + false + + + + com.springsource.repository.bundles.external + SpringSource Enterprise Bundle Repository - + External Bundle Releases + http://repository.springsource.com/maven/bundles/external + + false + + ++--- + + In the SpringSource Enterprise Repository the artifacts have long, Java-package-like names: <<>>, <<>> and <<>>. They have dependencies which are in the same style, and are transitively complete within the same repository. So individual dependencies can by added like so (inside a \ element at the top level): + ++--------------- + + org.springframework.batch + org.springframework.batch.core + 1.1.4.RELEASE + ++--------------- + + With full releases there are also traditional "spring-*" artifacts deployed on the Maven central repo, and also in our s3 repository, browseable {{{http://s3browse.com/explore/maven.springframework.org/release/org/springframework/batch}here}}: +--------------- - spring-s3 + spring-releases Spring Portfolio Maven RELEASE Repository http://s3.amazonaws.com/maven.springframework.org/release @@ -37,19 +70,43 @@ Spring Batch Downloads org.springframework.batch spring-batch-core - 1.0.0 + 1.1.4.RELEASE +--------------- - The Core module has dependencies on Infrastructure, so you only need to include that to build and run jobs with Spring Batch. I.e. + The Core module has dependencies on Infrastructure, so you only need to include that to build and run jobs with Spring Batch. * Milestone Builds - These builds are provided for evaluation and community feedback. Spring Batch builds have a release identifier ending in "mX" where X is the milestone number, or "rcX" for a release candidate. + These builds are provided for evaluation and community feedback. Spring Batch builds have a release identifier ending in "MX" where X is the milestone number, or "RCX" for a release candidate (older builds have "mX" and "rcX"). You can find the .ZIP downloads of the milestones {{{http://static.springframework.org/downloads/nightly/milestone-download.php?project=BATCH}here}}. - Milestones and snapshots Maven artifacts are also published in s3, but not in Maven central repo. You can browse the {{{http://s3browse.com/explore/maven.springframework.org/milestone/org/springframework/batch}repository}} with a web browser. To use them, just add the following repository to your POM (inside a \ element at the top level): + Milestones are deployed to the SpringSource Enterprise Repository, so use this repository if you want to depend on artifacts in the <<>> style: + ++--- + + com.springsource.repository.bundles.milestone + SpringSource Enterprise Bundle Repository - + SpringSource Bundle Milestones + http://repository.springsource.com/maven/bundles/milestone + + false + + ++--- + + Then individual dependencies can by added like so (inside a \ element at the top level): + ++--------------- + + org.springframework.batch + org.springframework.batch.core + 2.0.0.M4 + ++--------------- + + Milestones are also published in the older s3 repository and in Maven central repo. You can browse the {{{http://s3browse.com/explore/maven.springframework.org/milestone/org/springframework/batch}S3 repository}} with a web browser. To use them, just add the following repository to your POM (inside a \ element at the top level): +--------------- @@ -57,6 +114,16 @@ Spring Batch Downloads Spring Portfolio Maven MILESTONE Repository http://s3.amazonaws.com/maven.springframework.org/milestone ++--------------- + + Then individual dependencies can then by added like so (inside a \ element at the top level): + ++--------------- + + org.springframework.batch + spring-batch-core + 2.0.0.M4 + +--------------- Snapshot Builds diff --git a/src/site/apt/snapshots.apt b/src/site/apt/snapshots.apt index 95ca74059..0419b3db5 100644 --- a/src/site/apt/snapshots.apt +++ b/src/site/apt/snapshots.apt @@ -3,31 +3,32 @@ --------- Dave Syer ------ - August 2007 + August 2007, February 2009 Snapshot Builds - These builds are provided for testing and development purposes only. They are built by a Bamboo process automatically using the latest snapshot from Subversion. + These builds are provided for testing and development purposes only. They are built by a Bamboo process automatically using the latest snapshot from Subversion. - You can browse the {{{http://s3browse.com/explore/maven.springframework.org/snapshot/org/springframework/batch}repository}} with a web browser. If you are downloading the jar files manually from there you can see the internal and external project dependencies in the <<>> files. You will probably need <<>> and <<>>. + Snapshots are deployed every night to the {{{http://s3browse.com/explore/repository.springsource.com/maven/bundles/snapshot}SpringSource Enterprise Repository}}, so use this in your POM (inside a \ element): - The snapshots are deloyed to a Maven2 snapshot repository. To use it, just add the following repository to your POM (inside a \ element at the top level): - -+--------------- ++--- - spring-s3 - Springframework Maven SNAPSHOT Repository - http://s3.amazonaws.com/maven.springframework.org/snapshot + com.springsource.repository.bundles.snapshot + SpringSource Enterprise Bundle Repository - + Snapshot Bundle Releases + http://repository.springsource.com/maven/bundles/snapshot -+--------------- ++--- - Individual dependencies can then by added like so (inside a \ element at the top level): + If you are downloading the jar files manually from there you can see the internal and external project dependencies in the <<>> files. You will probably need <<>> and <<>>. + + Individual dependencies can then by added like so (inside a \ element at the top level): +--------------- org.springframework.batch - spring-batch-core - 1.0.1-SNAPSHOT + org.springframework.batch.core + 2.0.0.CI-SNAPSHOT +---------------