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 org.fjank.jcache;
20  
21  import java.io.ByteArrayInputStream;
22  import java.io.InputStream;
23  import java.io.OutputStream;
24  import java.lang.ref.ReferenceQueue;
25  import javax.util.jcache.CacheException;
26  import javax.util.jcache.InvalidArgumentException;
27  import javax.util.jcache.ObjectNotFoundException;
28  
29  /**
30   * A cacheobject which reads/writes the content with the aid of Input/Outputstreams
31   * Contains an internal reference to the wrapped object,
32   * so the override of SoftReference is probably broken on this object...
33   * 
34   * @author Frank Karlstrøm
35   *
36   */
37  public class StreamCacheObject extends CacheObject {
38  	private byte[] referent;
39      /**
40       * Creates a new StreamCacheObject object.
41       *
42       * @param key the name of this object
43       * @param referent the actuall object
44       * @param group the group this object belongs to
45       * @param q the ReferenceQueue this object goes to wneh the GC determines
46       *        that this object is garbage.
47       */
48      public StreamCacheObject(
49          Object key,
50          Object referent,
51          CacheGroup group,
52          CacheRegion region,
53          ReferenceQueue q) throws CacheException {
54          super(key, referent, group, region, q);
55          //this.referent=serialize(referent);
56      }
57  
58      
59  
60      /**Overrides the normal get method by getting the Object, 
61       * then creating an InputStream to this object. 
62       *
63       *@todo ObjectNotFoundException is never thrown
64       */
65      public InputStream getInputStream() throws ObjectNotFoundException {
66      	//just to trigger reference count
67          super.get();
68          return new ByteArrayInputStream(referent);
69          
70      }
71  
72      /**gets an OutputStream to write to this object.
73       *@todo Exception is never thrown
74       * @return
75       */
76      public OutputStream getOutputStream() throws InvalidArgumentException {
77  		return new CacheOutputStream(this);
78      }
79  
80      /**
81       * @param bs
82       */
83       void setReferent(byte[] bs) {
84          referent = bs;
85      }
86  
87  }