55 */
66package sync .db .mysql ;
77
8+ import java .sql .*;
9+
810/**
911 *
1012 * @author Arvind Sasikumar
@@ -15,25 +17,45 @@ public class DBSyncAgent {
1517 private final String serverDatabaseName ;
1618 private final String serverDatabaseUsername ;
1719 private final String serverDatabasePassword ;
20+ private final String serverDatabaseConnectionOptions ;
21+ private final int serverDatabasePort ;
1822
1923 private final String clientDatabaseAddress ;
2024 private final String clientDatabaseName ;
2125 private final String clientDatabaseUsername ;
2226 private final String clientDatabasePassword ;
27+ private final String clientDatabaseConnectionOptions ;
28+ private final int clientDatabasePort ;
29+
30+ private final DBMap dbMap ;
2331
2432 private final int syncInterval ;
2533
26- public class Builder {
34+ private Connection serverConnection ;
35+ private Connection clientConnection ;
36+
37+ private Statement serverStatement ;
38+ private Statement clientStatement ;
39+
40+ private DBSynchronizer dbSynchronizer ;
41+
42+ public static class Builder {
2743
2844 private String serverDatabaseAddress ;
2945 private String serverDatabaseName ;
3046 private String serverDatabaseUsername ;
3147 private String serverDatabasePassword ;
48+ private String serverDatabaseConnectionOptions ;
49+ private int serverDatabasePort ;
3250
3351 private String clientDatabaseAddress ;
3452 private String clientDatabaseName ;
3553 private String clientDatabaseUsername ;
3654 private String clientDatabasePassword ;
55+ private String clientDatabaseConnectionOptions ;
56+ private int clientDatabasePort ;
57+
58+ private DBMap dbMap ;
3759
3860 private int syncInterval ;
3961
@@ -61,6 +83,18 @@ public Builder setServerDatabasePassword(String serverDatabasePassword){
6183 return this ;
6284 }
6385
86+ public Builder setServerDatabaseConnectionOptions (String serverDatabaseConnectionOptions ){
87+
88+ this .serverDatabaseConnectionOptions = serverDatabaseConnectionOptions ;
89+ return this ;
90+ }
91+
92+ public Builder setServerDatabasePort (int serverDatabasePort ){
93+
94+ this .serverDatabasePort = serverDatabasePort ;
95+ return this ;
96+ }
97+
6498 public Builder setClientDatabaseAddress (String clientDatabaseAddress ){
6599
66100 this .clientDatabaseAddress = clientDatabaseAddress ;
@@ -85,6 +119,24 @@ public Builder setClientDatabasePassword(String clientDatabasePassword){
85119 return this ;
86120 }
87121
122+ public Builder setClientDatabaseConnectionOptions (String clientDatabaseConnectionOptions ){
123+
124+ this .clientDatabaseConnectionOptions = clientDatabaseConnectionOptions ;
125+ return this ;
126+ }
127+
128+ public Builder setClientDatabasePort (int clientDatabasePort ){
129+
130+ this .clientDatabasePort = clientDatabasePort ;
131+ return this ;
132+ }
133+
134+ public Builder setDBMap (DBMap dbMap ){
135+
136+ this .dbMap = dbMap ;
137+ return this ;
138+ }
139+
88140 public Builder setSyncInterval (int syncInterval ){
89141
90142 this .syncInterval = syncInterval ;
@@ -103,20 +155,62 @@ private DBSyncAgent(Builder builder){
103155 serverDatabaseName = builder .serverDatabaseName ;
104156 serverDatabaseUsername = builder .serverDatabaseUsername ;
105157 serverDatabasePassword = builder .serverDatabasePassword ;
158+ serverDatabaseConnectionOptions = builder .serverDatabaseConnectionOptions ;
159+ serverDatabasePort = builder .serverDatabasePort ;
106160
107161 clientDatabaseAddress = builder .clientDatabaseAddress ;
108162 clientDatabaseName = builder .clientDatabaseName ;
109163 clientDatabaseUsername = builder .clientDatabaseUsername ;
110164 clientDatabasePassword = builder .clientDatabasePassword ;
165+ clientDatabaseConnectionOptions = builder .clientDatabaseConnectionOptions ;
166+ clientDatabasePort = builder .clientDatabasePort ;
167+
168+ dbMap = builder .dbMap ;
111169
112170 syncInterval = builder .syncInterval ;
113171 }
114172
173+ public void connect (){
174+
175+ try {
176+
177+ Class .forName ("com.mysql.jdbc.Driver" );
178+
179+ String connectionString = "jdbc:mysql://" + serverDatabaseAddress + ":" +
180+ serverDatabasePort + "/" + serverDatabaseName +
181+ serverDatabaseConnectionOptions ;
182+ serverConnection = DriverManager .getConnection (connectionString ,serverDatabaseUsername ,serverDatabasePassword );
183+ serverStatement = serverConnection .createStatement ();
184+
185+ connectionString = "jdbc:mysql://" + clientDatabaseAddress + ":" +
186+ clientDatabasePort + "/" + clientDatabaseName +
187+ clientDatabaseConnectionOptions ;
188+ clientConnection = DriverManager .getConnection (connectionString ,clientDatabaseUsername ,clientDatabasePassword );
189+ clientStatement = clientConnection .createStatement ();
190+ }
191+
192+ catch (Exception e ){
193+
194+ e .printStackTrace ();
195+ }
196+ }
197+
115198 public void sync (){
116199
200+ dbSynchronizer = new DBSynchronizer (serverStatement , clientStatement , dbMap );
201+ Thread dbSynchronizerThread = new Thread (dbSynchronizer );
202+ dbSynchronizerThread .start ();
117203 }
118204
119205 public void liveSync (){
206+
207+ dbSynchronizer = new DBSynchronizer (serverStatement , clientStatement , dbMap , syncInterval );
208+ Thread dbSynchronizerThread = new Thread (dbSynchronizer );
209+ dbSynchronizerThread .start ();
210+ }
120211
212+ public void stopSync (){
213+
214+ dbSynchronizer .stopSync ();
121215 }
122216}
0 commit comments