1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.synchronoss.cpo.cassandra;
22
23 import com.datastax.driver.core.*;
24 import com.datastax.driver.core.policies.LoadBalancingPolicy;
25 import com.datastax.driver.core.policies.ReconnectionPolicy;
26 import com.datastax.driver.core.policies.RetryPolicy;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import org.synchronoss.cpo.AbstractDataSourceInfo;
30 import org.synchronoss.cpo.CpoException;
31
32 import java.util.Collection;
33
34
35
36
37
38
39
40
41 public class ClusterDataSourceInfo extends AbstractDataSourceInfo<ClusterDataSource>{
42 private static final Logger logger = LoggerFactory.getLogger(ClusterDataSourceInfo.class);
43 private String[] contactPoints;
44 private String keySpace;
45 private String clusterName;
46 private Integer port;
47 private LoadBalancingPolicy loadBalancingPolicy;
48 private ReconnectionPolicy reconnectionPolicy;
49 private RetryPolicy retryPolicy;
50 private boolean credentials;
51 private String userName;
52 private String password;
53
54 private ProtocolOptions.Compression compressionType;
55 private Boolean useMetrics;
56 private SSLOptions sslOptions;
57 private Collection<Host.StateListener> listeners;
58 private Boolean useJmxReporting;
59 private PoolingOptions poolingOptions;
60 private SocketOptions socketOptions;
61
62
63 public ClusterDataSourceInfo(String clusterName, String keySpace, String[] contactPoints) {
64 super(buildDataSourceName(clusterName, keySpace, contactPoints));
65 this.keySpace=keySpace;
66 this.clusterName=clusterName;
67 this.contactPoints=contactPoints;
68 }
69
70 public String getClusterName() {
71 return clusterName;
72 }
73
74 public void setClusterName(String clusterName) {
75 this.clusterName = clusterName;
76 }
77
78 public String getKeySpace() {
79 return keySpace;
80 }
81
82 public int getPort() {
83 return port;
84 }
85
86 public void setPort(int port) {
87 this.port = port;
88 }
89
90 public LoadBalancingPolicy getLoadBalancingPolicy() {
91 return loadBalancingPolicy;
92 }
93
94 public void setLoadBalancingPolicy(LoadBalancingPolicy loadBalancingPolicy) {
95 this.loadBalancingPolicy = loadBalancingPolicy;
96 }
97
98 public ReconnectionPolicy getReconnectionPolicy() {
99 return reconnectionPolicy;
100 }
101
102 public void setReconnectionPolicy(ReconnectionPolicy reconnectionPolicy) {
103 this.reconnectionPolicy = reconnectionPolicy;
104 }
105
106 public RetryPolicy getRetryPolicy() {
107 return retryPolicy;
108 }
109
110 public void setRetryPolicy(RetryPolicy retryPolicy) {
111 this.retryPolicy = retryPolicy;
112 }
113
114 public boolean hasCredentials() {
115 return credentials;
116 }
117
118 public void setHasCredentials(boolean credentials) {
119 this.credentials = credentials;
120 }
121
122 public String getUserName() {
123 return userName;
124 }
125
126 public void setUserName(String userName) {
127 this.userName = userName;
128 }
129
130 public String getPassword() {
131 return password;
132 }
133
134 public void setPassword(String password) {
135 this.password = password;
136 }
137
138
139
140
141
142
143
144
145
146 public ProtocolOptions.Compression getCompressionType() {
147 return compressionType;
148 }
149
150 public void setCompressionType(ProtocolOptions.Compression compressionType) {
151 this.compressionType = compressionType;
152 }
153
154 public Boolean getUseMetrics() {
155 return useMetrics;
156 }
157
158 public void setUseMetrics(Boolean useMetrics) {
159 this.useMetrics = useMetrics;
160 }
161
162 public SSLOptions getSslOptions() {
163 return sslOptions;
164 }
165
166 public void setSslOptions(SSLOptions sslOptions) {
167 this.sslOptions = sslOptions;
168 }
169
170 public Collection<Host.StateListener> getListeners() {
171 return listeners;
172 }
173
174 public void setListeners(Collection<Host.StateListener> listeners) {
175 this.listeners = listeners;
176 }
177
178 public Boolean getUseJmxReporting() {
179 return useJmxReporting;
180 }
181
182 public void setUseJmxReporting(Boolean useJmxReporting) {
183 this.useJmxReporting = useJmxReporting;
184 }
185
186 public PoolingOptions getPoolingOptions() {
187 return poolingOptions;
188 }
189
190 public void setPoolingOptions(PoolingOptions poolingOptions) {
191 this.poolingOptions = poolingOptions;
192 }
193
194 public SocketOptions getSocketOptions() {
195 return socketOptions;
196 }
197
198 public void setSocketOptions(SocketOptions socketOptions) {
199 this.socketOptions = socketOptions;
200 }
201
202
203
204
205
206
207
208
209
210 @Override
211 protected ClusterDataSource createDataSource() throws CpoException {
212 Cluster.Builder clusterBuilder = Cluster.builder();
213
214
215 for(String s : contactPoints)
216 clusterBuilder.addContactPoint(s);
217
218
219
220
221
222 if (port != null)
223 clusterBuilder.withPort(port);
224
225
226 if (loadBalancingPolicy != null)
227 clusterBuilder.withLoadBalancingPolicy(loadBalancingPolicy);
228
229
230 if (reconnectionPolicy != null)
231 clusterBuilder.withReconnectionPolicy(reconnectionPolicy);
232
233
234 if (retryPolicy != null)
235 clusterBuilder.withRetryPolicy(retryPolicy);
236
237
238 if (hasCredentials())
239 clusterBuilder.withCredentials(userName, password);
240
241
242
243
244
245
246 if (compressionType != null)
247 clusterBuilder.withCompression(compressionType);
248
249
250 if (useMetrics != null && !useMetrics)
251 clusterBuilder.withoutMetrics();
252
253
254 if (sslOptions != null)
255 clusterBuilder.withSSL(sslOptions);
256
257
258
259
260
261
262 if (useJmxReporting != null && !useJmxReporting)
263 clusterBuilder.withoutJMXReporting();
264
265
266
267
268
269
270
271
272
273
274
275
276
277 return new ClusterDataSource(clusterBuilder.build(), keySpace);
278 }
279
280 private static String buildDataSourceName(String clusterName, String keySpace, String[] contactPoints) {
281 StringBuilder sb = new StringBuilder();
282 sb.append(clusterName);
283 sb.append(keySpace);
284 for (String s : contactPoints)
285 sb.append(s);
286 logger.debug("DatasourceName="+sb.toString());
287 return sb.toString();
288 }
289
290 }