View Javadoc
1 /* ====================================================================
2 * License:
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. The end-user documentation included with the redistribution,
17 * if any, must include the following acknowledgment:
18 * "This product includes software developed by
19 * Robert Half International (http://www.rhi.com/)."
20 * Alternately, this acknowledgment may appear in the software itself,
21 * if and wherever such third-party acknowledgments normally appear.
22 *
23 * 4. The names "Parc", "RHI", and "Robert Half International" must
24 * not be used to endorse or promote products derived from this
25 * software without prior written permission. For written
26 * permission, please contact pete.mckinstry@rhi.com.
27 *
28 * 5. Products derived from this software may not be called "PARC",
29 * nor may "PARC" appear in their name, without prior written
30 * permission of Robert Half International.
31 *
32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 * SUCH DAMAGE.
44 * ====================================================================
45 *
46 */
47 package com.rhi.architecture.resource.shmem;
48
49 import java.io.FileInputStream;
50 import java.io.FileNotFoundException;
51 import java.io.FileOutputStream;
52 import java.io.IOException;
53 import java.io.ObjectInputStream;
54 import java.io.ObjectOutputStream;
55 import java.util.Properties;
56
57 /***
58 * Object used to share memory between threads. The shared memory is
59 * persisted to a file.
60 *
61 * @author geolun01
62 */
63 public class PersistentSharedMemory implements SharedMemory {
64
65 private String outputFileName = null;
66 private Object sharedData = null;
67
68 /***
69 * No initialization is required
70 *
71 * @param props
72 */
73 public void init(Properties props) {
74 // no op
75 }
76
77 /***
78 * Set our shared data to null
79 *
80 * @see com.rhi.architecture.resource.Resource#close()
81 */
82 public void close() {
83 sharedData = null;
84 }
85
86 /***
87 * Sets the file to be used to persist the stored object. Any calls after
88 * the first call are ignored assuming the first call was successful.
89 *
90 * @param fileName Name of the file to be used for persistance
91 *
92 * @throws IOException Thrown if an error occurs while reading from the
93 * file
94 * @throws ClassNotFoundException Thrown if the loaded object's class
95 * cannot be found
96 */
97 public synchronized void setPersistenceFile(String fileName)
98 throws IOException, ClassNotFoundException {
99 /*
100 * If we've already successfully opened the persistance file, then we'll
101 * just return
102 */
103 if (outputFileName != null) {
104 return;
105 }
106
107 FileInputStream inStream = null;
108
109 try {
110 inStream = new FileInputStream(fileName);
111 }
112 catch (FileNotFoundException fnfe) {
113 /***
114 * We didn't find the file, so we'll assume it doesn't exist. Set the
115 * outputFileName and return
116 */
117 outputFileName = fileName;
118
119 return;
120 }
121
122 // Get the object from out persistance file
123 ObjectInputStream objStream = new ObjectInputStream(inStream);
124 sharedData = objStream.readObject();
125
126 // Set the outputFileName to the fileName
127 outputFileName = fileName;
128 }
129
130 /***
131 * Sets the sharedData and then persists it to a file, if the file is
132 * available
133 *
134 * @param sharedData The sharedData to set
135 *
136 * @throws IOException Thrown if an error occurs while writing to the file
137 */
138 public synchronized void setSharedData(Object sharedData)
139 throws IOException {
140 // Set the sharedData
141 this.sharedData = sharedData;
142
143 // Check to see if we need to open our output stream
144 if (outputFileName != null) {
145 FileOutputStream outStream = new FileOutputStream(outputFileName);
146 ObjectOutputStream objOutStream =
147 new ObjectOutputStream(outStream);
148
149 if (objOutStream != null) {
150 objOutStream.writeObject(this.sharedData);
151 objOutStream.flush();
152 objOutStream.close();
153 }
154 }
155 }
156
157 /***
158 * Returns the sharedData.
159 *
160 * @return Object
161 */
162 public synchronized Object getSharedData() {
163 return sharedData;
164 }
165 }
This page was automatically generated by Maven