[BATCH-503] Fix TX definition in samples. Also add multi-environment support in samples (mysql and derby as examples)

This commit is contained in:
dsyer
2008-03-25 06:57:55 +00:00
parent 5c840a6960
commit 3b72c04bef
20 changed files with 205 additions and 168 deletions

View File

@@ -0,0 +1,18 @@
# Placeholders batch.*
# for Derby:
batch.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
batch.jdbc.url=jdbc:derby:derby.home/test;create=true
batch.jdbc.user=sa
batch.jdbc.password=
batch.schema=
batch.jndi.name=
batch.naming.factory.initial=
batch.naming.provider.url=
batch.schema.script=schema-derby.sql
batch.business.schema.script=business-schema-derby.sql
batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.DerbyMaxValueIncrementer
batch.lob.handler.class=org.springframework.jdbc.support.lob.DefaultLobHandler
# Bean Properties for override
# when not using sequences:
incrementerParent.columnName=ID

View File

@@ -11,17 +11,11 @@ batch.schema=
batch.jndi.name=
batch.naming.factory.initial=
batch.naming.provider.url=
batch.database.vendor=HSQLDB
batch.schema.script=schema-hsqldb.sql
batch.business.schema.script=business-schema-hsqldb.sql
batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.HsqlMaxValueIncrementer
batch.lob.handler.class=org.springframework.jdbc.support.lob.DefaultLobHandler
# Other platforms:
# org.springframework.jdbc.support.incrementer.DB2SequenceMaxValueIncrementer
# org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer
# batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.DerbyMaxValueIncrementer
# Bean Properties for override
# for HSQLDB:
# when not using sequences:
incrementerParent.columnName=ID

View File

@@ -0,0 +1,18 @@
# Placeholders batch.*
# for MySQL:
batch.jdbc.driver=com.mysql.jdbc.Driver
batch.jdbc.url=jdbc:mysql://localhost/test
batch.jdbc.user=root
batch.jdbc.password=root
batch.schema=
batch.jndi.name=
batch.naming.factory.initial=
batch.naming.provider.url=
batch.schema.script=schema-mysql.sql
batch.business.schema.script=business-schema-mysql.sql
batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer
batch.lob.handler.class=org.springframework.jdbc.support.lob.DefaultLobHandler
# Bean Properties for override
# when not using sequences:
incrementerParent.columnName=ID

View File

