Browse files

Add cli archetype

  • Loading branch information...
1 parent 09d7b58 commit 81da1195e9f9e4a172ed2cfb58866975b1aff721 dsyer committed Jun 23, 2008
View
47 archetypes/common-test.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file is imported in the archetype pom.xml files for integration tests -->
+<project name="common-test" default="test">
+
+ <property name="version" value="${version}"/>
+ <property name="archetype" value="${archetype}"/>
+ <property name="test.dir" value="${basedir}/target/test-archetype"/>
+
+ <target name="test" description="Tests that 'mvn integration-test' works with archetype">
+ <echo message="Creating archetype '${archetype}', version '${version}'"/>
+ <test archetype="${archetype}" version="${version}"/>
+ </target>
+
+ <macrodef name="test">
+ <attribute name="archetype"/>
+ <attribute name="version"/>
+
+ <sequential>
+ <delete dir="${test.dir}"/>
+ <mkdir dir="${test.dir}"/>
+ <maven dir="${basedir}" command="install -Dmaven.test.skip=true"/>
+ <maven dir="${test.dir}" archetype="@{archetype}" version="@{version}" />
+ <maven dir="${test.dir}/test" command="clean package exec:exec"/>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="maven">
+ <attribute name="dir"/>
+ <attribute name="name" default=""/>
+ <attribute name="archetype" default=""/>
+ <attribute name="version" default=""/>
+ <attribute name="command" default="-e archetype:create -DarchetypeGroupId=org.springframework.batch -DarchetypeArtifactId=@{archetype} -DarchetypeVersion=@{version} -DgroupId=com.foo -DartifactId=test"/>
+
+ <sequential>
+ <exec dir="@{dir}" executable="mvn.bat" os="Windows XP" failonerror="true">
+ <arg line="@{command}"/>
+ </exec>
+ <exec dir="@{dir}" executable="mvn" os="Mac OS X" failonerror="true">
+ <arg line="@{command}"/>
+ </exec>
+ <exec dir="@{dir}" executable="mvn" os="Linux" failonerror="true">
+ <arg line="@{command}"/>
+ </exec>
+ </sequential>
+ </macrodef>
+
+</project>
View
27 archetypes/pom.xml
@@ -0,0 +1,27 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>spring-batch-archetypes</artifactId>
+ <packaging>pom</packaging>
+ <name>Samples-Archetypes-Parent</name>
+
+ <parent>
+ <groupId>org.springframework.batch</groupId>
+ <artifactId>spring-batch</artifactId>
+ <version>1.1.0.DEV-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <modules>
+ <module>simple-cli</module>
+ </modules>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>Codehaus</id>
+ <url>http://repository.codehaus.org/</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+</project>
View
10 archetypes/simple-cli/.classpath
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.devzuz.q.maven.jdt.core.mavenClasspathContainer"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
View
45 archetypes/simple-cli/.project
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>simple-cli-archetype</name>
+ <comment>This plugin is an archetype that creates a command line batch sample from
+ Spring Batch. Once installed you can create the archetype project
+ using&lt;br/&gt;
+&lt;pre&gt;
+$ mvn archetype:create -DgroupId=com.mycompany -DartifactId=batch \
+ -DarchetypeGroupId=org.springframework.batch \
+ -DarchetypeArtifactId=spring-batch-cli -DarchetypeVersion=1.0-m3-SNAPSHOT
+&lt;/pre&gt;&lt;br/&gt;
+ Then you should be able to &quot;cd batch; mvn package exec:exec&quot;, and see the
+ app run.</comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>archetypes-pom.xml</name>
+ <type>1</type>
+ <location>C:/Dave/Spring/spring-batch/trunk/archetypes/pom.xml</location>
+ </link>
+ </linkedResources>
+</projectDescription>
View
5 archetypes/simple-cli/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+#Thu Jan 03 08:57:40 GMT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.source=1.3
View
64 archetypes/simple-cli/.settings/org.springframework.ide.eclipse.core.prefs
@@ -0,0 +1,64 @@
+#Thu Jun 19 11:05:13 BST 2008
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true
+org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=false
+org.springframework.ide.eclipse.core.builders.enable.osgibundleupdater=true
+org.springframework.ide.eclipse.core.enable.project.preferences=false
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.bestpractices.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.applicationSymbolicNameRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.applicationVersionRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.bundleActivationPolicyRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.bundleActivatorRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.bundleManifestVersionRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.bundleNameRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.bundleSymbolicNameRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.bundleVersionRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.exportPackageRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.importRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.parsingProblemsRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.platform.ide.manifest.core.requireBundleRule-com.springsource.platform.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.RefElementRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.importPackageVersionRule-com.springsource.sts.bestpractices.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.legacyxmlusage.jndiobjectfactory-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
View
14 archetypes/simple-cli/.springBeans
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.1.0.v200806081427]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ <config>src/main/resources/example/simpleJob.xml</config>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
View
110 archetypes/simple-cli/pom.xml
@@ -0,0 +1,110 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>simple-cli-archetype</artifactId>
+ <packaging>jar</packaging>
+ <name>Spring Batch Simple Commandline-Archetype</name>
+
+ <parent>
+ <groupId>org.springframework.batch</groupId>
+ <artifactId>spring-batch-archetypes</artifactId>
+ <version>1.1.0.DEV-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+
+ <description>
+ <![CDATA[
+ This project is a minimal command line batch sample from
+ Spring Batch. Once installed you can use "mvn exec:exec" to
+ see the job run.
+ ]]>
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.batch</groupId>
+ <artifactId>spring-batch-samples</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-dbcp</groupId>
+ <artifactId>commons-dbcp</artifactId>
+ <version>1.2.1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>aspectj</groupId>
+ <artifactId>aspectjweaver</artifactId>
+ <version>1.5.3</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <!--forkMode>pertest</forkMode-->
+ <includes>
+ <include>**/*Tests.java</include>
+ </includes>
+ <excludes>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <executable>java</executable>
+ <arguments>
+ <argument>-classpath</argument>
+ <!-- automatically creates the classpath using all project dependencies,
+ also adding the project build directory -->
+ <classpath />
+ <argument>org.springframework.batch.core.launch.support.CommandLineJobRunner</argument>
+ <!-- job configuration file -->
+ <argument>example/simpleJob.xml</argument>
+ <!-- job name -->
+ <argument>job1</argument>
+ </arguments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
View
22 archetypes/simple-cli/src/main/java/example/ExampleItemReader.java
@@ -0,0 +1,22 @@
+package example;
+
+import org.springframework.batch.item.AbstractItemReader;
+import org.springframework.batch.item.ItemReader;
+
+/**
+ * {@link ItemReader} with hard-coded input data.
+ */
+public class ExampleItemReader extends AbstractItemReader {
+
+ private String[] input = {"Hello world!", null};
+
+ private int index = 0;
+
+ /**
+ * Reads next record from input
+ */
+ public Object read() throws Exception {
+ return input[index++];
+ }
+
+}
View
23 archetypes/simple-cli/src/main/java/example/ExampleItemWriter.java
@@ -0,0 +1,23 @@
+package example;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.batch.item.AbstractItemWriter;
+import org.springframework.batch.item.ItemWriter;
+
+
+/**
+ * Dummy {@link ItemWriter} which only logs data it receives.
+ */
+public class ExampleItemWriter extends AbstractItemWriter {
+
+ private static final Log log = LogFactory.getLog(ExampleItemWriterTests.class);
+
+ /**
+ * @see ItemWriter#write(Object)
+ */
+ public void write(Object data) throws Exception {
+ log.info(data);
+ }
+
+}
View
64 archetypes/simple-cli/src/main/resources/data-source-context.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
+
+ <!-- Initialise the database before every test case: -->
+ <import resource="data-source-context-init.xml" />
+ <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
+ <property name="driverClassName" value="${batch.jdbc.driver}" />
+ <property name="url" value="${batch.jdbc.url}" />
+ <property name="username" value="${batch.jdbc.user}" />
+ <property name="password" value="${batch.jdbc.password}" />
+ </bean>
+ <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true">
+ <property name="dataSource" ref="dataSource" />
+ </bean>
+ <!-- Set up or detect a System property called "environment" used to construct a properties file on the classpath. The default is "hsql". -->
+ <bean id="environment" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
+ <property name="targetClass" value="java.lang.System" />
+ <property name="targetMethod" value="setProperty" />
+ <property name="arguments">
+ <list>
+ <value>environment</value>
+ <bean class="java.lang.System" factory-method="getProperty">
+ <constructor-arg>
+ <value>environment</value>
+ </constructor-arg>
+ <!-- The default value of the environment property -->
+ <constructor-arg>
+ <value>hsql</value>
+ </constructor-arg>
+ </bean>
+ </list>
+ </property>
+ </bean>
+
+ <!-- Use this to set additional properties on beans at run time -->
+ <bean id="overrideProperties" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"
+ depends-on="environment">
+ <property name="location" value="classpath:batch-${environment}.properties" />
+ <!-- Allow system properties (-D) to override those from file -->
+ <property name="localOverride" value="true" />
+ <property name="properties">
+ <bean class="java.lang.System" factory-method="getProperties" />
+ </property>
+ <property name="ignoreInvalidKeys" value="true" />
+ <property name="order" value="2" />
+ </bean>
+ <bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
+ depends-on="environment">
+ <property name="location" value="classpath:batch-${environment}.properties" />
+ <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
+ <property name="ignoreUnresolvablePlaceholders" value="true" />
+ <property name="order" value="1" />
+ </bean>
+ <bean id="lobHandler" class="${batch.lob.handler.class}" />
+ <bean id="incrementerParent" class="${batch.database.incrementer.class}">
+ <property name="dataSource" ref="dataSource" />
+ <property name="incrementerName" value="ID" />
+ </bean>
+
+ <!--import resource="alt-data-source-context.xml" /-->
+</beans>
View
25 archetypes/simple-cli/src/main/resources/example/simpleJob.xml
@@ -0,0 +1,25 @@
+<?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-2.5.xsd">
+
+ <description>Example job to get you started. It provides a skeleton for a typical batch application.</description>
+
+ <import resource="classpath:/simple-job-launcher-context.xml"/>
+
+ <bean id="job1" parent="simpleJob">
+ <property name="steps">
+ <list>
+ <bean id="step1" parent="simpleStep">
+ <property name="itemReader">
+ <bean class="example.ExampleItemReader" />
+ </property>
+ <property name="itemWriter">
+ <bean class="example.ExampleItemWriter" />
+ </property>
+ </bean>
+ </list>
+ </property>
+ </bean>
+
+</beans>
View
13 archetypes/simple-cli/src/main/resources/log4j.properties
@@ -0,0 +1,13 @@
+log4j.rootCategory=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
+
+log4j.category.org.apache.activemq=ERROR
+log4j.category.org.springframework.batch=DEBUG
+log4j.category.org.springframework.transaction=INFO
+
+log4j.category.org.hibernate.SQL=DEBUG
+# for debugging datasource initialization
+# log4j.category.test.jdbc=DEBUG
View
152 ...ypes/simple-cli/src/test/java/test/jdbc/datasource/InitializingDataSourceFactoryBean.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2006-2007 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package test.jdbc.datasource;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.BeanInitializationException;
+import org.springframework.beans.factory.config.AbstractFactoryBean;
+import org.springframework.core.io.Resource;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
+import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
+
+public class InitializingDataSourceFactoryBean extends AbstractFactoryBean {
+
+ private Resource[] initScripts;
+
+ private Resource destroyScript;
+
+ DataSource dataSource;
+
+ private static boolean initialized = false;
+
+ /**
+ * @throws Throwable
+ * @see java.lang.Object#finalize()
+ */
+ protected void finalize() throws Throwable {
+ super.finalize();
+ initialized = false;
+ logger.debug("finalize called");
+ }
+
+ protected void destroyInstance(Object instance) throws Exception {
+ try {
+ doExecuteScript(destroyScript);
+ }
+ catch (Exception e) {
+ if (logger.isDebugEnabled()) {
+ logger.warn("Could not execute destroy script [" + destroyScript + "]", e);
+ }
+ else {
+ logger.warn("Could not execute destroy script [" + destroyScript + "]");
+ }
+ }
+ }
+
+ public void afterPropertiesSet() throws Exception {
+ Assert.notNull(dataSource);
+ super.afterPropertiesSet();
+ }
+
+ protected Object createInstance() throws Exception {
+ Assert.notNull(dataSource);
+ if (!initialized) {
+ try {
+ doExecuteScript(destroyScript);
+ }
+ catch (Exception e) {
+ logger.debug("Could not execute destroy script [" + destroyScript + "]", e);
+ }
+ if (initScripts != null) {
+ for (int i = 0; i < initScripts.length; i++) {
+ Resource initScript = initScripts[i];
+ doExecuteScript(initScript);
+ }
+ }
+ initialized = true;
+ }
+ return dataSource;
+ }
+
+ private void doExecuteScript(final Resource scriptResource) {
+ if (scriptResource == null || !scriptResource.exists())
+ return;
+ TransactionTemplate transactionTemplate = new TransactionTemplate(new DataSourceTransactionManager(dataSource));
+ transactionTemplate.execute(new TransactionCallback() {
+
+ public Object doInTransaction(TransactionStatus status) {
+ JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+ String[] scripts;
+ try {
+ scripts = StringUtils.delimitedListToStringArray(stripComments(IOUtils.readLines(scriptResource
+ .getInputStream())), ";");
+ }
+ catch (IOException e) {
+ throw new BeanInitializationException("Cannot load script from [" + scriptResource + "]", e);
+ }
+ for (int i = 0; i < scripts.length; i++) {
+ String script = scripts[i].trim();
+ if (StringUtils.hasText(script)) {
+ jdbcTemplate.execute(scripts[i]);
+ }
+ }
+ return null;
+ }
+
+ });
+
+ }
+
+ private String stripComments(List list) {
+ StringBuffer buffer = new StringBuffer();
+ for (Iterator iter = list.iterator(); iter.hasNext();) {
+ String line = (String) iter.next();
+ if (!line.startsWith("//") && !line.startsWith("--")) {
+ buffer.append(line + "\n");
+ }
+ }
+ return buffer.toString();
+ }
+
+ public Class getObjectType() {
+ return DataSource.class;
+ }
+
+ public void setInitScripts(Resource[] initScripts) {
+ this.initScripts = initScripts;
+ }
+
+ public void setDestroyScript(Resource destroyScript) {
+ this.destroyScript = destroyScript;
+ }
+
+ public void setDataSource(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+}

0 comments on commit 81da119

Please sign in to comment.