001: package org.mandarax.zkb;
002:
003: /*
004: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: */
020:
021: import java.io.IOException;
022: import java.io.InputStream;
023: import java.io.OutputStream;
024:
025: /**
026: * Interface describing an object persisteny service (OPS).
027: * An object persisteny service is responsible for saving objects stored in a kind of
028: * map (associating object uris and objects) to a stream, and recovering the map from
029: * a stream. This is to support knowledge base storage: while knowledge base objects
030: * such as rules and facts are stored in an xml file, the objects referenced are stored
031: * separately as one big map. This is to benefit from existing technologies like
032: * serialization.
033: * <br>
034: * The interface is similar to an JNDI context - most implementations will work with
035: * maps associating names and serialized object references.
036: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
037: * @version 3.4 <7 March 05>
038: * @since 2.2
039: */
040: public interface ObjectPersistencyService {
041: /**
042: * Export objects.
043: * @param out an output stream
044: * @exception an io exception
045: */
046: public void exportObjects(OutputStream out) throws IOException;
047:
048: /**
049: * Import objects.
050: * @param in an input stream
051: * @exception an io exception
052: */
053: public void importObjects(InputStream in) throws IOException;
054:
055: /**
056: * Get name.
057: * @return the name of the service
058: */
059: public String getName();
060:
061: /**
062: * Get a brief description.
063: * @return a brief description of the service
064: */
065: public String getDescription();
066:
067: /**
068: * Get the extension of the associated files.
069: * @return a file extension
070: */
071: public String getExtension();
072:
073: /**
074: * Create a name of an object.
075: * @param obj an object
076: * @return an uri
077: */
078: public String createName(Object obj);
079:
080: /**
081: * Bind an object to a name (uri).
082: * @param uri an uri
083: * @param obj an object
084: */
085: public void bind(String uri, Object obj);
086:
087: /**
088: * Find an object. If the object is not yet registered, bind it
089: * using the generated name.
090: * @param obj an object
091: * @return the uri
092: */
093: public String findOrBind(Object obj);
094:
095: /**
096: * Unbind the name (uri).
097: * @param uri an uri
098: */
099: public void unbind(String uri);
100:
101: /**
102: * Get an object by name.
103: * @param uri an uri
104: * @return obj an object
105: */
106: public Object lookup(String name);
107:
108: /**
109: * Reset the state, release all associations.
110: */
111: public void reset();
112:
113: }
|