@@ -1,19 +1,19 @@
-- Autogenerated: do not edit this file
DROP SEQUENCE BATCH_STAGING_SEQ ;
DROP SEQUENCE TRADE_SEQ ;
DROP SEQUENCE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
DROP SEQUENCE BATCH_STAGING_SEQ ;
DROP SEQUENCE TRADE_SEQ ;
DROP SEQUENCE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
-- Autogenerated: do not edit this file
CREATE SEQUENCE CUSTOMER_SEQ;
CREATE SEQUENCE BATCH_STAGING_SEQ;
CREATE SEQUENCE TRADE_SEQ;
CREATE SEQUENCE CUSTOMER_SEQ;
CREATE SEQUENCE BATCH_STAGING_SEQ;
CREATE SEQUENCE TRADE_SEQ;
CREATE TABLE BATCH_STAGING (
ID BIGINT PRIMARY KEY ,
@@ -27,7 +27,7 @@ CREATE TABLE TRADE (
VERSION BIGINT,
ISIN VARCHAR(45) NOT NULL,
QUANTITY BIGINT,
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -35,7 +35,7 @@ CREATE TABLE CUSTOMER (
ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -1,19 +1,19 @@
-- Autogenerated: do not edit this file
DROP TABLE BATCH_STAGING_SEQ ;
DROP TABLE TRADE_SEQ ;
DROP TABLE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
DROP TABLE BATCH_STAGING_SEQ ;
DROP TABLE TRADE_SEQ ;
DROP TABLE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
-- Autogenerated: do not edit this file
CREATE TABLE CUSTOMER_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
CREATE TABLE BATCH_STAGING_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
CREATE TABLE TRADE_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
CREATE TABLE CUSTOMER_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
CREATE TABLE BATCH_STAGING_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
CREATE TABLE TRADE_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1));
CREATE TABLE BATCH_STAGING (
ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
@@ -27,7 +27,7 @@ CREATE TABLE TRADE (
VERSION BIGINT,
ISIN VARCHAR(45) NOT NULL,
QUANTITY BIGINT,
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -35,7 +35,7 @@ CREATE TABLE CUSTOMER (
ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
VERSION BIGINT,
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -1,25 +1,25 @@
-- Autogenerated: do not edit this file
DROP TABLE BATCH_STAGING_SEQ IF EXISTS;
DROP TABLE TRADE_SEQ IF EXISTS;
DROP TABLE CUSTOMER_SEQ IF EXISTS;
DROP TABLE BATCH_STAGING IF EXISTS;
DROP TABLE TRADE IF EXISTS;
DROP TABLE CUSTOMER IF EXISTS;
DROP TABLE PLAYERS IF EXISTS;
DROP TABLE GAMES IF EXISTS;
DROP TABLE PLAYER_SUMMARY IF EXISTS;
DROP TABLE BATCH_STAGING_SEQ IF EXISTS;
DROP TABLE TRADE_SEQ IF EXISTS;
DROP TABLE CUSTOMER_SEQ IF EXISTS;
DROP TABLE BATCH_STAGING IF EXISTS;
DROP TABLE TRADE IF EXISTS;
DROP TABLE CUSTOMER IF EXISTS;
DROP TABLE PLAYERS IF EXISTS;
DROP TABLE GAMES IF EXISTS;
DROP TABLE PLAYER_SUMMARY IF EXISTS;
-- Autogenerated: do not edit this file
CREATE TABLE CUSTOMER_SEQ (
ID BIGINT IDENTITY
);
CREATE TABLE BATCH_STAGING_SEQ (
ID BIGINT IDENTITY
);
CREATE TABLE TRADE_SEQ (
ID BIGINT IDENTITY
);
CREATE TABLE CUSTOMER_SEQ (
ID BIGINT IDENTITY
);
CREATE TABLE BATCH_STAGING_SEQ (
ID BIGINT IDENTITY
);
CREATE TABLE TRADE_SEQ (
ID BIGINT IDENTITY
);
CREATE TABLE BATCH_STAGING (
ID BIGINT IDENTITY PRIMARY KEY ,
@@ -33,7 +33,7 @@ CREATE TABLE TRADE (
VERSION BIGINT,
ISIN VARCHAR(45) NOT NULL,
QUANTITY BIGINT,
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -41,7 +41,7 @@ CREATE TABLE CUSTOMER (
ID BIGINT IDENTITY PRIMARY KEY ,
VERSION BIGINT,
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -8,20 +8,20 @@ DROP TABLE IF EXISTS CUSTOMER ;
DROP TABLE IF EXISTS PLAYERS ;
DROP TABLE IF EXISTS GAMES ;
DROP TABLE IF EXISTS PLAYER_SUMMARY ;
-- Autogenerated: do not edit this file
CREATE TABLE CUSTOMER_SEQ (ID BIGINT NOT NULL) type=MYISAM;
INSERT INTO CUSTOMER_SEQ values(0);
CREATE TABLE BATCH_STAGING_SEQ (ID BIGINT NOT NULL) type=MYISAM;
INSERT INTO BATCH_STAGING_SEQ values(0);
CREATE TABLE TRADE_SEQ (ID BIGINT NOT NULL) type=MYISAM;
INSERT INTO TRADE_SEQ values(0);
CREATE TABLE CUSTOMER_SEQ (ID BIGINT NOT NULL) type=MYISAM;
INSERT INTO CUSTOMER_SEQ values(0);
CREATE TABLE BATCH_STAGING_SEQ (ID BIGINT NOT NULL) type=MYISAM;
INSERT INTO BATCH_STAGING_SEQ values(0);
CREATE TABLE TRADE_SEQ (ID BIGINT NOT NULL) type=MYISAM;
INSERT INTO TRADE_SEQ values(0);
CREATE TABLE BATCH_STAGING (
ID BIGINT unsigned PRIMARY KEY ,
JOB_ID BIGINT NOT NULL,
VALUE ${BLOB} NOT NULL,
VALUE BLOB NOT NULL,
PROCESSED CHAR(1) NOT NULL
);
@@ -30,7 +30,7 @@ CREATE TABLE TRADE (
VERSION BIGINT,
ISIN VARCHAR(45) NOT NULL,
QUANTITY BIGINT,
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -38,7 +38,7 @@ CREATE TABLE CUSTOMER (
ID BIGINT unsigned PRIMARY KEY ,
VERSION BIGINT,
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -1,19 +1,19 @@
-- Autogenerated: do not edit this file
DROP SEQUENCE BATCH_STAGING_SEQ ;
DROP SEQUENCE TRADE_SEQ ;
DROP SEQUENCE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
DROP SEQUENCE BATCH_STAGING_SEQ ;
DROP SEQUENCE TRADE_SEQ ;
DROP SEQUENCE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
-- Autogenerated: do not edit this file
CREATE SEQUENCE CUSTOMER_SEQ;
CREATE SEQUENCE BATCH_STAGING_SEQ;
CREATE SEQUENCE TRADE_SEQ;
CREATE SEQUENCE CUSTOMER_SEQ;
CREATE SEQUENCE BATCH_STAGING_SEQ;
CREATE SEQUENCE TRADE_SEQ;
CREATE TABLE BATCH_STAGING (
ID NUMBER(38) PRIMARY KEY ,
@@ -27,7 +27,7 @@ CREATE TABLE TRADE (
VERSION NUMBER(38),
ISIN VARCHAR(45) NOT NULL,
QUANTITY NUMBER(38),
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -35,7 +35,7 @@ CREATE TABLE CUSTOMER (
ID NUMBER(38) PRIMARY KEY ,
VERSION NUMBER(38),
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -1,19 +1,19 @@
-- Autogenerated: do not edit this file
DROP SEQUENCE BATCH_STAGING_SEQ ;
DROP SEQUENCE TRADE_SEQ ;
DROP SEQUENCE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
DROP SEQUENCE BATCH_STAGING_SEQ ;
DROP SEQUENCE TRADE_SEQ ;
DROP SEQUENCE CUSTOMER_SEQ ;
DROP TABLE BATCH_STAGING ;
DROP TABLE TRADE ;
DROP TABLE CUSTOMER ;
DROP TABLE PLAYERS ;
DROP TABLE GAMES ;
DROP TABLE PLAYER_SUMMARY ;
-- Autogenerated: do not edit this file
CREATE SEQUENCE CUSTOMER_SEQ;
CREATE SEQUENCE BATCH_STAGING_SEQ;
CREATE SEQUENCE TRADE_SEQ;
CREATE SEQUENCE CUSTOMER_SEQ;
CREATE SEQUENCE BATCH_STAGING_SEQ;
CREATE SEQUENCE TRADE_SEQ;
CREATE TABLE BATCH_STAGING (
ID BIGINT PRIMARY KEY ,
@@ -27,7 +27,7 @@ CREATE TABLE TRADE (
VERSION BIGINT,
ISIN VARCHAR(45) NOT NULL,
QUANTITY BIGINT,
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -35,7 +35,7 @@ CREATE TABLE CUSTOMER (
ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -1,23 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<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">
<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="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingLocations" value="classpath*:/*.hbm.xml" />
<property name="hibernateProperties">
@@ -29,44 +24,53 @@
</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
lazy-init="true">
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" lazy-init="true">
<property name="sessionFactory" ref="sessionFactory" />
</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="batchProperties"
class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="location" value="classpath:batch.properties" />
<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" />
<bean class="java.lang.System" factory-method="getProperties" />
</property>
<property name="ignoreInvalidKeys" value="true" />
<property name="order" value="2" />
</bean>
<bean id="overrideProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:batch.properties" />
<property name="systemPropertiesModeName"
value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<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}">
<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 File

@@ -21,19 +21,19 @@
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<aop:config>
<aop:advisor pointcut="execution(* org.springframework.batch.execution..*Repository+.*(..))"
<aop:advisor pointcut="execution(* org.springframework.batch.core..*Repository+.*(..))"
advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*Create*" propagation="REQUIRES_NEW" isolation="SERIALIZABLE" />
<tx:method name="create*" propagation="REQUIRES_NEW" isolation="SERIALIZABLE" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
p:databaseType="hsql" p:dataSource-ref="dataSource" />
p:databaseType="${environment}" p:dataSource-ref="dataSource" />
<bean id="mapJobInstanceDao" lazy-init="true"
class="org.springframework.batch.core.repository.dao.MapJobInstanceDao" />

View File

@@ -16,7 +16,7 @@ CREATE TABLE TRADE (
VERSION ${BIGINT},
ISIN VARCHAR(45) NOT NULL,
QUANTITY ${BIGINT},
PRICE FLOAT,
PRICE DOUBLE,
CUSTOMER VARCHAR(45)
);
@@ -24,7 +24,7 @@ CREATE TABLE CUSTOMER (
ID ${BIGINT} $!{IDENTITY} PRIMARY KEY $!{GENERATED},
VERSION ${BIGINT},
NAME VARCHAR(45),
CREDIT FLOAT
CREDIT DOUBLE
);
INSERT INTO customer (id, version, name, credit) VALUES (1, 0, 'customer1', 100000);

View File

@@ -76,6 +76,9 @@ public class JdbcJobRepositoryTests extends AbstractTransactionalDataSourceSprin
jobConfiguration.setName("foo");
int before = getJdbcTemplate().queryForInt("SELECT COUNT(*) FROM BATCH_JOB_INSTANCE");
JobExecution execution = repository.createJobExecution(jobConfiguration, new JobParameters());
setComplete();
endTransaction();
startNewTransaction();
int after = getJdbcTemplate().queryForInt("SELECT COUNT(*) FROM BATCH_JOB_INSTANCE");
assertEquals(before + 1, after);
assertNotNull(execution.getId());