/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001-2006 The Mir-coders group
*
* This file is part of Mir.
*
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two. You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries. If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so. If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with any library licensed under the Apache Software License,
+ * and distribute linked combinations including the two. You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries. If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
*/
-
package mir.storage.store;
/**
* @version 1.0
*/
-import java.util.*;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import javax.servlet.http.*;
-import javax.servlet.*;
-import mir.misc.Logfile;
-import mir.misc.MirConfig;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.MissingResourceException;
+
+import javax.servlet.http.HttpServletRequest;
+
+import mir.config.MirPropertiesConfiguration;
+import mir.log.LoggerWrapper;
public class ObjectStore {
- private final static ObjectStore INSTANCE=new ObjectStore();
- private final static HashMap containerMap=new HashMap(); // StoreContainerType/StoreContainer
- private static Logfile storeLog;
- private static long storeHit=0,storeMiss=0;
- private Properties ostoreConf;
+ private final static ObjectStore INSTANCE = new ObjectStore();
+ private final static Map containerMap = new HashMap(); // StoreContainerType/StoreContainer
+ private static long storeHit = 0, storeMiss = 0;
+ private MirPropertiesConfiguration configuration;
+ private LoggerWrapper logger;
- private ObjectStore() {
- String confName=MirConfig.getProp("Home")+"etc/objectstore.properties";
- Properties conf = new Properties();
- try {
- conf.load( new BufferedInputStream(new FileInputStream(confName)));
- }
- catch ( java.io.FileNotFoundException fnfe ) {
- System.err.println("could not read config file. not found: "+confName);
- }
- catch ( java.io.IOException ioex ) {
- System.err.println("could not read config file: "+confName);
- }
- ostoreConf = conf;
- }
- public static ObjectStore getInstance() { return INSTANCE; }
+ private ObjectStore() {
+ logger = new LoggerWrapper("Database.ObjectStore");
+ configuration = MirPropertiesConfiguration.instance();
+ }
+ public static ObjectStore getInstance() {
+ return INSTANCE;
+ }
- /**
- * Method: use
- * Description: The ObjectStore tries to find the @see StoreIdentifier sid
- * and returns the stored Object.
- *
- * @return StorableObject is null when no StorableObject for the
- * StoreIdentifier sid is found.
- */
- public StorableObject use(StoreIdentifier sid) {
- if (sid!=null ) {
- StorableObject storeObject=null;
- StoreContainer stoc = getStoreContainerForSid( sid );
- if (stoc!=null) storeObject=stoc.use(sid);
- else System.out.println("Warning: container not found for: " + sid.toString());
- if (storeObject!=null) {
+ /**
+ * Method: use
+ * Description: The ObjectStore tries to find the @see StoreIdentifier sid
+ * and returns the stored Object.
+ *
+ * @return StorableObject is null when no StorableObject for the
+ * StoreIdentifier sid is found.
+ */
+ public StorableObject use(StoreIdentifier sid) {
+ if (sid != null) {
+ StorableObject storeObject = null;
+ StoreContainer stoc = getStoreContainerForSid(sid);
+ if (stoc != null)
+ storeObject = stoc.use(sid);
+ else
+ logger.warn("container not found for: " + sid.toString());
+ if (storeObject != null) {
storeHit++;
- return storeObject;
+ return storeObject;
}
}
- storeMiss++; return null;
+ storeMiss++;
+ return null;
- }
+ }
- /**
- * Method: add
- * Description: A StoreIdentifier is added to the ObjectStore, if it
- * contains a reference to a @see StorableObject.
- */
- public void add(StoreIdentifier sid) {
- if ( sid!=null && sid.hasReference() ) {
- // find the right StoreContainer for sid
- StoreContainer stoc = getStoreContainerForSid(sid);
- if (stoc==null) {
- // we have to make new StoreContainer
- StoreContainerType stocType = sid.getStoreContainerType();
- stoc = new StoreContainer(stocType);
- containerMap.put(stocType, stoc);
- }
- stoc.add(sid);
- }
- }
+ /**
+ * Method: add
+ * Description: A StoreIdentifier is added to the ObjectStore, if it
+ * contains a reference to a @see StorableObject.
+ */
+ public void add(StoreIdentifier sid) {
+ if (sid != null && sid.hasReference()) {
+ // find the right StoreContainer for sid
+ StoreContainer stoc = getStoreContainerForSid(sid);
+ if (stoc == null) {
+ // we have to make new StoreContainer
+ StoreContainerType stocType = sid.getStoreContainerType();
+ stoc = new StoreContainer(stocType);
+ containerMap.put(stocType, stoc);
+ }
+ stoc.add(sid);
+ }
+ }
- /**
- * Method: invalidate(StorableObject sto)
- * Description: ObjectStore is notified of change of a @see StorableObject
- * sto and invalidates all relevant cache entries.
- */
+ /**
+ * Method: invalidate(StorableObject sto)
+ * Description: ObjectStore is notified of change of a @see StorableObject
+ * sto and invalidates all relevant cache entries.
+ */
- public void invalidate(StoreIdentifier sid) {
- // propagate invalidation to StoreContainer
- if (sid!=null) {
+ public void invalidate(StoreIdentifier sid) {
+ // propagate invalidation to StoreContainer
+ if (sid != null) {
StoreContainer stoc = getStoreContainerForSid(sid);
stoc.invalidate(sid);
- }
- }
+ }
+ }
/**
- * Method: invalidate(StoreContainerType)
- * Description: serves to invalidate a whole StoreContainer
- *
- * @return
+ * serves to invalidate a whole StoreContainer
*/
public void invalidate(StoreContainerType stoc_type) {
- if ( stoc_type != null ) {
- /** @todo invalidates too much:
- * improvement: if instanceof StoreContainerEntity && EntityList
- * then invalidate only StoreIdentifier matching the right table
- */
+ if (stoc_type != null) {
StoreContainer stoc = getStoreContainerForStocType(stoc_type);
- if ( stoc!=null )
+ if (stoc != null)
stoc.invalidate();
}
}
- // internal methods for StoreContainer managment
+ // internal methods for StoreContainer managment
- /**
- * Method: getStoreContainerForSid
- * Description: private method to find the right @see StoreContainer for
- * the @see StoreIdentifier sid.
- *
- * @return StoreContainer is null when no Container is found.
- */
- private StoreContainer getStoreContainerForSid(StoreIdentifier sid){
- // find apropriate container for a specific sid
- if (sid!=null) {
- StoreContainerType stoc_type = sid.getStoreContainerType();
- return getStoreContainerForStocType(stoc_type);
- }
- return null;
- }
+ /**
+ * Method: getStoreContainerForSid
+ * Description: private method to find the right @see StoreContainer for
+ * the @see StoreIdentifier sid.
+ *
+ * @return StoreContainer is null when no Container is found.
+ */
+ private StoreContainer getStoreContainerForSid(StoreIdentifier sid) {
+ // find apropriate container for a specific sid
+ if (sid != null) {
+ StoreContainerType stoc_type = sid.getStoreContainerType();
+ return getStoreContainerForStocType(stoc_type);
+ }
+ return null;
+ }
- private StoreContainer getStoreContainerForStocType(StoreContainerType stoc_type) {
- if ( stoc_type!=null && containerMap.containsKey(stoc_type) )
- return (StoreContainer)containerMap.get(stoc_type);
+ private StoreContainer getStoreContainerForStocType(StoreContainerType
+ stoc_type) {
+ if (stoc_type != null && containerMap.containsKey(stoc_type))
+ return (StoreContainer) containerMap.get(stoc_type);
return null;
}
- private boolean has(StoreIdentifier sid) {
- StoreContainer stoc = getStoreContainerForSid( sid );
- return ( stoc != null && stoc.has(sid) ) ? true:false;
- }
+ private boolean has(StoreIdentifier sid) {
+ StoreContainer stoc = getStoreContainerForSid(sid);
+ return (stoc != null && stoc.has(sid)) ? true : false;
+ }
public String getConfProperty(String name) {
- if (name!=null ) {
- String returnValue="";
+ if (name != null) {
try {
- return ostoreConf.getProperty(name);
+ return configuration.getString(name);
}
catch (MissingResourceException e) {
- System.err.println("ObjectStore: " + e.toString());
+ logger.error("getConfProperty: " + e.toString());
}
}
return null;
}
- /**
- * Method: toString()
- * Description: Displays statistical information about the ObjectStore.
- * Further information is gathered from all @see StoreContainer
- *
- * @return String
- */
- public String toString() {
- return toHtml(null);
+ /**
+ * Method: toString()
+ * Description: Displays statistical information about the ObjectStore.
+ * Further information is gathered from all @see StoreContainer
+ *
+ * @return String
+ */
+ public String toString() {
+ return toHtml(null);
}
public String toHtml(HttpServletRequest req) {
- float hitRatio=0;
- long divisor=storeHit+storeMiss;
- if (divisor>0) hitRatio=(float)storeHit/(float)divisor;
- hitRatio*=100;
+ float hitRatio = 0;
+ long divisor = storeHit + storeMiss;
+ if (divisor > 0)
+ hitRatio = (float) storeHit / (float) divisor;
+ hitRatio *= 100;
StringBuffer sb = new StringBuffer("Mir-ObjectStore ");
- sb.append( ((req!=null) ? html_version():version()) ).append("\n");
- sb.append("ObjectStore overall hits/misses/ratio: ").append(storeHit);
- sb.append("/").append(storeMiss).append("/").append(hitRatio);
- sb.append("%\nCurrently ").append(containerMap.size());
- sb.append(" StoreContainer in use - listing information:\n");
-
- // ask container for information
- StoreContainer currentStoc;
- for(Iterator it=containerMap.keySet().iterator();it.hasNext();) {
- currentStoc=(StoreContainer)containerMap.get(it.next());
- sb.append(currentStoc.toHtml(req));
- }
-
- return sb.toString();
- }
+ sb.append( ( (req != null) ? html_version() : version())).append("\n");
+ sb.append("ObjectStore overall hits/misses/ratio: ").append(storeHit);
+ sb.append("/").append(storeMiss).append("/").append(hitRatio);
+ sb.append("%\nCurrently ").append(containerMap.size());
+ sb.append(" StoreContainer in use - listing information:\n");
+
+ // ask container for information
+ StoreContainer currentStoc;
+ for (Iterator it = containerMap.keySet().iterator(); it.hasNext(); ) {
+ currentStoc = (StoreContainer) containerMap.get(it.next());
+ sb.append(currentStoc.toHtml(req));
+ }
+ return sb.toString();
+ }
/**
- * Method: html_version()
- * Description: returns ObjectStore version as String for HTML representation
- *
- * @return String
- */
- private String html_version() { return "<i>"+version()+"</i>"; }
+ * Method: html_version()
+ * Description: returns ObjectStore version as String for HTML representation
+ *
+ * @return String
+ */
+ private String html_version() {
+ return "<i>" + version() + "</i>";
+ }
- /**
- * Method: version()
- * Description: returns ObjectStore version as String
- *
- * @return String
- */
- private String version() { return "v_sstart3__1.0"; }
+ /**
+ * Method: version()
+ * Description: returns ObjectStore version as String
+ *
+ * @return String
+ */
+ private String version() {
+ return "v_sstart3__1.0";
+ }
}
\ No newline at end of file