Example: Spring Configuration
Here is the complete Spring XML for migration of the Footwear Orders sample MAPPER data report:
FootWearOrders_12D3954.xml
<?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:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- ===== Define ETL configuration items not derived from Hibernate configuration ===== -->
<bean id="__propertyPlaceholder__"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:etl_config.properties</value>
</list>
</property>
</bean>
<bean id="etlConfig"
class="com.arsi.mj.maprpt.entity.etlgen.config.HibernateEtlConfig"
p:etlUserId="${etl.userId}"
p:jdbcClasspath="${etl.jdbcClasspath}"
p:nullString="${etl.nullString}">
</bean>
<!-- ***** FOOTWEAR_ORDER_ADDRESSEE ***** -->
<!-- ===== First, define columns that make up FOOTWEAR_ORDER_ADDRESSEE table ===== -->
<bean id="addrInlineHandler.coldefAddressee"
class="com.arsi.mj.config.atoms.ColumnDef">
<!-- entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="addressee"/>
<constructor-arg index="1" value="addressee"/>
<constructor-arg index="2" value="50"/>
<constructor-arg index="3" value="false"/>
<constructor-arg index="4">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="addrInlineHandler.coldefStreet"
class="com.arsi.mj.config.atoms.ColumnDef">
<!-- entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="street"/>
<constructor-arg index="1" value="street"/>
<constructor-arg index="2" value="80"/>
<constructor-arg index="3" value="false"/>
<constructor-arg index="4">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="addrInlineHandler.coldefCityState"
class="com.arsi.mj.config.atoms.ColumnDef">
<!-- entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="cityState"/>
<constructor-arg index="1" value="city_state_province"/>
<constructor-arg index="2" value="60"/>
<constructor-arg index="3" value="false"/>
<constructor-arg index="4">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="addrInlineHandler.coldefPostalCode"
class="com.arsi.mj.config.atoms.ColumnDef">
<!-- entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="postalCode"/>
<constructor-arg index="1" value="postal_code"/>
<constructor-arg index="2" value="25"/>
<constructor-arg index="3" value="false"/>
<constructor-arg index="4">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="addrInlineHandler.coldefEmail"
class="com.arsi.mj.config.atoms.ColumnDef">
<!-- entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="email"/>
<constructor-arg index="1" value="email"/>
<constructor-arg index="2" value="60"/>
<constructor-arg index="3" value="true"/>
<constructor-arg index="4">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="addrInlineHandler.coldefPhone"
class="com.arsi.mj.config.atoms.ColumnDef">
<!-- entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="phone"/>
<constructor-arg index="1" value="phone"/>
<constructor-arg index="2" value="25"/>
<constructor-arg index="3" value="true"/>
<constructor-arg index="4">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<!--
=========================================================================
Setup the inline handler for FOOTWEAR_ORDER_ADDRESSEE that parses and
extract fields from text of trailing lines, referencing columns above.
Asterisk lines that encompass the addressee appears as follows:
* Dave Bennet 123 Main St
* Burr, MN 55038-1234
* dave@home.com 4567-9876-1234-6543
=========================================================================
-->
<bean id="addrInlineHandler"
class="com.arsi.mj.maprpt.parser.tuple.inline.RegexInlineDataHandler"
p:className="com.arsi.mj.testapp.hibgen.model.FootwearOrderAddressee"
p:baseClassSuffix="Base"
p:tableName="FOOTWEAR_ORDER_ADDRESSEE"
p:column1-ref="addrInlineHandler.coldefAddressee"
p:column2-ref="addrInlineHandler.coldefStreet"
p:column3-ref="addrInlineHandler.coldefCityState"
p:column4-ref="addrInlineHandler.coldefPostalCode"
p:column5-ref="addrInlineHandler.coldefEmail"
p:column6-ref="addrInlineHandler.coldefPhone"
p:matchFullInput="false"
p:multiline="true"
p:unixLines="true"
p:textStripRegex="^\*">
<property name="fieldParseRegex1">
<!-- column name, field selector regex -->
<list>
<value>addressee</value>
<value>^[^\t]*\t([^\t]*)</value>
</list>
</property>
<property name="fieldParseRegex2">
<!-- column name, field selector regex -->
<list>
<value>street</value>
<value>\t([^\t]*)$</value>
</list>
</property>
<property name="fieldParseRegex3">
<!-- column name, field selector regex -->
<list>
<value>city_state_province</value>
<value>^[^\t]*\t([^\t]*)</value>
</list>
</property>
<property name="fieldParseRegex4">
<!-- column name, field selector regex -->
<list>
<value>postal_code</value>
<value>\t([^\t]*)$</value>
</list>
</property>
<property name="fieldParseRegex5">
<!-- column name, field selector regex -->
<list>
<value>email</value>
<value>^[^\t]*\t([^\t]*)</value>
</list>
</property>
<property name="fieldParseRegex6">
<!-- column name, field selector regex -->
<list>
<value>phone</value>
<value>\t([^\t]*)$</value>
</list>
</property>
</bean>
<!-- this last step validates regex inline data handler after setup -->
<bean id="addrInlineHandler.validateSetup"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="addrInlineHandler"
p:targetMethod="validate">
</bean>
<!-- ***** FOOTWEAR_ORDER_LINEITEM ***** -->
<!-- ===== First, define columns that make up FOOTWEAR_ORDER_LINEITEM table ===== -->
<bean id="orderEntityHandler.coldefOrderNumber"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="OrdNo" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.INTEGER"/>
</constructor-arg>
<constructor-arg index="2" value="orderNumber"/>
<constructor-arg index="3" value="order_no"/>
<constructor-arg index="4" value="5"/>
<constructor-arg index="5" value="false"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.INTEGER"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefQuantity"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="Qty" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.INTEGER"/>
</constructor-arg>
<constructor-arg index="2" value="quantity"/>
<constructor-arg index="3" value="QTY"/>
<constructor-arg index="4" value="3"/>
<constructor-arg index="5" value="false"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.INTEGER"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefShoeType"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="Type" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.STRING"/>
</constructor-arg>
<constructor-arg index="2" value="shoeType"/>
<constructor-arg index="3" value="SHOE_TYPE"/>
<constructor-arg index="4" value="5"/>
<constructor-arg index="5" value="false"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefShoeGender"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="Gender" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.STRING"/>
</constructor-arg>
<constructor-arg index="2" value="shoeGender"/>
<constructor-arg index="3" value="SHOE_GENDER"/>
<constructor-arg index="4" value="1"/>
<constructor-arg index="5" value="false"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.CHARACTER"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefShoeSize"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="Siz" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.STRING"/>
</constructor-arg>
<constructor-arg index="2" value="shoeSize"/>
<constructor-arg index="3" value="SHOE_SIZE"/>
<constructor-arg index="4" value="3"/>
<constructor-arg index="5" value="false"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefShoeColor"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="Color" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.STRING"/>
</constructor-arg>
<constructor-arg index="2" value="shoeColor"/>
<constructor-arg index="3" value="SHOE_COLOR"/>
<constructor-arg index="4" value="40"/>
<constructor-arg index="5" value="true"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.STRING"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefPrice"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, scale, NULLABLE, data type -->
<constructor-arg index="0" value="Price" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.FLOAT"/>
</constructor-arg>
<constructor-arg index="2" value="price"/>
<constructor-arg index="3" value="PRICE"/>
<constructor-arg index="4" value="8"/>
<constructor-arg index="5" value="2"/>
<constructor-arg index="6" value="false"/>
<constructor-arg index="7">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.BIG_DECIMAL"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefOrderDateTime"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, NULLABLE, data type -->
<constructor-arg index="0" value="Date, Time" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.STRING"/>
</constructor-arg>
<constructor-arg index="2" value="dateAndTimeOrdered"/>
<constructor-arg index="3" value="ORDER_DATE_TIME"/>
<constructor-arg index="4" value="8"/>
<constructor-arg index="5" value="false"/>
<constructor-arg index="6">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.TIMESTAMP"/>
</constructor-arg>
</bean>
<bean id="orderEntityHandler.coldefCost"
class="com.arsi.mj.maprpt.entity.handler.AnnotatedColumnDef">
<!-- Mapper name, Mapper type, entity attrname, column name, length, scale, NULLABLE, data type -->
<constructor-arg index="0" value="Cost" />
<constructor-arg index="1">
<util:constant static-field="com.arsi.mj.datatype.MaprptDataType.FLOAT"/>
</constructor-arg>
<constructor-arg index="2" value="cost"/>
<constructor-arg index="3" value="COST"/>
<constructor-arg index="4" value="8"/>
<constructor-arg index="5" value="2"/>
<constructor-arg index="6" value="true"/>
<constructor-arg index="7">
<util:constant static-field="org.hibernate.type.StandardBasicTypes.BIG_DECIMAL"/>
</constructor-arg>
</bean>
<!-- ===== Setup enumeration mappings for ShoeType and ShoeGender ===== -->
<bean id="orderEntityHandler.enumShoeType"
class="com.arsi.mj.maprpt.enums.StringKeyEnumMapping"
p:enumClassName="com.arsi.mj.testapp.hibgen.enums.ShoeType">
<property name="enumsFromProperties">
<value>
Basketball=BASKETBALL -> BSKBL
Running=RUNNING -> RUN
Golf=GOLF -> GOLF
Tennis=TENNIS -> TENIS
</value>
</property>
</bean>
<bean id="orderEntityHandler.enumShoeGender"
class="com.arsi.mj.maprpt.enums.StringKeyEnumMapping"
p:enumClassName="com.arsi.mj.testapp.hibgen.enums.ShoeGender">
<property name="enumsFromProperties">
<value>
Womens=WOMENS -> F
Mens=MENS -> M
</value>
</property>
</bean>
<bean id="orderEntityHandler.enumLineType"
class="com.arsi.mj.maprpt.enums.LineTypeEnumMapping"
p:enumClassName="com.arsi.mj.testapp.hibgen.enums.LineType">
<property name="enumsFromProperties">
<value>
\\t=TABLINE -> T
</value>
</property>
</bean>
<!--
=========================================================================
Setup the data entity handler for FOOTWEAR_ORDER_LINEITEM, referencing
columns and enumerations defined above.
=========================================================================
-->
<bean id="orderEntityHandler"
class="com.arsi.mj.maprpt.entity.handler.DataEntityHandler"
p:tableName="FOOTWEAR_ORDER_LINEITEM"
p:entityPackageName="com.arsi.mj.testapp.hibgen.model"
p:entityClassName="FootwearOrderLineitem"
p:entityBaseClassSuffix="Base"
p:entityManagerClassSuffix="Mgr"
p:surrogateKeyColumnName="fw_order_li_id"
p:updateTimestampColumnName="DATE_OF_LAST_UPDATE"
p:createUserColumnName="CREATED_BY_USER"
p:column1-ref="orderEntityHandler.coldefOrderNumber"
p:column2-ref="orderEntityHandler.coldefQuantity"
p:column3-ref="orderEntityHandler.coldefShoeType"
p:enumForColumn3-ref="orderEntityHandler.enumShoeType"
p:column4-ref="orderEntityHandler.coldefShoeGender"
p:enumForColumn4-ref="orderEntityHandler.enumShoeGender"
p:column5-ref="orderEntityHandler.coldefShoeSize"
p:column6-ref="orderEntityHandler.coldefShoeColor"
p:column7-ref="orderEntityHandler.coldefPrice"
p:column8-ref="orderEntityHandler.coldefOrderDateTime"
p:column9-ref="orderEntityHandler.coldefCost">
</bean>
<!-- this last step validates the data entity handler after setup -->
<bean id="orderEntityHandler.validateSetup"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="orderEntityHandler"
p:targetMethod="validate">
</bean>
</beans>