1 package org.apache.jcs.auxiliary.lateral.socket.tcp;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
23 import org.apache.jcs.auxiliary.lateral.LateralCacheAttributes;
24 import org.apache.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
25
26 /**
27 * This interface defines functions that are particular to the TCP Lateral Cache plugin. It extends
28 * the generic LateralCacheAttributes interface which in turn extends the AuxiliaryCache interface.
29 */
30 public class TCPLateralCacheAttributes
31 extends LateralCacheAttributes
32 implements ITCPLateralCacheAttributes
33 {
34 /** Don't change. */
35 private static final long serialVersionUID = 1077889204513905220L;
36
37 /** default */
38 private static final String DEFAULT_UDP_DISCOVERY_ADDRESS = "228.5.6.7";
39
40 /** default */
41 private static final int DEFAULT_UDP_DISCOVERY_PORT = 6789;
42
43 /** default */
44 private static final boolean DEFAULT_UDP_DISCOVERY_ENABLED = true;
45
46 /** default */
47 private static final boolean DEFAULT_ALLOW_GET = true;
48
49 /** default */
50 private static final boolean DEFAULT_ALLOW_PUT = true;
51
52 /** default */
53 private static final boolean DEFAULT_ISSUE_REMOVE_FOR_PUT = false;
54
55 /** default */
56 private static final boolean DEFAULT_FILTER_REMOVE_BY_HASH_CODE = true;
57
58 /** default - Only block for 1 second before timing out on a read.*/
59 private static final int DEFAULT_SOCKET_TIME_OUT = 1000;
60
61 /** default - Only block for 2 seconds before timing out on startup.*/
62 private static final int DEFAULT_OPEN_TIMEOUT = 2000;
63
64 /** TCP -------------------------------------------- */
65 private String tcpServers = "";
66
67 /** used to identify the service that this manager will be operating on */
68 private String tcpServer = "";
69
70 /** The pot */
71 private int tcpListenerPort = 0;
72
73 /** udp discovery for tcp server */
74 private String udpDiscoveryAddr = DEFAULT_UDP_DISCOVERY_ADDRESS;
75
76 /** discovery port */
77 private int udpDiscoveryPort = DEFAULT_UDP_DISCOVERY_PORT;
78
79 /** discovery switch */
80 private boolean udpDiscoveryEnabled = DEFAULT_UDP_DISCOVERY_ENABLED;
81
82 /** can we put */
83 private boolean allowPut = DEFAULT_ALLOW_GET;
84
85 /** can we go laterally for a get */
86 private boolean allowGet = DEFAULT_ALLOW_PUT;
87
88 /** call remove when there is a put */
89 private boolean issueRemoveOnPut = DEFAULT_ISSUE_REMOVE_FOR_PUT;
90
91 /** don't remove it the hashcode is the same */
92 private boolean filterRemoveByHashCode = DEFAULT_FILTER_REMOVE_BY_HASH_CODE;
93
94 /** Only block for socketTimeOut seconds before timing out on a read. */
95 private int socketTimeOut = DEFAULT_SOCKET_TIME_OUT;
96
97 /** Only block for openTimeOut seconds before timing out on startup. */
98 private int openTimeOut = DEFAULT_OPEN_TIMEOUT;
99
100 /**
101 * Sets the tcpServer attribute of the ILateralCacheAttributes object
102 * <p>
103 * @param val The new tcpServer value
104 */
105 public void setTcpServer( String val )
106 {
107 this.tcpServer = val;
108 }
109
110 /**
111 * Gets the tcpServer attribute of the ILateralCacheAttributes object
112 * <p>
113 * @return The tcpServer value
114 */
115 public String getTcpServer()
116 {
117 return this.tcpServer;
118 }
119
120 /**
121 * Sets the tcpServers attribute of the ILateralCacheAttributes object
122 * <p>
123 * @param val The new tcpServers value
124 */
125 public void setTcpServers( String val )
126 {
127 this.tcpServers = val;
128 }
129
130 /**
131 * Gets the tcpServers attribute of the ILateralCacheAttributes object
132 * <p>
133 * @return The tcpServers value
134 */
135 public String getTcpServers()
136 {
137 return this.tcpServers;
138 }
139
140 /**
141 * Sets the tcpListenerPort attribute of the ILateralCacheAttributes object
142 * <p>
143 * @param val The new tcpListenerPort value
144 */
145 public void setTcpListenerPort( int val )
146 {
147 this.tcpListenerPort = val;
148 }
149
150 /**
151 * Gets the tcpListenerPort attribute of the ILateralCacheAttributes object
152 * <p>
153 * @return The tcpListenerPort value
154 */
155 public int getTcpListenerPort()
156 {
157 return this.tcpListenerPort;
158 }
159
160 /**
161 * Can setup UDP Discovery. This only works for TCp laterals right now. It allows TCP laterals
162 * to find each other by broadcasting to a multicast port.
163 * <p>
164 * @param udpDiscoveryEnabled The udpDiscoveryEnabled to set.
165 */
166 public void setUdpDiscoveryEnabled( boolean udpDiscoveryEnabled )
167 {
168 this.udpDiscoveryEnabled = udpDiscoveryEnabled;
169 }
170
171 /**
172 * Whether or not TCP laterals can try to find each other by multicast communication.
173 * <p>
174 * @return Returns the udpDiscoveryEnabled.
175 */
176 public boolean isUdpDiscoveryEnabled()
177 {
178 return this.udpDiscoveryEnabled;
179 }
180
181 /**
182 * The port to use if UDPDiscovery is enabled.
183 * <p>
184 * @return Returns the udpDiscoveryPort.
185 */
186 public int getUdpDiscoveryPort()
187 {
188 return this.udpDiscoveryPort;
189 }
190
191 /**
192 * Sets the port to use if UDPDiscovery is enabled.
193 * <p>
194 * @param udpDiscoveryPort The udpDiscoveryPort to set.
195 */
196 public void setUdpDiscoveryPort( int udpDiscoveryPort )
197 {
198 this.udpDiscoveryPort = udpDiscoveryPort;
199 }
200
201 /**
202 * The address to broadcast to if UDPDiscovery is enabled.
203 * <p>
204 * @return Returns the udpDiscoveryAddr.
205 */
206 public String getUdpDiscoveryAddr()
207 {
208 return this.udpDiscoveryAddr;
209 }
210
211 /**
212 * Sets the address to broadcast to if UDPDiscovery is enabled.
213 * <p>
214 * @param udpDiscoveryAddr The udpDiscoveryAddr to set.
215 */
216 public void setUdpDiscoveryAddr( String udpDiscoveryAddr )
217 {
218 this.udpDiscoveryAddr = udpDiscoveryAddr;
219 }
220
221 /**
222 * Is the lateral allowed to try and get from other laterals.
223 * <p>
224 * This replaces the old putOnlyMode
225 * <p>
226 * @param allowGet
227 */
228 public void setAllowGet( boolean allowGet )
229 {
230 this.allowGet = allowGet;
231 }
232
233 /**
234 * Is the lateral allowed to try and get from other laterals.
235 * <p>
236 * @return true if the lateral will try to get
237 */
238 public boolean isAllowGet()
239 {
240 return this.allowGet;
241 }
242
243 /**
244 * Is the lateral allowed to put objects to other laterals.
245 * <p>
246 * @param allowPut
247 */
248 public void setAllowPut( boolean allowPut )
249 {
250 this.allowPut = allowPut;
251 }
252
253 /**
254 * Is the lateral allowed to put objects to other laterals.
255 * <p>
256 * @return true if puts are allowed
257 */
258 public boolean isAllowPut()
259 {
260 return this.allowPut;
261 }
262
263 /**
264 * Should the client send a remove command rather than a put when update is called. This is a
265 * client option, not a receiver option. This allows you to prevent the lateral from serializing
266 * objects.
267 * <p>
268 * @param issueRemoveOnPut
269 */
270 public void setIssueRemoveOnPut( boolean issueRemoveOnPut )
271 {
272 this.issueRemoveOnPut = issueRemoveOnPut;
273 }
274
275 /**
276 * Should the client send a remove command rather than a put when update is called. This is a
277 * client option, not a receiver option. This allows you to prevent the lateral from serializing
278 * objects.
279 * <p>
280 * @return true if updates will result in a remove command being sent.
281 */
282 public boolean isIssueRemoveOnPut()
283 {
284 return this.issueRemoveOnPut;
285 }
286
287 /**
288 * @return AuxiliaryCacheAttributes
289 */
290 @Override
291 public AuxiliaryCacheAttributes copy()
292 {
293 try
294 {
295 return (AuxiliaryCacheAttributes) this.clone();
296 }
297 catch ( Exception e )
298 {
299 //noop
300 }
301 return this;
302 }
303
304 /**
305 * Should the receiver try to match hashcodes. If true, the receiver will see if the client
306 * supplied a hshcode. If it did, then it will try to get the item locally. If the item exists,
307 * then it will compare the hashcode. if they are the same, it will not remove. This isn't
308 * perfect since different objects can have the same hashcode, but it is unlikely of objects of
309 * the same type.
310 * <p>
311 * @return boolean
312 */
313 public boolean isFilterRemoveByHashCode()
314 {
315 return this.filterRemoveByHashCode;
316 }
317
318 /**
319 * Should the receiver try to match hashcodes. If true, the receiver will see if the client
320 * supplied a hshcode. If it did, then it will try to get the item locally. If the item exists,
321 * then it will compare the hashcode. if they are the same, it will not remove. This isn't
322 * perfect since different objects can have the same hashcode, but it is unlikely of objects of
323 * the same type.
324 * <p>
325 * @param filter
326 */
327 public void setFilterRemoveByHashCode( boolean filter )
328 {
329 this.filterRemoveByHashCode = filter;
330 }
331
332 /**
333 * @param socketTimeOut the socketTimeOut to set
334 */
335 public void setSocketTimeOut( int socketTimeOut )
336 {
337 this.socketTimeOut = socketTimeOut;
338 }
339
340 /**
341 * @return the socketTimeOut
342 */
343 public int getSocketTimeOut()
344 {
345 return socketTimeOut;
346 }
347
348 /**
349 * @param openTimeOut the openTimeOut to set
350 */
351 public void setOpenTimeOut( int openTimeOut )
352 {
353 this.openTimeOut = openTimeOut;
354 }
355
356 /**
357 * @return the openTimeOut
358 */
359 public int getOpenTimeOut()
360 {
361 return openTimeOut;
362 }
363
364 /**
365 * Used to key the instance TODO create another method for this and use toString for debugging
366 * only.
367 * <p>
368 * @return String
369 */
370 @Override
371 public String toString()
372 {
373 return this.getTcpServer() + ":" + this.getTcpListenerPort();
374 }
375 }