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