- From: Anselm Baird_Smith <abaird@www43.inria.fr>
- Date: Mon, 4 Nov 1996 18:50:11 +0100 (MET)
- To: Martijn <martijn@cruiser.vo.com>
- Cc: www-jigsaw@w3.org
martijn@cruiser.vo.com writes: > Hi, > > This isn't really a jigsaw related question, but since jdbm is included > with the jigsaw package i'm asking it here anyway. > In the original gdbm package in C, it's possible storing/retrieving any > datatype. Storing a big structure and retrieving it by casting back to the > original datatype is possible. Very handy feature. > Would it be possible doing this with jdbm as well? Would there be an easy > way to store an object that is an instance of a dataholder class? > Right now i see a way to store a String object because the String class > defines methods to get a byte array copy of its value and giving it a > value using a byte array copy of the desired value. How would i clone a > random object to a byte-array so that i can store it using jdbm? And how > would i create an instance back from the byte-array to the object? > > If anyone already did this, please let me know, I did: just use the resources base classes along with the jdbmResourceStore, it does exactly this. I have attached below an example of such a class... Anselm. ----- package w3c.jigsaw.filters; import java.io.*; import java.util.*; import w3c.jigsaw.auth.AuthFilter; import w3c.jigsaw.http.*; import w3c.www.http.*; import w3c.jigsaw.resources.*; /** * We want free pickling, hence the super class. */ public class PutedEntry extends AttributeHolder { protected static int ATTR_AUTHOR = -1; protected static int ATTR_URL = -1; protected static int ATTR_FILENAME = -1; protected static int ATTR_TIME = -1; static { Class c = null; Attribute a = null; try { c = Class.forName("w3c.jigsaw.filters.PutedEntry"); } catch (Exception ex) { ex.printStackTrace(); System.exit(1); } // The author of change: a = new StringAttribute("author" , null , Attribute.EDITABLE); ATTR_AUTHOR = AttributeRegistry.registerAttribute(c, a); // The mandatory url: a = new StringAttribute("url" , null , Attribute.EDITABLE); ATTR_URL = AttributeRegistry.registerAttribute(c, a); // The optional absolute file name: a = new StringAttribute("filename" , null , Attribute.EDITABLE); ATTR_FILENAME = AttributeRegistry.registerAttribute(c, a); // The time of modification: a = new LongAttribute("time" , null , Attribute.EDITABLE); ATTR_TIME = AttributeRegistry.registerAttribute(c, a); } final String getAuthor() { return getString(ATTR_AUTHOR, null); } final String getURL() { return getString(ATTR_URL, null); } final String getFilename() { return getString(ATTR_FILENAME, null); } final long getTime() { return getLong(ATTR_TIME, -1); } final String getKey() { String key = getFilename(); if ( key == null ) return getURL(); return key; } synchronized void update(Request request) { String author = (String) request.getState(AuthFilter.STATE_AUTHUSER); long time = System.currentTimeMillis(); setValue(ATTR_AUTHOR, author); setValue(ATTR_TIME, new Long(time)); } static PutedEntry makeEntry(Request request) { HTTPResource r = (HTTPResource) request.getTargetResource(); if ( r != null ) { // Build an entry: PutedEntry e = new PutedEntry(); e.setValue(ATTR_URL, request.getURL().toExternalForm()); if ( r instanceof FileResource ) e.setValue(ATTR_FILENAME , ((FileResource) r).getFile().getAbsolutePath()); // Update other infos: e.update(request); return e; } return null; } }
Received on Monday, 4 November 1996 12:50:14 UTC