View Javadoc

1   /*   Open Source Java Caching Service
2    *    Copyright (C) 2002 Frank Karlstrøm
3    *    This library is free software; you can redistribute it and/or
4    *    modify it under the terms of the GNU Lesser General Public
5    *    License as published by the Free Software Foundation; either
6    *    version 2.1 of the License, or (at your option) any later version.
7    *
8    *    This library is distributed in the hope that it will be useful,
9    *    but WITHOUT ANY WARRANTY; without even the implied warranty of
10   *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11   *    Lesser General Public License for more details.
12   *
13   *    You should have received a copy of the GNU Lesser General Public
14   *    License along with this library; if not, write to the Free Software
15   *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16   *
17   *    The author can be contacted by email: fjankk@sourceforge.net
18   */
19  package javax.util.jcache;
20  
21  /**
22   * This class defines the attributes an object in the cache can have.
23   * @deprecated removed with no replacement.
24   */
25  public interface Attributes {
26      //This class is completely implemented.
27      /** Event wich is fired when invalidation of an cacheobject is fired. */
28      public static final int INVALIDATE_EVENT = 0;
29      /**
30       * Indicates the object is distributed, updates and invalidations are
31       * distributed to other processes. Default is to not distribute changes.
32       */
33      public static final long DISTRIBUTE = 1;
34      /**
35       * Indicates to not flush the object from the cache if the object is
36       * distributed and the cache is isolated from other caches. Default is to
37       * flush the object. This flag is ignored if a "time to live" is specified,
38       * or the object is local.
39       */
40      public static final long NOFLUSH = 2;
41      /**
42       * Indicates a reply should be sent from the remote caches if this object is
43       * updated or invalidated. The default is no reply. If the object is local,
44       * this flag is ignored.
45       */
46      public static final long REPLY = 4;
47      /**
48       * Indicates that the updates to this object should be synchronized. If this
49       * flag is set, only the owner of an object can update or invalidate the
50       * object. The default is no synchronization.
51       */
52      public static final long SYNCHRONIZE = 8;
53      /**
54       * Indicates the object shoulod be spooled to disk when the object is being
55       * removed from the memory cache because of space limitations. This flag is
56       * only valid for memory objects.
57       */
58      public static final long SPOOL = 16;
59      /**
60       * Indicates the group object should be destroyed when the associated time
61       * to live expires. In the default case only the child objects are
62       * invalidated. The group remains valid.
63       */
64      public static final long GROUP_TTL_DESTROY = 32;
65      /**
66       * Indicates the object was created in the cache and can't be recreated if
67       * removed from the cache. Original objects don't get removed from the cache
68       * even when they are not referenced. Original objects must be invalidated
69       * before they get removed fromthe cache.
70       */
71      public static final long ORIGINAL = 64;
72  
73      /**
74       * Is used to specify wich attributes should be set in the attributes
75       * object. The different attributes wich is valid is defined as public
76       * static variables in the {@link Attributes}class.
77       * 
78       * @param theFlags The attributes to set. the attributes may be OR-ed
79       *            together. I.e. Attributes.DISTRIBUTE | Attributes.SYNCHRONIZE
80       *            Invalid flags are silently ignored. To reset all flags you use
81       *            0 as a parameter. I.e. setFlags(0)
82       */
83      public abstract void setFlags(final long theFlags);
84  
85      /**
86       * Will associate a loader object with this object.
87       * 
88       * @param aLoader The loader to set. This parameter can be null.
89       */
90      public abstract void setLoader(final CacheLoader aLoader);
91  
92      /**
93       * Sets the version attribute. Is only maintained for user convenience. It
94       * is not used internally by the cache.
95       * 
96       * @param aVersion the version number to set.
97       */
98      public abstract void setVersion(final long aVersion);
99  
100     /**
101      * Will set the maximum time the associated cache object will stay in the
102      * cache before it is invalidated. The time starts when the object is loaded
103      * into the cache(by the {@link CacheLoader}object or put by the
104      * {@link CacheAccess#replace(Object, Object)}) or when the time to live
105      * attribute is set by the {@link CacheLoader#setAttributes(Object,
106      * Attributes)} method.
107      * 
108      * @param ttl the time to live in seconds. The {@link #timeToSeconds(int,
109      *            int, int, int)} can be used to convert days, hours, minutes to
110      *            seconds.
111      * 
112      * @throws InvalidArgumentException if a negative value for ttl is supplied.
113      */
114     public abstract void setTimeToLive(final long ttl) throws InvalidArgumentException;
115 
116     /**
117      * Will set the maximum time the associated cache object will stay in the
118      * cache before it is invalidated. For regions and groups, this will
119      * establish a default time to live that is applied individually to each
120      * member in the group or region. It will not cause the entire group or
121      * region to time out as a whole. For individual objects, the default time
122      * to live is equivalent with time to live. If both are set the default time
123      * to live is ignored. The time starts when the object is loaded into the
124      * cache(by the {@link CacheLoader}objector put by the {@link
125      * CacheAccess#replace(Object, Object)}) or when the time to live attribute
126      * is set by the {@link CacheLoader#setAttributes(Object,Attributes)}
127      * method.
128      * 
129      * @param ttl the time to live in seconds. The {@link #timeToSeconds(int,
130      *            int, int, int)} can be used to convert days, hours, minutes to
131      *            secounds.
132      * 
133      * @throws InvalidArgumentException if a negative value for ttl is supplied.
134      */
135     public abstract void setDefaultTimeToLive(final long ttl) throws InvalidArgumentException;
136 
137     public abstract long getDefaultTimeToLive();
138 
139     /**
140      * sets the maximum time the associated cache object will remain in the
141      * cache without being referenced before it is invalidated.
142      * 
143      * @param idle is in seconds. The {@link #timeToSeconds(int, int, int,int)}
144      *            can be used to convert days, hours, minutes to secounds.
145      * 
146      * @throws InvalidArgumentException if a negative value for idle is
147      *             supplied.
148      */
149     public abstract void setIdleTime(final long idle) throws InvalidArgumentException;
150 
151     /**
152      * Register an event listener object to be executed when the specified event
153      * occurs with relationship to the associated object. Currently the only
154      * invalidate event being monitored is Attributes.INVALIDATE_EVENT. If
155      * invalid parameters are passed such as invalid events, or null as
156      * listener, this method silently returns without doing any changes to this
157      * object.
158      * 
159      * @param event The event to listen for.
160      * @param aListener the listener to fire when the event occurs.
161      * 
162      *@todo Should these Attributes only have one Listener, or should several be
163      * supported?
164      */
165     public abstract void setListener(final int event, final CacheEventListener aListener);
166 
167     /**
168      * Is used to specify the size in bytes of the object being cached. This is
169      * used to determine when the cache capacity is reached. If the cache is not
170      * using object size to determine the capacity (It can also use object
171      * counts) this value is ignored.
172      * 
173      * @param aSize the size to be set. if this parameter is smaller than zero,
174      *            this method silently returns.
175      */
176     public abstract void setSize(final int aSize);
177 
178     /**
179      * returns the size of the object. this size is set by the {@link
180      * #setSize(int)} method, or in the case of StreamAccess objects, the size
181      * is calculated by the cache.
182      * @todo create and implement an online size calculator.
183      * @return the size of the object, or 0 if the size has not been set.
184      */
185     public abstract int getSize();
186 
187     /**
188      * Checks wether the flags are set or not.
189      * 
190      * @param theFlags the flags to be checked. may be OR-ed together, for wich
191      *            this method will return true only if all flags are set.
192      * 
193      * @return true if the specified attribute is set, false otherwise.
194      */
195     public abstract boolean isSet(final long theFlags);
196 
197     /**
198      * returns the time the object was loaded into the cache. The time is the
199      * number of milliseconds since midnight, January 1, 1970 (UTC).
200      * 
201      * @return the time the object was loaded into the cache. The time is the
202      *         number of milliseconds since midnight, January 1, 1970 (UTC).
203      */
204     public abstract long getCreateTime();
205 
206     /**
207      * returns the {@link CacheLoader}attribute.
208      * 
209      * @return the {@link CacheLoader}attribute.
210      */
211     public abstract CacheLoader getLoader();
212 
213     /**
214      * returns the current value of version.
215      * 
216      * @return the current value of version.
217      */
218     public abstract long getVersion();
219 
220     /**
221      * returns the current value for the idle time interval.
222      * 
223      * @return the current value for the idle time interval.
224      */
225     public abstract long getIdleTime();
226 
227     /**
228      * returns the current value for the time to live interval.
229      * 
230      * @return the current value for the time to live interval.
231      */
232     public abstract long getTimeToLive();
233 
234     /**
235      * resets the Attributes to its default values. The attributes wich are
236      * reset are expiration time attributes, time to live, default time to
237      * live, idle time and event handlers.
238      *
239      * @todo This method should be package private,  thus this class should be
240      *       moved to org.fjank.jcache, an interface should be extracted, and
241      *       that should be public,  and in this package.
242      */
243     public abstract void reset();
244 
245     /**
246      * Sets the createTime.
247      * 
248      * @param aCreateTime The createTime to set
249      */
250     public abstract void setCreateTime(final long aCreateTime);
251     /**
252      * Will convert the time specified into seconds.
253      * 
254      * @param days number of days.
255      * @param hours number of hours.
256      * @param minutes number of minutes.
257      * @param seconds number of seconds.
258      * 
259      * @return the converted time in seconds.
260      * 
261      * @throws InvalidArgumentException if any of the parameters are negative
262      *             values.
263      */
264     public long timeToSeconds(final int days, final int hours, final int minutes, final int seconds) throws InvalidArgumentException;
265     /**
266      * Gets the CacheEventListener.
267      * @author Philippe Fajeau
268      * @return The CacheEventListener.
269      */
270     public abstract CacheEventListener getListener();
271     public void applyAttributes(Attributes attributes);
272 }