INT-1103: Added XML support for JdbcMessageStore

This commit is contained in:
David Syer
2010-05-06 08:19:29 +00:00
parent 02946f9543
commit 1365b3785c
8 changed files with 115 additions and 27 deletions

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

View File

@@ -49,6 +49,12 @@
<artifactId>derby</artifactId>
<version>10.5.3.0_1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>

View File

@@ -23,6 +23,7 @@ import javax.sql.DataSource;
import org.springframework.integration.core.Message;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.integration.message.MessageSource;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcOperations;
@@ -66,14 +67,14 @@ public class JdbcPollingChannelAdapter implements MessageSource<Object> {
}
/**
* Constructor taking {@link SimpleJdbcOperations} instance to use for query
* Constructor taking {@link JdbcOperations} instance to use for query
* execution and the select query to execute to retrieve new rows.
*
* @param jdbcOperations instance to use for query execution
* @param selectQuery query to execute
*/
public JdbcPollingChannelAdapter(SimpleJdbcOperations jdbcOperations, String selectQuery) {
this.jdbcOperations = jdbcOperations;
public JdbcPollingChannelAdapter(JdbcOperations jdbcOperations, String selectQuery) {
this.jdbcOperations = new SimpleJdbcTemplate(jdbcOperations);
this.selectQuery = selectQuery;
}

View File

@@ -22,12 +22,14 @@ import org.springframework.integration.config.xml.AbstractIntegrationNamespaceHa
* Namespace handler for the integration JDBC schema.
*
* @author Jonas Partner
* @author Dave Syer
* @since 2.0
*/
public class JdbcNamespaceHandler extends AbstractIntegrationNamespaceHandler {
public void init() {
registerBeanDefinitionParser("inbound-channel-adapter", new JdbcPollingChannelAdapterParser());
registerBeanDefinitionParser("message-store", new JdbcMessageStoreParser());
}
}

View File

@@ -16,8 +16,6 @@
package org.springframework.integration.jdbc.config;
import org.w3c.dom.Element;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
@@ -25,6 +23,7 @@ import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser;
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
import org.springframework.util.StringUtils;
import org.w3c.dom.Element;
/**
* Parser for {@link org.springframework.integration.jdbc.JdbcPollingChannelAdapter}.
@@ -48,7 +47,7 @@ public class JdbcPollingChannelAdapterParser extends AbstractPollingInboundChann
BeanDefinitionBuilder builder = BeanDefinitionBuilder
.genericBeanDefinition("org.springframework.integration.jdbc.JdbcPollingChannelAdapter");
String dataSourceRef = element.getAttribute("data-source");
String simpleJdbcOperationsRef = element.getAttribute("simple-jdbc-operations");
String simpleJdbcOperationsRef = element.getAttribute("jdbc-operations");
boolean refToDataSourceSet = StringUtils.hasText(dataSourceRef);
boolean refToSimpleJdbcOperaitonsSet = StringUtils.hasText(simpleJdbcOperationsRef);
if ((refToDataSourceSet && refToSimpleJdbcOperaitonsSet)

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration/jdbc"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:tool="http://www.springframework.org/schema/tool"
xmlns:integration="http://www.springframework.org/schema/integration"
targetNamespace="http://www.springframework.org/schema/integration/jdbc"
@@ -14,21 +13,102 @@
<xsd:annotation>
<xsd:documentation><![CDATA[
Defines the configuration elements for Spring Integration's JDBC adapters.
Defines the configuration elements for Spring Integration's JDBC components.
]]></xsd:documentation>
</xsd:annotation>
<xsd:element name="message-store">
<xsd:annotation>
<xsd:documentation>
Defines a MessageStore (and MessageGroupStore)
backed by a database.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
<xsd:attribute name="data-source" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Reference to a data source to use to access
the database. Either this or the simple-jdbc-operations must be
specified (but not both).
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:expected-type type="javax.sql.DataSource" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="jdbc-operations" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<xsd:documentation>
Reference to a JdbcOperations. Either
this or the data-source must be
specified (but not both).
</xsd:documentation>
<tool:annotation kind="ref">
<tool:expected-type
type="org.springframework.jdbc.core.simple.SimpleJdbcOperations" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="region" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Unique string to use as a partition for the
data in this store, so that
multiple instances can share the same
database tables. The default
is "DEFAULT".
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="table-prefix" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Prefix for the table names in the database
(e.g. so that a schema can be specified, or to avoid a clash
with
other tables). The default is "INT_".
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="lob-handler" type="xsd:string">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference to a lob handler (optional). Only override if using Oracle and
the database type is not being detected for some reason.
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:expected-type
type="org.springframework.jdbc.support.lob.LobHandler" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="inbound-channel-adapter">
<xsd:annotation>
<xsd:documentation>
Defines an inbound Channel Adapter for polling a database.
Defines an inbound Channel Adapter for polling a
database.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1" />
<xsd:element ref="integration:poller" minOccurs="0"
maxOccurs="1" />
</xsd:sequence>
<xsd:attribute name="simple-jdbc-operations" type="xsd:string">
<xsd:attribute name="jdbc-operations" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
@@ -52,14 +132,14 @@
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:expected-type
type="org.springframework.jdbc.core.RowMapper" />
<tool:expected-type type="org.springframework.jdbc.core.RowMapper" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="update" type="xsd:string" />
<xsd:attribute name="update-per-row" type="xsd:boolean" default="false" />
<xsd:attribute name="update-per-row" type="xsd:boolean"
default="false" />
<xsd:attribute name="channel" type="xsd:string" use="required">
<xsd:annotation>
<xsd:appinfo>

View File

@@ -12,7 +12,7 @@
<si:queue />
</si:channel>
<jdbc:embedded-database type="DERBY" id="dataSource">
<jdbc:embedded-database type="HSQL" id="dataSource">
<jdbc:script location="org/springframework/integration/jdbc/config/inboundSchema.sql" />
</jdbc:embedded-database>

View File

@@ -11,7 +11,7 @@
http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsd">
<inbound-channel-adapter query="select * from item where status=2" channel="target"
data-source="dataSource" update="update item set status =10 where id in (:idList)" />
data-source="dataSource" update="update item set status=10 where id in (:idList)" />
<beans:import resource="jdbcInboundChannelAdapterCommonConfig.xml" />