@@ -43,7 +43,8 @@ class JdbcStore implements MessageStore {
4343 private final String defaultSessionIdPropertyValue ;
4444 private final boolean persistMessages ;
4545
46- private String SQL_UPDATE_SEQNUMS ;
46+ private String SQL_UPDATE_INCOMING_SEQNUM ;
47+ private String SQL_UPDATE_OUTGOING_SEQNUM ;
4748 private String SQL_INSERT_SESSION ;
4849 private String SQL_GET_SEQNUMS ;
4950 private String SQL_UPDATE_MESSAGE ;
@@ -54,19 +55,9 @@ class JdbcStore implements MessageStore {
5455
5556 public JdbcStore (SessionSettings settings , SessionID sessionID , DataSource ds ) throws Exception {
5657 this .sessionID = sessionID ;
57- if (settings .isSetting (sessionID , SETTING_JDBC_STORE_SESSIONS_TABLE_NAME )) {
58- sessionTableName = settings
59- .getString (sessionID , SETTING_JDBC_STORE_SESSIONS_TABLE_NAME );
60- } else {
61- sessionTableName = DEFAULT_SESSION_TABLE_NAME ;
62- }
6358
64- if (settings .isSetting (sessionID , SETTING_JDBC_STORE_MESSAGES_TABLE_NAME )) {
65- messageTableName = settings
66- .getString (sessionID , SETTING_JDBC_STORE_MESSAGES_TABLE_NAME );
67- } else {
68- messageTableName = DEFAULT_MESSAGE_TABLE_NAME ;
69- }
59+ sessionTableName = getSessionTableName (settings , sessionID );
60+ messageTableName = getMessageTableName (settings , sessionID );
7061
7162 if (settings .isSetting (sessionID , SETTING_JDBC_SESSION_ID_DEFAULT_PROPERTY_VALUE )) {
7263 defaultSessionIdPropertyValue = settings .getString (sessionID ,
@@ -90,34 +81,72 @@ public JdbcStore(SessionSettings settings, SessionID sessionID, DataSource ds) t
9081 loadCache ();
9182 }
9283
93- private void setSqlStrings () {
94- String idWhereClause = JdbcUtil .getIDWhereClause (extendedSessionIdSupported );
95- String idColumns = JdbcUtil .getIDColumns (extendedSessionIdSupported );
96- String idPlaceholders = JdbcUtil .getIDPlaceholders (extendedSessionIdSupported );
84+ public static String getSessionTableName (SessionSettings settings , SessionID sessionID ) throws ConfigError {
85+ if (settings .isSetting (sessionID , SETTING_JDBC_STORE_SESSIONS_TABLE_NAME )) {
86+ return settings .getString (sessionID , SETTING_JDBC_STORE_SESSIONS_TABLE_NAME );
87+ } else {
88+ return DEFAULT_SESSION_TABLE_NAME ;
89+ }
90+ }
9791
98- SQL_UPDATE_SEQNUMS = "UPDATE " + sessionTableName + " SET incoming_seqnum=?, "
99- + "outgoing_seqnum=? WHERE " + idWhereClause ;
92+ public static String getMessageTableName (SessionSettings settings , SessionID sessionID ) throws ConfigError {
93+ if (settings .isSetting (sessionID , SETTING_JDBC_STORE_MESSAGES_TABLE_NAME )) {
94+ return settings .getString (sessionID , SETTING_JDBC_STORE_MESSAGES_TABLE_NAME );
95+ } else {
96+ return DEFAULT_MESSAGE_TABLE_NAME ;
97+ }
98+ }
10099
101- SQL_INSERT_SESSION = "INSERT INTO " + sessionTableName + " (" + idColumns
102- + ", creation_time, incoming_seqnum, outgoing_seqnum) VALUES ( " + idPlaceholders
103- + ",?,?,?)" ;
100+ public static String getUpdateIncomingSequenceNumberSql ( String sessionTableName , String idWhereClause ) {
101+ return "UPDATE " + sessionTableName + " SET incoming_seqnum=? WHERE " + idWhereClause ;
102+ }
104103
105- SQL_GET_SEQNUMS = "SELECT creation_time, incoming_seqnum, outgoing_seqnum FROM "
106- + sessionTableName + " WHERE " + idWhereClause ;
104+ public static String getUpdateOutgoingSequenceNumberSql (String sessionTableName , String idWhereClause ) {
105+ return "UPDATE " + sessionTableName + " SET outgoing_seqnum=? WHERE " + idWhereClause ;
106+ }
107+
108+ public static String getInsertSessionSql (String sessionTableName , String idColumns , String idPlaceholders ) {
109+ return "INSERT INTO " + sessionTableName + " (" + idColumns + ", creation_time,incoming_seqnum, outgoing_seqnum) VALUES (" + idPlaceholders + ",?,?,?)" ;
110+ }
111+
112+ public static String getSequenceNumsSql (String sessionTableName , String idWhereClause ) {
113+ return "SELECT creation_time, incoming_seqnum, outgoing_seqnum FROM " + sessionTableName + " WHERE " + idWhereClause ;
114+ }
115+
116+ public static String getUpdateMessageSql (String messageTableName , String idWhereClause ) {
117+ return "UPDATE " + messageTableName + " SET message=? " + "WHERE " + idWhereClause + " and msgseqnum=?" ;
118+ }
119+
120+ public static String getInsertMessageSql (String messageTableName , String idColumns , String idPlaceholders ) {
121+ return "INSERT INTO " + messageTableName + " (" + idColumns + ", msgseqnum,message) VALUES (" + idPlaceholders + ",?,?)" ;
122+ }
107123
108- SQL_UPDATE_MESSAGE = "UPDATE " + messageTableName + " SET message=? " + "WHERE "
109- + idWhereClause + " and msgseqnum=?" ;
124+ public static String getMessagesSql (String messageTableName , String idWhereClause ) {
125+ return "SELECT message FROM " + messageTableName + " WHERE " + idWhereClause + " and msgseqnum>=? and msgseqnum<=? " + "ORDER BY msgseqnum" ;
126+ }
110127
111- SQL_INSERT_MESSAGE = "INSERT INTO " + messageTableName + " (" + idColumns
112- + ", msgseqnum,message) VALUES (" + idPlaceholders + ",?,?)" ;
128+ public static String getUpdateSessionSql (String sessionTableName , String idWhereClause ) {
129+ return "UPDATE " + sessionTableName + " SET creation_time=?, " + "incoming_seqnum=?, outgoing_seqnum=? " + "WHERE " + idWhereClause ;
130+ }
113131
114- SQL_GET_MESSAGES = "SELECT message FROM " + messageTableName + " WHERE " + idWhereClause
115- + " and msgseqnum>=? and msgseqnum<=? " + "ORDER BY msgseqnum" ;
132+ public static String getDeleteMessagesSql (String messageTableName , String idWhereClause ) {
133+ return "DELETE FROM " + messageTableName + " WHERE " + idWhereClause ;
134+ }
116135
117- SQL_UPDATE_SESSION = "UPDATE " + sessionTableName + " SET creation_time=?, "
118- + "incoming_seqnum=?, outgoing_seqnum=? " + "WHERE " + idWhereClause ;
136+ private void setSqlStrings () {
137+ String idWhereClause = JdbcUtil .getIDWhereClause (extendedSessionIdSupported );
138+ String idColumns = JdbcUtil .getIDColumns (extendedSessionIdSupported );
139+ String idPlaceholders = JdbcUtil .getIDPlaceholders (extendedSessionIdSupported );
119140
120- SQL_DELETE_MESSAGES = "DELETE FROM " + messageTableName + " WHERE " + idWhereClause ;
141+ SQL_UPDATE_INCOMING_SEQNUM = getUpdateIncomingSequenceNumberSql (sessionTableName , idWhereClause );
142+ SQL_UPDATE_OUTGOING_SEQNUM = getUpdateOutgoingSequenceNumberSql (sessionTableName , idWhereClause );
143+ SQL_INSERT_SESSION = getInsertSessionSql (sessionTableName , idColumns , idPlaceholders );
144+ SQL_GET_SEQNUMS = getSequenceNumsSql (sessionTableName , idWhereClause );
145+ SQL_UPDATE_MESSAGE = getUpdateMessageSql (messageTableName , idWhereClause );
146+ SQL_INSERT_MESSAGE = getInsertMessageSql (messageTableName , idColumns , idPlaceholders );
147+ SQL_GET_MESSAGES = getMessagesSql (messageTableName , idWhereClause );
148+ SQL_UPDATE_SESSION = getUpdateSessionSql (sessionTableName , idWhereClause );
149+ SQL_DELETE_MESSAGES = getDeleteMessagesSql (messageTableName , idWhereClause );
121150 }
122151
123152 private void loadCache () throws SQLException , IOException {
@@ -238,7 +267,6 @@ public void get(int startSequence, int endSequence, Collection<String> messages)
238267 public boolean set (int sequence , String message ) throws IOException {
239268 Connection connection = null ;
240269 PreparedStatement insert = null ;
241- ResultSet rs = null ;
242270 try {
243271 connection = dataSource .getConnection ();
244272 insert = connection .prepareStatement (SQL_INSERT_MESSAGE );
@@ -263,7 +291,6 @@ public boolean set(int sequence, String message) throws IOException {
263291 }
264292 }
265293 } finally {
266- JdbcUtil .close (sessionID , rs );
267294 JdbcUtil .close (sessionID , insert );
268295 JdbcUtil .close (sessionID , connection );
269296 }
@@ -272,23 +299,22 @@ public boolean set(int sequence, String message) throws IOException {
272299
273300 public void setNextSenderMsgSeqNum (int next ) throws IOException {
274301 cache .setNextSenderMsgSeqNum (next );
275- storeSequenceNumbers ( );
302+ storeSequenceNumber ( SQL_UPDATE_OUTGOING_SEQNUM , next );
276303 }
277304
278305 public void setNextTargetMsgSeqNum (int next ) throws IOException {
279306 cache .setNextTargetMsgSeqNum (next );
280- storeSequenceNumbers ( );
307+ storeSequenceNumber ( SQL_UPDATE_INCOMING_SEQNUM , next );
281308 }
282309
283- private void storeSequenceNumbers ( ) throws IOException {
310+ private void storeSequenceNumber ( String sequenceUpdateSql , int sequence ) throws IOException {
284311 Connection connection = null ;
285312 PreparedStatement update = null ;
286313 try {
287314 connection = dataSource .getConnection ();
288- update = connection .prepareStatement (SQL_UPDATE_SEQNUMS );
289- update .setInt (1 , cache .getNextTargetMsgSeqNum ());
290- update .setInt (2 , cache .getNextSenderMsgSeqNum ());
291- setSessionIdParameters (update , 3 );
315+ update = connection .prepareStatement (sequenceUpdateSql );
316+ update .setInt (1 , sequence );
317+ setSessionIdParameters (update , 2 );
292318 update .execute ();
293319 } catch (SQLException e ) {
294320 throw new IOException (e .getMessage (), e );
0 commit comments