View Javadoc
1   package org.apache.commons.jcs3.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.commons.jcs3.auxiliary.lateral.LateralCacheAttributes;
23  import org.apache.commons.jcs3.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
24  
25  /**
26   * This interface defines functions that are particular to the TCP Lateral Cache plugin. It extends
27   * the generic LateralCacheAttributes interface which in turn extends the AuxiliaryCache interface.
28   */
29  public class TCPLateralCacheAttributes
30      extends LateralCacheAttributes
31      implements ITCPLateralCacheAttributes
32  {
33      /** Don't change. */
34      private static final long serialVersionUID = 1077889204513905220L;
35  
36      /** default */
37      private static final String DEFAULT_UDP_DISCOVERY_ADDRESS = "228.5.6.7";
38  
39      /** default */
40      private static final int DEFAULT_UDP_DISCOVERY_PORT = 6789;
41  
42      /** default */
43      private static final boolean DEFAULT_UDP_DISCOVERY_ENABLED = true;
44  
45      /** default */
46      private static final boolean DEFAULT_ALLOW_GET = true;
47  
48      /** default */
49      private static final boolean DEFAULT_ALLOW_PUT = true;
50  
51      /** default */
52      private static final boolean DEFAULT_ISSUE_REMOVE_FOR_PUT = false;
53  
54      /** default */
55      private static final boolean DEFAULT_FILTER_REMOVE_BY_HASH_CODE = true;
56  
57      /** default - Only block for 1 second before timing out on a read.*/
58      private static final int DEFAULT_SOCKET_TIME_OUT = 1000;
59  
60      /** default - Only block for 2 seconds before timing out on startup.*/
61      private static final int DEFAULT_OPEN_TIMEOUT = 2000;
62  
63      /** TCP -------------------------------------------- */
64      private String tcpServers = "";
65  
66      /** used to identify the service that this manager will be operating on */
67      private String tcpServer = "";
68  
69      /** The port */
70      private int tcpListenerPort;
71  
72      /** The host */
73      private String tcpListenerHost = "";
74  
75      /** udp discovery for tcp server */
76      private String udpDiscoveryAddr = DEFAULT_UDP_DISCOVERY_ADDRESS;
77  
78      /** discovery port */
79      private int udpDiscoveryPort = DEFAULT_UDP_DISCOVERY_PORT;
80  
81      /** discovery switch */
82      private boolean udpDiscoveryEnabled = DEFAULT_UDP_DISCOVERY_ENABLED;
83  
84      /** udp datagram TTL */
85      private int udpTTL = 0;
86  
87      /** can we put */
88      private boolean allowPut = DEFAULT_ALLOW_GET;
89  
90      /** can we go laterally for a get */
91      private boolean allowGet = DEFAULT_ALLOW_PUT;
92  
93      /** call remove when there is a put */
94      private boolean issueRemoveOnPut = DEFAULT_ISSUE_REMOVE_FOR_PUT;
95  
96      /** don't remove it the hash code is the same */
97      private boolean filterRemoveByHashCode = DEFAULT_FILTER_REMOVE_BY_HASH_CODE;
98  
99      /** Only block for socketTimeOut seconds before timing out on a read.  */
100     private int socketTimeOut = DEFAULT_SOCKET_TIME_OUT;
101 
102     /** Only block for openTimeOut seconds before timing out on startup. */
103     private int openTimeOut = DEFAULT_OPEN_TIMEOUT;
104 
105     /**
106      * Sets the tcpServer attribute of the ILateralCacheAttributes object
107      * <p>
108      * @param val The new tcpServer value
109      */
110     @Override
111     public void setTcpServer( final String val )
112     {
113         this.tcpServer = val;
114     }
115 
116     /**
117      * Gets the tcpServer attribute of the ILateralCacheAttributes object
118      * <p>
119      * @return The tcpServer value
120      */
121     @Override
122     public String getTcpServer()
123     {
124         return this.tcpServer;
125     }
126 
127     /**
128      * Sets the tcpServers attribute of the ILateralCacheAttributes object
129      * <p>
130      * @param val The new tcpServers value
131      */
132     @Override
133     public void setTcpServers( final String val )
134     {
135         this.tcpServers = val;
136     }
137 
138     /**
139      * Gets the tcpServers attribute of the ILateralCacheAttributes object
140      * <p>
141      * @return The tcpServers value
142      */
143     @Override
144     public String getTcpServers()
145     {
146         return this.tcpServers;
147     }
148 
149     /**
150      * Sets the tcpListenerPort attribute of the ILateralCacheAttributes object
151      * <p>
152      * @param val The new tcpListenerPort value
153      */
154     @Override
155     public void setTcpListenerPort( final int val )
156     {
157         this.tcpListenerPort = val;
158     }
159 
160     /**
161      * Gets the tcpListenerPort attribute of the ILateralCacheAttributes object
162      * <p>
163      * @return The tcpListenerPort value
164      */
165     @Override
166     public int getTcpListenerPort()
167     {
168         return this.tcpListenerPort;
169     }
170 
171     /**
172      * Sets the tcpListenerHost attribute of the ILateralCacheAttributes object
173      * <p>
174      * @param val
175      *            The new tcpListenerHost value
176      */
177     @Override
178     public void setTcpListenerHost( final String val )
179     {
180         this.tcpListenerHost = val;
181     }
182 
183     /**
184      * Gets the tcpListenerHost attribute of the ILateralCacheAttributes object
185      * <p>
186      * @return The tcpListenerHost value
187      */
188     @Override
189     public String getTcpListenerHost()
190     {
191         return this.tcpListenerHost;
192     }
193 
194     /**
195      * Can setup UDP Discovery. This only works for TCp laterals right now. It allows TCP laterals
196      * to find each other by broadcasting to a multicast port.
197      * <p>
198      * @param udpDiscoveryEnabled The udpDiscoveryEnabled to set.
199      */
200     @Override
201     public void setUdpDiscoveryEnabled( final boolean udpDiscoveryEnabled )
202     {
203         this.udpDiscoveryEnabled = udpDiscoveryEnabled;
204     }
205 
206     /**
207      * Whether or not TCP laterals can try to find each other by multicast communication.
208      * <p>
209      * @return Returns the udpDiscoveryEnabled.
210      */
211     @Override
212     public boolean isUdpDiscoveryEnabled()
213     {
214         return this.udpDiscoveryEnabled;
215     }
216 
217     /**
218      * The port to use if UDPDiscovery is enabled.
219      * <p>
220      * @return Returns the udpDiscoveryPort.
221      */
222     @Override
223     public int getUdpDiscoveryPort()
224     {
225         return this.udpDiscoveryPort;
226     }
227 
228     /**
229      * Sets the port to use if UDPDiscovery is enabled.
230      * <p>
231      * @param udpDiscoveryPort The udpDiscoveryPort to set.
232      */
233     @Override
234     public void setUdpDiscoveryPort( final int udpDiscoveryPort )
235     {
236         this.udpDiscoveryPort = udpDiscoveryPort;
237     }
238 
239     /**
240      * The address to broadcast to if UDPDiscovery is enabled.
241      * <p>
242      * @return Returns the udpDiscoveryAddr.
243      */
244     @Override
245     public String getUdpDiscoveryAddr()
246     {
247         return this.udpDiscoveryAddr;
248     }
249 
250     /**
251      * Sets the address to broadcast to if UDPDiscovery is enabled.
252      * <p>
253      * @param udpDiscoveryAddr The udpDiscoveryAddr to set.
254      */
255     @Override
256     public void setUdpDiscoveryAddr( final String udpDiscoveryAddr )
257     {
258         this.udpDiscoveryAddr = udpDiscoveryAddr;
259     }
260 
261     /**
262      * The time-to-live for the UDP multicast packets
263      * <p>
264      * @return Returns the udpTTL.
265      * @since 3.1
266      */
267     @Override
268     public int getUdpTTL()
269     {
270         return udpTTL;
271     }
272 
273     /**
274      * Sets the time-to-live for the UDP multicast packet
275      * <p>
276      * @param udpTTL The udpTTL to set.
277      * @since 3.1
278      */
279     @Override
280     public void setUdpTTL( final int udpTTL )
281     {
282         this.udpTTL = udpTTL;
283     }
284 
285     /**
286      * Is the lateral allowed to try and get from other laterals.
287      * <p>
288      * This replaces the old putOnlyMode
289      * <p>
290      * @param allowGet
291      */
292     @Override
293     public void setAllowGet( final boolean allowGet )
294     {
295         this.allowGet = allowGet;
296     }
297 
298     /**
299      * Is the lateral allowed to try and get from other laterals.
300      * <p>
301      * @return true if the lateral will try to get
302      */
303     @Override
304     public boolean isAllowGet()
305     {
306         return this.allowGet;
307     }
308 
309     /**
310      * Is the lateral allowed to put objects to other laterals.
311      * <p>
312      * @param allowPut
313      */
314     @Override
315     public void setAllowPut( final boolean allowPut )
316     {
317         this.allowPut = allowPut;
318     }
319 
320     /**
321      * Is the lateral allowed to put objects to other laterals.
322      * <p>
323      * @return true if puts are allowed
324      */
325     @Override
326     public boolean isAllowPut()
327     {
328         return this.allowPut;
329     }
330 
331     /**
332      * Should the client send a remove command rather than a put when update is called. This is a
333      * client option, not a receiver option. This allows you to prevent the lateral from serializing
334      * objects.
335      * <p>
336      * @param issueRemoveOnPut
337      */
338     @Override
339     public void setIssueRemoveOnPut( final boolean issueRemoveOnPut )
340     {
341         this.issueRemoveOnPut = issueRemoveOnPut;
342     }
343 
344     /**
345      * Should the client send a remove command rather than a put when update is called. This is a
346      * client option, not a receiver option. This allows you to prevent the lateral from serializing
347      * objects.
348      * <p>
349      * @return true if updates will result in a remove command being sent.
350      */
351     @Override
352     public boolean isIssueRemoveOnPut()
353     {
354         return this.issueRemoveOnPut;
355     }
356 
357     /**
358      * Should the receiver try to match hash codes. If true, the receiver will see if the client
359      * supplied a hash code. If it did, then it will try to get the item locally. If the item exists,
360      * then it will compare the hash code. if they are the same, it will not remove. This isn't
361      * perfect since different objects can have the same hash code, but it is unlikely of objects of
362      * the same type.
363      * <p>
364      * @return boolean
365      */
366     @Override
367     public boolean isFilterRemoveByHashCode()
368     {
369         return this.filterRemoveByHashCode;
370     }
371 
372     /**
373      * Should the receiver try to match hash codes. If true, the receiver will see if the client
374      * supplied a hash code. If it did, then it will try to get the item locally. If the item exists,
375      * then it will compare the hash code. if they are the same, it will not remove. This isn't
376      * perfect since different objects can have the same hash code, but it is unlikely of objects of
377      * the same type.
378      * <p>
379      * @param filter
380      */
381     @Override
382     public void setFilterRemoveByHashCode( final boolean filter )
383     {
384         this.filterRemoveByHashCode = filter;
385     }
386 
387     /**
388      * @param socketTimeOut the socketTimeOut to set
389      */
390     @Override
391     public void setSocketTimeOut( final int socketTimeOut )
392     {
393         this.socketTimeOut = socketTimeOut;
394     }
395 
396     /**
397      * @return the socketTimeOut
398      */
399     @Override
400     public int getSocketTimeOut()
401     {
402         return socketTimeOut;
403     }
404 
405     /**
406      * @param openTimeOut the openTimeOut to set
407      */
408     @Override
409     public void setOpenTimeOut( final int openTimeOut )
410     {
411         this.openTimeOut = openTimeOut;
412     }
413 
414     /**
415      * @return the openTimeOut
416      */
417     @Override
418     public int getOpenTimeOut()
419     {
420         return openTimeOut;
421     }
422 
423     /**
424      * Used to key the instance TODO create another method for this and use toString for debugging
425      * only.
426      * <p>
427      * @return String
428      */
429     @Override
430     public String toString()
431     {
432         return this.getTcpServer() + ":" + this.getTcpListenerPort();
433     }
434 }