40 lines
4.3 KiB
HTML
40 lines
4.3 KiB
HTML
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg"><head><title>Dependency Injection</title><link rel="stylesheet" type="text/css" href="docbook-epub.css"/><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"/><link rel="prev" href="ch12s02.xhtml" title="Setup"/><link rel="next" href="ch12s04.xhtml" title="Batch Properties"/></head><body><header/><section class="section" title="Dependency Injection" epub:type="subchapter" id="dependencyInjection"><div class="titlepage"><div><div><h2 class="title" style="clear: both">Dependency Injection</h2></div></div></div><p>JSR-352 is based heavily on the Spring Batch programming model. As such, while not explicitly requiring a
|
|
formal dependency injection implementation, DI of some kind implied. Spring Batch supports all three
|
|
methods for loading batch artifacts defined by JSR-352:</p><div class="itemizedlist" epub:type="list"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" epub:type="list-item"><p>Implementation Specific Loader - Spring Batch is built upon Spring and so supports Spring
|
|
dependency injection within JSR-352 batch jobs.</p></li><li class="listitem" epub:type="list-item"><p>Archive Loader - JSR-352 defines the existing of a batch.xml file that provides mappings between a
|
|
logical name and a class name. This file must be found within the /META-INF/ directory if it is
|
|
used.</p></li><li class="listitem" epub:type="list-item"><p>Thread Context Class Loader - JSR-352 allows configurations to specify batch artifact
|
|
implementations in their JSL by providing the fully qualified class name inline. Spring Batch
|
|
supports this as well in JSR-352 configured jobs.</p></li></ul></div><p>To use Spring dependency injection within a JSR-352 based batch job consists of configuring batch
|
|
artifacts using a Spring application context as beans. Once the beans have been defined, a job can refer to
|
|
them as it would any bean defined within the batch.xml.</p><pre class="programlisting"><?xml version="1.0" encoding="UTF-8"?>
|
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
|
http://www.springframework.org/schema/beans/spring-beans.xsd
|
|
http://xmlns.jcp.org/xml/ns/javaee
|
|
http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd">
|
|
|
|
<!-- javax.batch.api.Batchlet implementation -->
|
|
<bean id="fooBatchlet" class="io.spring.FooBatchlet">
|
|
<property name="prop" value="bar"/>
|
|
</bean>
|
|
|
|
<!-- Job is defined using the JSL schema provided in JSR-352 -->
|
|
<job id="fooJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
|
|
<step id="step1">
|
|
<batchlet ref="fooBatchlet"/>
|
|
</step>
|
|
</job>
|
|
</beans>
|
|
</pre><p>The assembly of Spring contexts (imports, etc) works with JSR-352 jobs just as it would with any other
|
|
Spring based application. The only difference with a JSR-352 based job is that the entry point for the
|
|
context definition will be the job definition found in /META-INF/batch-jobs/.</p><p>To use the thread context class loader approach, all you need to do is provide the fully qualified class
|
|
name as the ref. It is important to note that when using this approach or the batch.xml approach, the class
|
|
referenced requires a no argument constructor which will be used to create the bean.</p><pre class="programlisting"><?xml version="1.0" encoding="UTF-8"?>
|
|
<job id="fooJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
|
|
<step id="step1" >
|
|
<batchlet ref="io.spring.FooBatchlet" />
|
|
</step>
|
|
</job>
|
|
</pre></section><footer/></body></html> |