1 package org.jencks.samples.outbound;
2
3 import java.sql.Types;
4
5 import javax.sql.DataSource;
6
7 import org.springframework.jdbc.core.JdbcTemplate;
8 import org.springframework.transaction.PlatformTransactionManager;
9 import org.springframework.transaction.TransactionDefinition;
10 import org.springframework.transaction.TransactionStatus;
11 import org.springframework.transaction.support.DefaultTransactionDefinition;
12
13 public abstract class AbstractJdbcOutboundMessagingTest extends AbstractDependencyInjectionSpringContextTests {
14
15 public final static String TEST_FIELD_VALUE="test value";
16 public final static String INITIAL_FIELD_VALUE="initial value";
17 public final static int FIELD_ID=1;
18
19 public final static String CREATE_SCHEMA="create table TEST (" +
20 "TEST_ID bigint generated by default as identity(start with 1)," +
21 "TEST_VALUE varchar(255)," +
22 "primary key (TEST_ID))";
23 public final static String DROP_SCHEMA="drop table TEST";
24 public final static String POPULATE_SCHEMA="insert into TEST" +
25 " (TEST_ID,TEST_VALUE) values("+FIELD_ID+",'"+INITIAL_FIELD_VALUE+"')";
26
27 public final static String UPDATE_FIELD_REQUEST="update TEST" +
28 " set TEST_VALUE=? where TEST_ID=?";
29 public final static String SELECT_FIELD_REQUEST="select TEST_VALUE" +
30 " from TEST where TEST_ID=?";
31
32 private DataSource dataSource;
33 private PlatformTransactionManager transactionManager;
34
35 public PlatformTransactionManager getTransactionManager() {
36 return transactionManager;
37 }
38
39 public void setTransactionManager(PlatformTransactionManager transactionManager) {
40 this.transactionManager = transactionManager;
41 }
42
43 public DataSource getDataSource() {
44 return dataSource;
45 }
46
47 public void setDataSource(DataSource dataSource) {
48 this.dataSource = dataSource;
49 }
50
51 private void updateDatabase(String ddlRequest) {
52 JdbcTemplate template=new JdbcTemplate(getDataSource());
53 template.update(ddlRequest);
54 }
55
56 protected void onSetUp() throws Exception {
57 super.onSetUp();
58 updateDatabase(CREATE_SCHEMA);
59 updateDatabase(POPULATE_SCHEMA);
60 }
61
62 protected void onTearDown() throws Exception {
63 super.onTearDown();
64 updateDatabase(DROP_SCHEMA);
65 }
66
67 private void checkStoredMessage(String message) {
68 JdbcTemplate template=new JdbcTemplate(getDataSource());
69 String storedMessage=(String)template.queryForObject(SELECT_FIELD_REQUEST,
70 new Object[] {new Integer(FIELD_ID)},
71 new int[] {Types.INTEGER},String.class);
72 assertEquals(message,storedMessage);
73 }
74
75 public void testOutboundWithCommit() throws Exception {
76
77 DefaultTransactionDefinition definition=new DefaultTransactionDefinition();
78 definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
79 TransactionStatus status=null;
80 try {
81 status=transactionManager.getTransaction(definition);
82 JdbcTemplate template=new JdbcTemplate(getDataSource());
83 template.update(UPDATE_FIELD_REQUEST,
84 new Object[] {TEST_FIELD_VALUE,new Integer(FIELD_ID)},
85 new int[] {Types.VARCHAR,Types.INTEGER});
86 transactionManager.commit(status);
87 } catch(Exception ex) {
88 ex.printStackTrace();
89 transactionManager.rollback(status);
90 fail("Undesired exception.");
91 }
92
93
94 checkStoredMessage(TEST_FIELD_VALUE);
95 }
96
97 public void testOutboundWithRollback() throws Exception {
98
99 DefaultTransactionDefinition definition=new DefaultTransactionDefinition();
100 definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
101 TransactionStatus status=null;
102 try {
103 status=transactionManager.getTransaction(definition);
104 JdbcTemplate template=new JdbcTemplate(getDataSource());
105 template.update(UPDATE_FIELD_REQUEST,
106 new Object[] {TEST_FIELD_VALUE,new Integer(FIELD_ID)},
107 new int[] {Types.VARCHAR,Types.INTEGER});
108 transactionManager.rollback(status);
109 } catch(Exception ex) {
110 ex.printStackTrace();
111 transactionManager.rollback(status);
112 fail("Undesired exception.");
113 }
114
115
116 checkStoredMessage(INITIAL_FIELD_VALUE);
117 }
118
119 }