*/
import java.util.*;
+import javax.servlet.http.*;
+import javax.servlet.*;
import mir.misc.Logfile;
public class ObjectStore {
private final static ObjectStore INSTANCE=new ObjectStore();
private final static HashMap containerMap=new HashMap(); // StoreContainerType/StoreContainer
- private final static Class storableObjectInterface=StorableObject.class;
private static Logfile storeLog;
private static long storeHit=0,storeMiss=0;
+ private ResourceBundle ostoreConf;
private ObjectStore() {
+ ostoreConf = ResourceBundle.getBundle("objectstore");
+ if ( ostoreConf == null )
+ System.err.println("FATAL: could not find objectstore.properties");
}
public static ObjectStore getInstance() { return INSTANCE; }
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) storeHit++;
- return storeObject;
+ if (storeObject!=null) {
+ storeHit++;
+ return storeObject;
+ }
}
storeMiss++; return null;
}
/**
- * Method: toString()
- * Description: Displays statistical information about the ObjectStore.
- * Further information is gathered from all @see StoreContainer
- *
- * @return String
- */
- public String toString() {
-
- float hitRatio=0;
- long divisor=storeHit+storeMiss;
- if (divisor>0) hitRatio=(float)storeHit/(float)divisor;
- hitRatio*=100;
-
- StringBuffer sb = new StringBuffer("Mir-ObjectStore v_");
- sb.append(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.toString());
- }
-
- return sb.toString();
- }
-
- /**
* Method: invalidate(StorableObject sto)
* Description: ObjectStore is notified of change of a @see StorableObject
* sto and invalidates all relevant cache entries.
return null;
}
+ 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="";
+ try {
+ return ostoreConf.getString(name);
+ }
+ catch (MissingResourceException e) {
+ System.err.println("ObjectStore: " + e.toString());
+ }
+ }
+ return null;
+ }
+
/**
- * Method: implementsStorableObject
- * Description: internall helper method to find out if a class implements
- * interface StorableObject.
+ * Method: toString()
+ * Description: Displays statistical information about the ObjectStore.
+ * Further information is gathered from all @see StoreContainer
*
- * @return true if yes, otherwise no.
+ * @return String
*/
- private final static boolean implementsStorableObject(Class aClass) {
- if (aClass!=null) {
- Class[] interfaces = aClass.getInterfaces();
- if (interfaces.length>0) {
- for (int i=0;i<interfaces.length;i++) {
- if (interfaces[i]==storableObjectInterface) return true;
- }
- }
- }
- return false;
- }
+ 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;
- private boolean has(StoreIdentifier sid) {
- StoreContainer stoc = getStoreContainerForSid( sid );
- return ( stoc != null && stoc.has(sid) ) ? true:false;
+ 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();
}
+ /**
+ * 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 "00.d5";}
+ private String version() { return "v_sstart3__1.0"; }
+
}
\ No newline at end of file