Initial commit for the JDBC project

This commit is contained in:
Amol Nayak
2011-11-19 00:51:41 +05:30
parent 0422b81415
commit f653433c7e
8 changed files with 358 additions and 0 deletions

62
basic/jdbc/README.txt Normal file
View File

@@ -0,0 +1,62 @@
The project contains sample JDBC adapters using Spring integration
JDBC Adapters are used to connectthe database systems from Spring integration application
###########################Setting up derby###########################
If you intend to use some other database, skip this section and goto outbound channel adapters section
1. Goto http://db.apache.org/derby/derby_downloads.html and download the latest version of derby DB.
When this sample was developed 10.8.2.2 was the latest version. If you however choose to use
a newer or older version, update the property value for property "derbyclient.driver.version" in pom.xml
to the right version you are using.
2. Extract the downloaded jar file
3. Go to folder bin in the extracted derby folder and execute startNetworkServer (.bat for windows)
This should start the Derby server. By default it starts listening on port 1527
4. The simple in built client "ij" can be used to create the required table in derby.
5. Execute ij (.bat for windows)
6. run the command "connect 'jdbc:derby://localhost:1527/TestDatabase;create=true';" for first time
subequently use "connect 'jdbc:derby://localhost:1527/TestDatabase';"
7. Execute the create table script from the file Person_Derby.sql
The above steps should setup derby for use.
You can use ij to execute the select commands to query the table data.
We have the following examples in this particular Project
###########################Outbound Channel Adapter######################################
This adapter is used to insert/update records in a table based on the values contained
in the message payload that is received over the channel to the adapter.
The following are necessary for configuring the adapter
1. The datasource or the JDBC template
2. The the update/insert query to be executed.
3. Optional SQL Parameter source factory
In our config file "jdbcOutboundAdapterConfig.xml", we have defined an outbound-channel-adapter
for the datasource of derby database. Some instructions given to setup derby database.
You are free to use any other databae, however you need to appropriately change the datasource
details defined in the config
The adapter does the following.
1. It creates a message with payload of type org.springframework.integration.samples.jdbc.Person
2. This message is sent over the channel outboundJdbcChannelOne.
3. Messages over this channel are delivered to the outbound-channel-adapter to execute the given insert.
4. The provided org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory
is used to get an instance of org.springframework.jdbc.core.namedparam.SqlParameterSource. That is
used to resolve the given named parameter to the value. In our case the SpEL is executed to yield
a value that will be inserted. See the config for more details.
For executing the program and see the results, execute the junit test case
org.springframework.integration.samples.jdbc.OutboundChannelAdapterTest
Query the database for table Person to see the result.

83
basic/jdbc/pom.xml Normal file
View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>org.springframework.integration.samples</groupId>
<artifactId>jdbc</artifactId>
<version>2.0.0</version>
<name>Spring Integration JDBC Adapter test packages</name>
<packaging>jar</packaging>
<properties>
<spring.integration.version>2.0.5.RELEASE</spring.integration.version>
<spring.test.version>3.0.6.RELEASE</spring.test.version>
<log4j.version>1.2.16</log4j.version>
<junit.version>4.7</junit.version>
<derbyclient.driver.version>10.8.2.2</derbyclient.driver.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>${derbyclient.driver.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-jdbc</artifactId>
<version>${spring.integration.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.test.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>${spring.integration.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- test-scoped dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>false</showDeprecation>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>repository.springframework.maven.release</id>
<name>Spring Framework Maven Release Repository</name>
<url>http://maven.springframework.org/release</url>
</repository>
<repository>
<id>repository.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>http://maven.springframework.org/milestone</url>
</repository>
<repository>
<id>repository.springframework.maven.snapshot</id>
<name>Spring Framework Maven Snapshot Repository</name>
<url>http://maven.springframework.org/snapshot</url>
</repository>
</repositories>
</project>

View File

@@ -0,0 +1,36 @@
/*
* Copyright 2002-2011 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 org.springframework.integration.samples.jdbc;
/**
* Represents the gender of the person
* @author Amol Nayak
*
*/
public enum Gender {
MALE("M"),FEMALE("F");
private String identifier;
private Gender(String identifier) {
this.identifier = identifier;
}
public String getIdentifier() {
return identifier;
}
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright 2002-2011 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 org.springframework.integration.samples.jdbc;
import java.util.Date;
/**
* A simple POJO representing a Person
* @author Amol Nayak
*
*/
public class Person {
private String name;
private Gender gender;
private Date dateOfBirth;
/**
* Gets the name of the person
* @return
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* Gets the gender of the person
* @return
*/
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
/**
* Gets the date of birth of the person
* @return
*/
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}

View File

@@ -0,0 +1,6 @@
create table Person (
id integer primary key not null generated always as identity (start with 1, increment by 1),
name varchar(100) not null,
gender varchar(1) not null,
dateOfBirth date
);

View File

@@ -0,0 +1,61 @@
/*
* Copyright 2002-2011 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 org.springframework.integration.samples.jdbc;
import java.util.Calendar;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* The test class for jdbc outbound channel adapter
* @author Amol Nayak
*
*/
@ContextConfiguration("classpath:jdbcOutboundAdapterConfig.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class OutboundChannelAdapterTest {
private Logger logger = Logger.getLogger(OutboundChannelAdapterTest.class);
@Autowired
@Qualifier("outboundJdbcChannelOne")
private MessageChannel channel;
@Test
public void insertPersonRecord() {
logger.info("Creating person Instance");
Person person = new Person();
Calendar dateOfBirth = Calendar.getInstance();
dateOfBirth.set(1980, 0, 1);
person.setDateOfBirth(dateOfBirth.getTime());
person.setName("Name Of The Person");
person.setGender(Gender.MALE);
Message<Person> message = MessageBuilder.withPayload(person).build();
channel.send(message);
logger.info("Sent person Instance");
}
}

View File

@@ -0,0 +1,38 @@
<?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:integration="http://www.springframework.org/schema/integration"
xmlns:jdbc="http://www.springframework.org/schema/integration/jdbc"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.0.xsd
http://www.springframework.org/schema/integration/jdbc http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc-2.0.xsd">
<integration:channel id="outboundJdbcChannelOne"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.apache.derby.client.ClientXAConnection"/>
<property name="url" value="jdbc:derby://localhost:1527/TestDatabase"/>
</bean>
<jdbc:outbound-channel-adapter data-source="dataSource"
channel="outboundJdbcChannelOne"
query="insert into Person (name,gender,dateOfBirth)
values
(:name,:gender,:dateOfBirth)"
sql-parameter-source-factory="spelSource"/>
<bean id="spelSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<entry key="name" value="payload.name.toUpperCase()"/>
<entry key="gender" value="payload.gender.identifier"/>
<entry key="dateOfBirth" value="payload.dateOfBirth"/>
</map>
</property>
</bean>
</beans>

View File

@@ -0,0 +1,8 @@
log4j.rootCategory=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
log4j.category.org.springframework=DEBUG