diff --git a/basic/jdbc/README.md b/basic/jdbc/README.md index e6c5bec1..6561f77c 100644 --- a/basic/jdbc/README.md +++ b/basic/jdbc/README.md @@ -20,6 +20,36 @@ Currently one example exists. On the command prompt you can enter the following * 'b' * 'foo' +#Sample "Person Outbound Gateway" + +We use the outbound gateway to insert records in a Person table based on the values contained +in the message payload that is received over the channel to the adapter. + +The following are used to configure the gateway +* The request and reply channels +* The data source for the database +* The the update/insert statement to be executed. +* Optional request SQL Parameter source factory +* The select query to be executed after the insert is done +* Optional reply SQL Parameter source factory +* RowMapper if you intend to map the ResultSet to your custom object + +The following sequence of events happen when we invoke the createPerson method on the gateway +* The parameter of type Person is sent as a payload of a message over the reply-channel +* The outbound gateway reads this message and extracts the payload +* It then executes the given insert statement, the values to be inserted are derived from the payload + request-sql-parameter-source-factory provided is used to generate a parameter source. +* Since we expect an identity column to be generated, keys-generated is set to true +* The result of the insert is then use to create a reply sql parameter source, + the factory reply-sql-parameter-source-factory generates the required parameter source +* The select query provided is executed +* The ResultMapper is used to convert this ResultSet to a Person object +* The Person object is then sent as a payload of the Message over the reply channel. +* The Person payload is extracted from the Message and returned to the calling application. + +For executing the program and see the results, execute the junit test case +org.springframework.integration.samples.jdbc.OutboundGatewayTest + # Resources For help please take a look at the Spring Integration documentation: diff --git a/basic/jdbc/README.txt b/basic/jdbc/README.txt deleted file mode 100644 index 436bd1e8..00000000 --- a/basic/jdbc/README.txt +++ /dev/null @@ -1,62 +0,0 @@ -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. - diff --git a/basic/jdbc/pom.xml b/basic/jdbc/pom.xml index bd571995..976b160b 100644 --- a/basic/jdbc/pom.xml +++ b/basic/jdbc/pom.xml @@ -15,8 +15,6 @@ 2.1.0.M3 1.6.1 4.7 - 3.0.6.RELEASE - 10.8.2.2 @@ -125,20 +123,7 @@ com.h2database h2 1.3.160 - - - - - org.apache.derby - derbyclient - ${derbyclient.driver.version} - + - - - org.springframework - spring-test - ${spring.test.version} - \ No newline at end of file diff --git a/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Gender.java b/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Gender.java index 6d8a751a..24a2f65a 100644 --- a/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Gender.java +++ b/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Gender.java @@ -15,6 +15,10 @@ */ package org.springframework.integration.samples.jdbc; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; + /** * Represents the gender of the person * @author Amol Nayak @@ -23,6 +27,7 @@ package org.springframework.integration.samples.jdbc; public enum Gender { MALE("M"),FEMALE("F"); + private static Map map; private String identifier; @@ -33,4 +38,15 @@ public enum Gender { public String getIdentifier() { return identifier; } + + public static Gender getGenderByIdentifier(String identifier) { + return map.get(identifier); + } + + static { + map = new HashMap(); + for(Gender gender:EnumSet.allOf(Gender.class)) { + map.put(gender.getIdentifier(), gender); + } + } } diff --git a/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Person.java b/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Person.java index 52bd2b97..b6781e36 100644 --- a/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Person.java +++ b/basic/jdbc/src/main/java/org/springframework/integration/samples/jdbc/Person.java @@ -24,11 +24,28 @@ import java.util.Date; */ public class Person { + private int personId; private String name; private Gender gender; private Date dateOfBirth; + + /** + * Sets the person id + * @return + */ + public int getPersonId() { + return personId; + } + /** + * Get the person Id + * @param personId + */ + public void setPersonId(int personId) { + this.personId = personId; + } + /** * Gets the name of the person * @return diff --git a/basic/jdbc/src/main/resources/META-INF/spring/integration/spring-integration-context.xml b/basic/jdbc/src/main/resources/META-INF/spring/integration/spring-integration-context.xml index bd04abaa..5c9e0f98 100644 --- a/basic/jdbc/src/main/resources/META-INF/spring/integration/spring-integration-context.xml +++ b/basic/jdbc/src/main/resources/META-INF/spring/integration/spring-integration-context.xml @@ -13,7 +13,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/basic/jdbc/src/main/resources/Person_Derby.sql b/basic/jdbc/src/main/resources/Person_Derby.sql deleted file mode 100644 index 2d0d6cb7..00000000 --- a/basic/jdbc/src/main/resources/Person_Derby.sql +++ /dev/null @@ -1,6 +0,0 @@ -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 -); \ No newline at end of file diff --git a/basic/jdbc/src/main/resources/setup-tables.sql b/basic/jdbc/src/main/resources/setup-tables.sql index a57cd2a0..dee1726a 100644 --- a/basic/jdbc/src/main/resources/setup-tables.sql +++ b/basic/jdbc/src/main/resources/setup-tables.sql @@ -1,5 +1,6 @@ create table IF NOT EXISTS USERS(USERNAME varchar(100),PASSWORD varchar(100), EMAIL varchar(100)); create table IF NOT EXISTS DUMMY(DUMMY_VALUE varchar(10)); +create table IF NOT EXISTS Person(id integer identity primary key , name varchar(100), gender varchar(1), dateOfBirth date); INSERT INTO USERS(USERNAME, PASSWORD, EMAIL) VALUES ('a', 'secret', 'spring-integration@awesome.com'); INSERT INTO USERS(USERNAME, PASSWORD, EMAIL) VALUES ('b', 's3cr3t', 'spring@rocks.com'); INSERT INTO USERS(USERNAME, PASSWORD, EMAIL) VALUES ('foo', 'bar', 'foo@bar.de'); \ No newline at end of file diff --git a/basic/jdbc/src/test/java/org/springframework/integration/samples/jdbc/OutboundChannelAdapterTest.java b/basic/jdbc/src/test/java/org/springframework/integration/samples/jdbc/OutboundChannelAdapterTest.java deleted file mode 100644 index eb9b8987..00000000 --- a/basic/jdbc/src/test/java/org/springframework/integration/samples/jdbc/OutboundChannelAdapterTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 message = MessageBuilder.withPayload(person).build(); - channel.send(message); - logger.info("Sent person Instance"); - - } - -} diff --git a/basic/jdbc/src/test/resources/jdbcOutboundAdapterConfig.xml b/basic/jdbc/src/test/resources/jdbcOutboundAdapterConfig.xml deleted file mode 100644 index d84826fa..00000000 --- a/basic/jdbc/src/test/resources/jdbcOutboundAdapterConfig.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/basic/jdbc/src/test/resources/log4j.properties b/basic/jdbc/src/test/resources/log4j.properties deleted file mode 100644 index 7aa7d540..00000000 --- a/basic/jdbc/src/test/resources/log4j.properties +++ /dev/null @@ -1,8 +0,0 @@ -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