You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2012/02/02 13:38:42 UTC
svn commit: r1239581 [1/9] - in /directory/apacheds/trunk/jdbm2: ./ src/
src/etc/ src/examples/ src/main/ src/main/java/ src/main/java/jdbm/
src/main/java/jdbm/btree/ src/main/java/jdbm/helper/
src/main/java/jdbm/htree/ src/main/java/jdbm/recman/ src/s...
Author: elecharny
Date: Thu Feb 2 12:38:39 2012
New Revision: 1239581
URL: http://svn.apache.org/viewvc?rev=1239581&view=rev
Log:
Added the modified JDBM taken from Selcuk's branch into trunk
Added:
directory/apacheds/trunk/jdbm2/ (with props)
directory/apacheds/trunk/jdbm2/pom.xml
directory/apacheds/trunk/jdbm2/src/
directory/apacheds/trunk/jdbm2/src/build.xml
directory/apacheds/trunk/jdbm2/src/etc/
directory/apacheds/trunk/jdbm2/src/etc/MANIFEST.MF
directory/apacheds/trunk/jdbm2/src/examples/
directory/apacheds/trunk/jdbm2/src/examples/FamousPeople.java
directory/apacheds/trunk/jdbm2/src/examples/FruitBasket.java
directory/apacheds/trunk/jdbm2/src/examples/Primes.java
directory/apacheds/trunk/jdbm2/src/main/
directory/apacheds/trunk/jdbm2/src/main/java/
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/ActionRecordManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerFactory.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerOptions.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerProvider.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/btree/
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/btree/BPage.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/btree/BTree.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/btree/package.html
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/ActionContext.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/ActionVersioning.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/ByteArrayComparator.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/ByteArraySerializer.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/CacheEvictionException.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/CachePolicy.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/CachePolicyListener.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/Conversion.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/DefaultSerializer.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/EntryIO.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/ExplicitList.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/FastIterator.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/IntegerComparator.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/IntegerSerializer.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/IterationException.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/LRUCache.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/LongComparator.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/LongSerializer.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/MRU.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/ObjectBAComparator.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/Serialization.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/Serializer.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/SoftCache.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/StringComparator.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/Tuple.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/TupleBrowser.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/WrappedRuntimeException.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/helper/package.html
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/htree/
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/htree/HTree.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/htree/HashBucket.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/htree/HashDirectory.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/htree/HashNode.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/htree/package.html
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/package.html
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/BaseRecordManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/BlockIo.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/BlockView.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/CacheRecordManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/DataPage.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/FileHeader.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/FreeLogicalRowIdPage.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/FreeLogicalRowIdPageManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/FreePhysicalRowId.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/FreePhysicalRowIdPage.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/FreePhysicalRowIdPageManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/Location.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/LogicalRowIdManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/Magic.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/PageCursor.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/PageHeader.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/PageManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/PhysicalRowId.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/PhysicalRowIdManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/Provider.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/RecordCache.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/RecordFile.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/RecordHeader.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/SnapshotRecordManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/TransactionManager.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/TranslationPage.java
directory/apacheds/trunk/jdbm2/src/main/java/jdbm/recman/package.html
directory/apacheds/trunk/jdbm2/src/site/
directory/apacheds/trunk/jdbm2/src/site/site.xml
directory/apacheds/trunk/jdbm2/src/test/
directory/apacheds/trunk/jdbm2/src/test/java/
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/btree/
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/btree/TestBTree.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/btree/TestBTreeBrowser.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/btree/TestSnapshotBTree.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/btree/TestStreamCorrupted.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/helper/
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/helper/TestActionVersioning.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/helper/TestVersionedCache.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/recman/
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/recman/BlockIoTest.java
directory/apacheds/trunk/jdbm2/src/test/java/jdbm/recman/LocationTest.java
directory/apacheds/trunk/jdbm2/src/test/resources/
directory/apacheds/trunk/jdbm2/src/test/resources/log4j.properties
Propchange: directory/apacheds/trunk/jdbm2/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 2 12:38:39 2012
@@ -0,0 +1,11 @@
+.project
+.classpath
+.settings
+eclipse-classes
+*.log
+*.iml
+*.ipr
+dependency-reduced-pom.xml
+META-INF
+bin
+target
Added: directory/apacheds/trunk/jdbm2/pom.xml
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/pom.xml?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/pom.xml (added)
+++ directory/apacheds/trunk/jdbm2/pom.xml Thu Feb 2 12:38:39 2012
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>apacheds-parent</artifactId>
+ <version>2.0.0-M5-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>apacheds-jdbm2</artifactId>
+ <name>ApacheDS JDBM implementation</name>
+ <packaging>bundle</packaging>
+
+ <description>Specific JDBM Implementation</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.directory.junit</groupId>
+ <artifactId>junit-addons</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>apacheds-i18n</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludeSubProjects>false</excludeSubProjects>
+ <excludes>
+ <exclude>**/*</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>META-INF/MANIFEST.MF</manifestFile>
+ <addMavenDescriptor>false</addMavenDescriptor>
+ </archive>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <inherited>true</inherited>
+ <extensions>true</extensions>
+ <configuration>
+ <manifestLocation>META-INF</manifestLocation>
+ <instructions>
+ <Bundle-SymbolicName>${project.groupId}.jdbm2</Bundle-SymbolicName>
+ <Export-Package>
+ {local-packages};version=${project.version};-noimport:=true
+ </Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: directory/apacheds/trunk/jdbm2/src/build.xml
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/build.xml?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/build.xml (added)
+++ directory/apacheds/trunk/jdbm2/src/build.xml Thu Feb 2 12:38:39 2012
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="JDBM" default="all" basedir="..">
+
+ <target name="init">
+ <property name="project" value="jdbm" />
+ <property name="source" value="./src" />
+ <property name="main" value="${source}/main" />
+ <property name="etc" value="${source}/etc" />
+ <property name="build" value="build" />
+ <property name="classes" value="${build}/classes" />
+ <property name="test-classes" value="${build}/test-classes" />
+ <property name="dist" value="dist" />
+ <property name="lib" value="lib" />
+ <property name="doc" value="${source}/doc" />
+ <property name="schema" value="${source}/schema" />
+ <property name="test" value="${build}/test" />
+
+ <property name="classpath" value="${classpath}:${classes}" />
+ <property name="build.compiler" value="modern" />
+ <property name="deprecation" value="true" />
+ <property file="VERSION" />
+ <property name="version" value="unspecified" description="default value; should never happen"/>
+ <property name="archive" value="${project}-${version}" />
+ </target>
+
+
+ <!-- Display all the targets -->
+ <target name="targets">
+ <echo message=""/>
+ <echo message="ANT build for ${project} ${version}"/>
+ <echo message=""/>
+ <echo message="The following targets are available:"/>
+ <echo message=" targets Lists the build targets"/>
+ <echo message=" clean Cleans the build and distribution directories"/>
+ <echo message=" all Cleans and builds all the packages and examples"/>
+ <echo message=" release Cleans and builds all the release packages"/>
+ <echo message=" (JAR, source, doc, tarball) in the dist directory"/>
+ <echo message=" main Builds the main packages (including debugging info)"/>
+ <echo message=" examples Builds the example packages (including debugging info)"/>
+ <echo message=" tests Builds the test packages (including debugging info)"/>
+ <echo message=" tests.run Runs unit tests" />
+ <echo message=" jar Builds the binary JAR in the dist directory"/>
+ <echo message=" doc Builds the documentation"/>
+ <echo message=" api Builds the API JavaDocs"/>
+ <echo message=" javadoc Builds the full JavaDocs"/>
+ <echo message=" source Builds the source tarball in the dist directory"/>
+ <echo message=" tarball Builds the binary distribution in the dist directory"/>
+ <echo message=" cvs Update the sources from the CVS"/>
+ <echo message=""/>
+ </target>
+
+
+ <!-- Prepare target directories -->
+ <target name="prepare" depends="init">
+ <mkdir dir="${build}"/>
+ <mkdir dir="${classes}"/>
+ <mkdir dir="${dist}"/>
+ <mkdir dir="${test}"/>
+ </target>
+
+ <!-- Kill all the directories created in prepare -->
+ <target name="clean" depends="init">
+ <delete dir="${test}"/>
+ <delete dir="${build}"/>
+ <delete dir="${dist}"/>
+ </target>
+
+
+ <!-- Build all the sources with debug and deprecation -->
+ <target name="main" depends="prepare">
+ <javac srcdir="${main}" destdir="${classes}" excludes="**/package.html"
+ classpath="${classpath}" debug="on" deprecation="${deprecation}" source="1.3" target="1.3"/>
+ </target>
+
+ <!-- Same as main, but also cleans and additional targets -->
+ <target name="all" depends="clean,main,examples,jar"/>
+
+ <!-- Run the unit tests -->
+ <target name="tests.run" depends="tests">
+ <!-- showoutput 'yes' to allow outputting debug msgs... -->
+ <junit fork="no" printsummary="yes" haltonfailure="no"
+ showoutput="yes">
+ <batchtest fork="no" todir="${test}">
+ <fileset dir="${test-classes}">
+ <include name="**/Test*.class"/>
+ </fileset>
+ </batchtest>
+ <formatter type="xml" />
+ <classpath>
+ <pathelement path="${classes}" />
+ <pathelement path="${test-classes}" />
+ </classpath>
+ </junit>
+
+ <junitreport todir="${build}/test">
+ <fileset dir="${build}/test">
+ <include name="TEST-*.xml" />
+ </fileset>
+ <report todir="${build}/test" />
+ </junitreport>
+ </target>
+
+ <!-- Build the example packages -->
+ <target name="examples" depends="main">
+ <mkdir dir="${build}/examples" />
+ <javac srcdir="${source}/examples" destdir="${build}/examples"
+ classpath="${classpath}" debug="on" deprecation="${deprecation}" />
+ </target>
+
+ <!-- Build the test packages -->
+ <target name="tests" depends="main">
+ <mkdir dir="${test-classes}" />
+ <javac srcdir="${source}/tests" destdir="${test-classes}"
+ classpath="${classpath}" debug="on" deprecation="${deprecation}" />
+ </target>
+
+ <!-- Build the JAR file using main -->
+ <target name="jar" depends="main">
+ <delete file="${dist}/${archive}.jar" />
+
+ <copy file="${etc}/MANIFEST.MF" tofile="${classes}/MANIFEST.MF" />
+ <replace file="${classes}/MANIFEST.MF" token="$$VERSION$$" value="${version}" />
+ <copy todir="${classes}">
+ <fileset dir="." includes="LICENSE.txt,CHANGES.txt,README.txt" />
+ </copy>
+
+ <jar jarfile="${dist}/${archive}.jar" basedir="${classes}"
+ manifest="${classes}/MANIFEST.MF" includes="LICENSE.txt,README.txt,CHANGES.txt,jdbm/**" />
+ </target>
+
+
+ <!-- Build the full JavaDocs -->
+ <target name="javadoc" depends="prepare">
+ <mkdir dir="${build}/doc" />
+ <mkdir dir="${build}/doc/javadoc" />
+ <property name="copyright"
+ value="Cees de Groot (C) 2000-2001. All rights reserved http://jdbm.sourceforge.net" />
+ <javadoc sourcepath="${main}" destdir="${build}/doc/javadoc"
+ doctitle="JDBM JavaDoc" windowtitle="JDBM JavaDoc" bottom="${copyright}"
+ package="true" author="true" version="true" noindex="true"
+ packagenames="jdbm.*">
+ <link href="http://java.sun.com/products/jdk/1.2/docs/api"/>
+ <link href="http://www.junit.org/junit/javadoc/3.8"/>
+ </javadoc>
+ </target>
+
+ <!-- Build the API JavaDocs -->
+ <target name="api" depends="prepare">
+ <mkdir dir="${build}/doc" />
+ <mkdir dir="${build}/doc/api" />
+ <property name="copyright"
+ value="Cees de Groot (C) 2000. All rights reserved http://jdbm.sourceforge.net" />
+ <javadoc sourcepath="${main}" destdir="${build}/doc/api"
+ doctitle="JDBM JavaDoc" windowtitle="JDBM JavaDoc" bottom="${copyright}"
+ public="true" author="true"
+ packagenames="jdbm.*">
+ <link href="http://java.sun.com/products/jdk/1.2/docs/api"/>
+ </javadoc>
+ </target>
+
+ <!-- Build the docs, API and full JavaDocs, doc archives -->
+ <!-- Note CdG: Removed doc dependency, we don't have it yet... -->
+ <target name="docs" depends="api,javadoc">
+ <zip zipfile="${dist}/${archive}-doc.zip" basedir="${build}" includes="doc/**" />
+ <tar tarfile="${dist}/${archive}-doc.tar" basedir="${build}" includes="doc/**" />
+ <gzip src="${dist}/${archive}-doc.tar" zipfile="${dist}/${archive}-doc.tgz" />
+ <delete file="${dist}/${archive}-doc.tar" />
+ </target>
+
+
+ <!-- Build the source distribution -->
+ <target name="source" depends="prepare">
+ <delete file="${dist}/${archive}-src.tgz" />
+ <delete file="${dist}/${archive}-src.zip" />
+ <delete dir="${build}/${archive}" />
+
+ <mkdir dir="${build}/${archive}" />
+ <mkdir dir="${build}/${archive}/src" />
+ <copy todir="${build}/${archive}/src">
+ <fileset dir="${source}"/>
+ </copy>
+ <mkdir dir="${build}/${archive}/lib" />
+ <copy todir="${build}/${archive}/lib">
+ <fileset dir="${lib}"/>
+ </copy>
+ <copy todir="${build}/${archive}">
+ <fileset dir="${source}" includes="*.sh,*.bat"/>
+ </copy>
+
+ <tar includes="${archive}/**" basedir="${build}"
+ tarfile="${dist}/${archive}-src.tar" />
+ <gzip src="${dist}/${archive}-src.tar" zipfile="${dist}/${archive}-src.tgz"/>
+ <delete file="${dist}/${archive}-src.tar" />
+ <zip zipfile="${dist}/${archive}-src.zip" basedir="${build}"
+ includes="${archive}/**" />
+
+ </target>
+
+
+ <!-- Build a full release including JAR, zip/tarball, source and documentation -->
+ <target name="release" depends="clean,jar,source,docs,tarball">
+ </target>
+
+ <!-- Build the tarball including JAR and all dependent packages -->
+ <target name="tarball" depends="prepare,jar,docs">
+ <delete file="${dist}/${archive}.tgz" />
+ <delete file="${dist}/${archive}.zip" />
+ <delete dir="${build}/${archive}" />
+
+ <mkdir dir="${build}/${archive}" />
+ <copy todir="${build}/${archive}">
+ <fileset dir="." includes="README.txt,LICENSE.txt,CHANGES.txt" />
+ </copy>
+ <copy todir="${build}/${archive}/lib">
+ <fileset dir="${dist}" includes="${archive}.jar" />
+ </copy>
+ <copy todir="${build}/${archive}/doc">
+ <fileset dir="${build}/doc/api" includes="**"/>
+ </copy>
+
+ <copy todir="${build}/${archive}">
+ <fileset dir="${source}" includes="examples/**"/>
+ </copy>
+
+ <tar tarfile="${dist}/${archive}.tar" basedir="${build}"
+ includes="${archive}/**" excludes="${archive}/*.tar,${archive}/*.zip" />
+ <gzip src="${dist}/${archive}.tar" zipfile="${dist}/${archive}.tgz" />
+ <delete file="${dist}/${archive}.tar" />
+
+ <zip zipfile="${dist}/${archive}.zip" basedir="${build}"
+ includes="${archive}/**" excludes="${archive}/*.tar,${archive}/*.tgz" />
+ </target>
+
+
+ <!-- Update the sources from the CVS -->
+ <target name="cvs" depends="clean">
+ <cvs cvsRoot=":pserver:anoncvs@cvs.jdbm.sourceforge.net:/cvs/${project}"
+ dest="." package="${project}" />
+ </target>
+
+
+</project>
+
Added: directory/apacheds/trunk/jdbm2/src/etc/MANIFEST.MF
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/etc/MANIFEST.MF?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/etc/MANIFEST.MF (added)
+++ directory/apacheds/trunk/jdbm2/src/etc/MANIFEST.MF Thu Feb 2 12:38:39 2012
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Specification-Title: JDBM
+Specification-Vendor: JDBM at SourceForge Project
+Specification-Version: 0.09
+Implementation-Title: JDBM
+Implementation-Vendor: JDBM at SourceForge Project
+Implementation-Version: $VERSION$
+
Added: directory/apacheds/trunk/jdbm2/src/examples/FamousPeople.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/examples/FamousPeople.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/examples/FamousPeople.java (added)
+++ directory/apacheds/trunk/jdbm2/src/examples/FamousPeople.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,155 @@
+import java.util.Properties;
+import jdbm.RecordManager;
+import jdbm.RecordManagerFactory;
+
+import jdbm.helper.Tuple;
+import jdbm.helper.TupleBrowser;
+import jdbm.helper.StringComparator;
+
+import jdbm.btree.BTree;
+
+/**
+ * Famous People example.
+ * <p>
+ * Demonstrates the use of B+Tree data structure to manage a list of
+ * people and their occupation. The example covers insertion,
+ * ordered traversal, reverse traversal and range lookup of records.
+ *
+ * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
+ */
+public class FamousPeople {
+
+ static String DATABASE = "people";
+ static String BTREE_NAME = "FamousPeople";
+
+ static String[] people =
+ { "Greenspan, Alan",
+ "Williams-Byrd, Julie",
+ "Picasso, Pablo",
+ "Stallman, Richard",
+ "Fort, Paul",
+ "S�ndergaard, Ole",
+ "Schwarzenegger, Arnold",
+ "Dulkinys, Susanna" };
+
+ static String[] occupations =
+ { "Federal Reserve Board Chairman",
+ "Engineer",
+ "Painter",
+ "Programmer",
+ "Poet",
+ "Typographer",
+ "Actor",
+ "Designer" };
+
+ static String PREFIX = "S";
+
+ /**
+ * Example main entrypoint.
+ */
+ public static void main( String[] args ) {
+ RecordManager recman;
+ long recid;
+ Tuple tuple = new Tuple();
+ TupleBrowser browser;
+ BTree tree;
+ Properties props;
+
+ props = new Properties();
+
+ try {
+ // open database and setup an object cache
+ recman = RecordManagerFactory.createRecordManager( DATABASE, props );
+
+ // try to reload an existing B+Tree
+ recid = recman.getNamedObject( BTREE_NAME );
+ if ( recid != 0 ) {
+ tree = BTree.load( recman, recid );
+ System.out.println( "Reloaded existing BTree with " + tree.size()
+ + " famous people." );
+ } else {
+ // create a new B+Tree data structure and use a StringComparator
+ // to order the records based on people's name.
+ tree = BTree.createInstance( recman, new StringComparator() );
+ recman.setNamedObject( BTREE_NAME, tree.getRecid() );
+ System.out.println( "Created a new empty BTree" );
+ }
+
+ // insert people with their respective occupation
+ System.out.println();
+ for ( int i=0; i<people.length; i++ ) {
+ System.out.println( "Insert: " + people[i] );
+ tree.insert( people[ i ], occupations[ i ], false );
+ }
+
+ // make the data persistent in the database
+ recman.commit();
+
+ // show list of people with their occupation
+ System.out.println();
+ System.out.println( "Person Occupation " );
+ System.out.println( "------------------ ------------------" );
+
+ // traverse people in order
+ browser = tree.browse();
+ while ( browser.getNext( tuple ) ) {
+ print( tuple );
+ }
+
+ // traverse people in reverse order
+ System.out.println();
+ System.out.println( "Reverse order:" );
+ browser = tree.browse( null ); // position browser at end of the list
+
+ while ( browser.getPrevious( tuple ) ) {
+ print( tuple );
+ }
+
+
+
+ // display people whose name start with PREFIX range
+ System.out.println();
+ System.out.println( "All people whose name start with '" + PREFIX + "':" );
+
+ browser = tree.browse( PREFIX );
+ while ( browser.getNext( tuple ) ) {
+ String key = (String) tuple.getKey();
+ if ( key.startsWith( PREFIX ) ) {
+ print( tuple );
+ } else {
+ break;
+ }
+ }
+
+ } catch ( Exception except ) {
+ except.printStackTrace();
+ }
+ }
+
+
+ /**
+ * Print a Tuple containing a ( Person, Occupation ) pair.
+ */
+ static void print( Tuple tuple ) {
+ String person = (String) tuple.getKey();
+ String occupation = (String) tuple.getValue();
+ System.out.println( pad( person, 25) + occupation );
+ }
+
+
+ /**
+ * Pad a string with spaces on the right.
+ *
+ * @param str String to add spaces
+ * @param width Width of string after padding
+ */
+ static String pad( String str, int width ) {
+ StringBuffer buf = new StringBuffer( str );
+ int space = width-buf.length();
+ while ( space-- > 0 ) {
+ buf.append( ' ' );
+ }
+ return buf.toString();
+ }
+
+}
Added: directory/apacheds/trunk/jdbm2/src/examples/FruitBasket.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/examples/FruitBasket.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/examples/FruitBasket.java (added)
+++ directory/apacheds/trunk/jdbm2/src/examples/FruitBasket.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,120 @@
+import jdbm.RecordManager;
+import jdbm.RecordManagerFactory;
+import jdbm.helper.FastIterator;
+import jdbm.htree.HTree;
+
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * Sample JDBM application to demonstrate the use of basic JDBM operations.
+ *
+ * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
+ */
+public class FruitBasket
+{
+ RecordManager recman;
+ HTree hashtable;
+ FastIterator iter;
+ String fruit;
+ String color;
+
+
+ public FruitBasket()
+ throws IOException
+ {
+ // create or open fruits record manager
+ Properties props = new Properties();
+ recman = RecordManagerFactory.createRecordManager( "fruits", props );
+
+ // create or load fruit basket (hashtable of fruits)
+ long recid = recman.getNamedObject( "basket" );
+ if ( recid != 0 ) {
+ System.out.println( "Reloading existing fruit basket..." );
+ hashtable = HTree.load( recman, recid );
+ showBasket();
+ } else {
+ System.out.println( "Creating new fruit basket..." );
+ hashtable = HTree.createInstance( recman );
+ recman.setNamedObject( "basket", hashtable.getRecid() );
+ }
+ }
+
+
+ public void runDemo()
+ throws IOException
+ {
+ // insert keys and values
+ System.out.println();
+ System.out.println( "Adding fruits to the basket..." );
+ hashtable.put( "bananas", "yellow" );
+ hashtable.put( "strawberries", "red" );
+ hashtable.put( "kiwis", "green" );
+
+ showBasket();
+
+
+ // display color of a specific fruit
+ System.out.println();
+ System.out.println( "Get the color of bananas..." );
+ String bananasColor = (String) hashtable.get( "bananas" );
+ System.out.println( "bananas are " + bananasColor );
+
+ recman.commit();
+
+ try {
+ // Thread.sleep( 10 * 1000 );
+ } catch ( Exception except ) {
+ // ignore
+ }
+
+ // remove a specific fruit from hashtable
+ System.out.println();
+ System.out.print( "Removing bananas from the basket..." );
+ hashtable.remove( "bananas" );
+ recman.commit();
+ System.out.println( " done." );
+
+ // iterate over remaining objects
+ System.out.println();
+ System.out.println( "Remaining fruit colors:" );
+ iter = hashtable.keys();
+ fruit = (String) iter.next();
+ while ( fruit != null ) {
+ color = (String) hashtable.get( fruit );
+ System.out.println( fruit + " are " + color );
+ fruit = (String) iter.next();
+ }
+
+ // cleanup
+ recman.close();
+ }
+
+
+ public void showBasket()
+ throws IOException
+ {
+ // Display content of fruit basket
+ System.out.println();
+ System.out.print( "Fruit basket contains: " );
+ iter = hashtable.keys();
+ fruit = (String) iter.next();
+ while ( fruit != null ) {
+ System.out.print( " " + fruit );
+ fruit = (String) iter.next();
+ }
+ System.out.println();
+ }
+
+
+ public static void main( String[] args )
+ {
+ try {
+ FruitBasket basket = new FruitBasket();
+ basket.runDemo();
+ } catch ( IOException ioe ) {
+ ioe.printStackTrace();
+ }
+ }
+
+}
Added: directory/apacheds/trunk/jdbm2/src/examples/Primes.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/examples/Primes.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/examples/Primes.java (added)
+++ directory/apacheds/trunk/jdbm2/src/examples/Primes.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,275 @@
+import jdbm.RecordManager;
+import jdbm.RecordManagerFactory;
+import jdbm.RecordManagerOptions;
+
+import jdbm.btree.BTree;
+
+import jdbm.helper.LongComparator;
+import jdbm.helper.Tuple;
+import jdbm.helper.TupleBrowser;
+
+import java.util.Properties;
+import java.util.Random;
+import java.io.IOException;
+
+/**
+ * Example program dealing with B+Trees and Prime numbers.
+ */
+public class Primes
+{
+
+ /**
+ * Default number of prime number to populate in the database (if not specified on command-line)
+ */
+ public static int DEFAULT_POPULATE = 100;
+
+
+ /**
+ * Default number of random lookups (if not specified on command-line)
+ */
+ public static int DEFAULT_LOOKUPS = 100;
+
+
+ /**
+ * Record Manager used for persistence.
+ */
+ private RecordManager _recman;
+
+
+ /**
+ * B+Tree holding prime numbers.
+ */
+ private BTree _primes;
+
+
+ /**
+ * Random number generator.
+ */
+ private static Random _random = new Random();
+
+
+ /**
+ * Main constructor
+ */
+ public Primes( String[] args )
+ throws IOException
+ {
+ long recid;
+ Properties props;
+
+ // open database and setup an object cache
+ props = new Properties();
+ props.put( RecordManagerOptions.CACHE_SIZE, "10000" );
+ _recman = RecordManagerFactory.createRecordManager( "primes", props );
+
+ recid = _recman.getNamedObject( "primes" );
+ if ( recid == 0 ) {
+ System.out.println( "Creating a new primes B+Tree." );
+ _primes = BTree.createInstance( _recman, new LongComparator() );
+ _recman.setNamedObject( "primes", _primes.getRecid() );
+ } else {
+ _primes = BTree.load( _recman, recid );
+ System.out.println( "B+Tree already contains " + _primes.size() + " primes." );
+ }
+ _recman.commit();
+ }
+
+
+ /**
+ * Get the largest prime number in the database.
+ */
+ public Long getLargestPrime()
+ throws IOException
+ {
+ Tuple tuple;
+ TupleBrowser browser;
+ Long largest = null;
+
+ tuple = new Tuple();
+ browser = _primes.browse( null );
+ if ( browser.getPrevious( tuple ) ) {
+ largest = (Long) tuple.getValue();
+ System.out.println( "Largest prime: " + largest );
+ } else {
+ System.out.println( "No prime number in the database." );
+ }
+ return largest;
+ }
+
+
+ /**
+ * Populate the database with more prime numbers.
+ *
+ * @param count Number of primes to add to database.
+ */
+ void populate( int count )
+ throws IOException
+ {
+ Long current;
+ Long largest;
+
+ System.out.println( "Populating prime B+Tree..." );
+
+ // start after the largest known prime
+ largest = getLargestPrime();
+ if ( largest == null ) {
+ largest = new Long( 0 );
+ }
+
+ current = new Long( largest.longValue() + 1L );
+ while ( count > 0 ) {
+ if ( isPrime( current ) ) {
+ _primes.insert( current, current, false );
+ System.out.println( "Found prime #" + _primes.size() + ": " + current );
+ count--;
+ }
+ current = new Long( current.longValue() + 1 );
+ }
+ _recman.commit();
+ }
+
+
+ /**
+ * Returns true if a number is prime.
+ */
+ boolean isPrime( Long number )
+ throws IOException
+ {
+ Tuple tuple;
+ TupleBrowser browser;
+ Long largest;
+ Long current;
+
+ if ( number.longValue() <= 0L ) {
+ throw new IllegalArgumentException( "Number must be greater than zero" );
+ }
+ if ( number.longValue() == 1 ) {
+ return true;
+ }
+ tuple = new Tuple();
+ browser = _primes.browse();
+ while ( browser.getNext( tuple ) ) {
+ current = (Long) tuple.getValue();
+ if ( current.longValue() != 1 && ( number.longValue() % current.longValue() ) == 0 ) {
+ // not a prime because it is divisibe by a prime
+ return false;
+ }
+ }
+ // this is a prime
+ return true;
+ }
+
+
+ /**
+ * Display a number of random prime numbers.
+ */
+ void random( int count )
+ throws IOException
+ {
+ Tuple tuple;
+ TupleBrowser browser;
+ Long largest;
+ Long number;
+
+ tuple = new Tuple();
+ largest = getLargestPrime();
+
+ System.out.println( "Looking up " + count + " random primes...." );
+ long start = System.currentTimeMillis();
+ for ( int i=0; i<count; i++ ) {
+ number = new Long( random( 0, largest.longValue() ) );
+ browser = _primes.browse( number );
+ if ( browser.getNext( tuple ) ) {
+ number = (Long) tuple.getValue();
+ System.out.print( number );
+ System.out.print( ", " );
+ }
+ }
+ long stop = System.currentTimeMillis();
+ System.out.println();
+ System.out.println( "Time: " + (stop-start)/count + " millis/lookup " );
+ }
+
+
+ /**
+ * Return true if number is a prime.
+ */
+ public static boolean isPrimeCompute( long number )
+ {
+ for ( int i=2; i<number/2; i++ ) {
+ if ( ( number % i ) == 0 ) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ /**
+ * Get random number between "low" and "high" (inclusively)
+ */
+ public static long random( long low, long high )
+ {
+ return ( (long) ( _random.nextDouble() * (high-low) ) + low );
+ }
+
+
+ /**
+ * Static program entrypoint.
+ */
+ public static void main( String[] args )
+ {
+ Primes primes;
+ int count;
+ Long number;
+ Long largest;
+
+ try {
+ primes = new Primes( args );
+
+ for ( int i=0; i<args.length; i++ ) {
+ if ( args[i].equalsIgnoreCase( "-populate" ) ) {
+ if ( ++i < args.length ) {
+ count = Integer.parseInt( args[i] );
+ } else {
+ count = DEFAULT_POPULATE;
+ }
+ primes.populate( count );
+ } else if ( args[i].equalsIgnoreCase( "-check" ) ) {
+ if ( ++i < args.length ) {
+ number = new Long( Long.parseLong( args[i] ) );
+ } else {
+ number = new Long( _random.nextLong() );
+ }
+ largest = primes.getLargestPrime();
+ if ( number.longValue() > primes.getLargestPrime().longValue() ) {
+ throw new IllegalArgumentException( "Number is larger than largest known prime in database." );
+ }
+ if ( primes.isPrime( number ) ) {
+ System.out.println( "The number " + number + " is a prime." );
+ } else {
+ System.out.println( "The number " + number + " is not a prime." );
+ }
+ } else if ( args[i].equalsIgnoreCase( "-random" ) ) {
+ if ( ++i < args.length ) {
+ count = Integer.parseInt( args[i] );
+ } else {
+ count = DEFAULT_LOOKUPS;
+ }
+ primes.random( count );
+ }
+ }
+ if ( args.length == 0 ) {
+ System.out.println( "Usage: java Prime [action] [args]" );
+ System.out.println( "" );
+ System.out.println( "Actions:" );
+ System.out.println( " -populate [number] Populate database with prime numbers" );
+ System.out.println( " -check [number] Check if a number is a prime" );
+ System.out.println( " -random [number] Display random prime numbers" );
+ System.out.println( "" );
+ }
+ } catch ( IOException except ) {
+ except.printStackTrace();
+ }
+ }
+}
Added: directory/apacheds/trunk/jdbm2/src/main/java/jdbm/ActionRecordManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/main/java/jdbm/ActionRecordManager.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/main/java/jdbm/ActionRecordManager.java (added)
+++ directory/apacheds/trunk/jdbm2/src/main/java/jdbm/ActionRecordManager.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package jdbm;
+
+import jdbm.helper.ActionContext;
+
+/**
+ * Extends the RecordManager to allow callers to group their RecordManager interface
+ * calls into actions. Actions operate in isolation.
+ *
+ * Each thread has a current action context associated with it. Threads can switch
+ * between different action context using set/unsetActionContext calls.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public interface ActionRecordManager extends RecordManager
+{
+ /**
+ * Initializes the context for the action. Implicity sets the
+ * context as the current action.
+ *
+ * @param readOnly true if action does not do any modification
+ * @param whoStarted caller can use this for debugging
+ * @return The created action context
+ */
+ ActionContext beginAction( boolean readOnly, String whoStarted );
+
+
+ /**
+ * Ends the action associated with the context.
+ * ReadWrite actions' changes are made visible
+ * to readers.
+ *
+ * @param context identifies the action to end
+ */
+ void endAction( ActionContext context );
+
+
+ /**
+ * Aborts the given action. For write actions, actions's changes
+ * should not be made visible to readers.
+ *
+ * @param context identifies the action to abort
+ */
+ void abortAction( ActionContext context );
+
+
+ /**
+ * Set the context as the current action context for
+ * the given thread
+ *
+ * @param context identifies the context
+ */
+ public void setCurrentActionContext( ActionContext context );
+
+
+ /**
+ * Unsets the context as the current action context.
+ * Given context should be current action context for the
+ * calling thread.
+ *
+ * @param context identifies the context.
+ */
+ public void unsetCurrentActionContext( ActionContext context );
+}
Added: directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManager.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManager.java (added)
+++ directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManager.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,193 @@
+/**
+ * JDBM LICENSE v1.00
+ *
+ * Redistribution and use of this software and associated documentation
+ * ("Software"), with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain copyright
+ * statements and notices. Redistributions must also contain a
+ * copy of this document.
+ *
+ * 2. Redistributions in binary form must reproduce the
+ * above copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. The name "JDBM" must not be used to endorse or promote
+ * products derived from this Software without prior written
+ * permission of Cees de Groot. For written permission,
+ * please contact cg@cdegroot.com.
+ *
+ * 4. Products derived from this Software may not be called "JDBM"
+ * nor may "JDBM" appear in their names without prior written
+ * permission of Cees de Groot.
+ *
+ * 5. Due credit should be given to the JDBM Project
+ * (http://jdbm.sourceforge.net/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
+ * Copyright 2000-2001 (C) Alex Boisvert. All Rights Reserved.
+ * Contributions are Copyright (C) 2000 by their associated contributors.
+ *
+ * $Id: RecordManager.java,v 1.3 2005/06/25 23:12:31 doomdark Exp $
+ */
+package jdbm;
+
+
+import java.io.IOException;
+import jdbm.helper.Serializer;
+
+
+/**
+ * An interface to manages records, which are uninterpreted blobs of data.
+ * <p>
+ * The set of record operations is simple: fetch, insert, update and delete.
+ * Each record is identified using a "rowid" and contains a byte[] data block.
+ * Rowids are returned on inserts and you can store them someplace safe
+ * to be able to get back to them. Data blocks can be as long as you wish,
+ * and may have lengths different from the original when updating.
+ *
+ * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
+ * @author <a href="cg@cdegroot.com">Cees de Groot</a>
+ */
+public interface RecordManager
+{
+ /** Reserved slot for name directory. */
+ int NAME_DIRECTORY_ROOT = 0;
+
+
+ /**
+ * Inserts a new record using standard java object serialization.
+ *
+ * @param obj the object for the new record.
+ * @return the rowid for the new record.
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ long insert( Object obj ) throws IOException;
+
+
+ /**
+ * Inserts a new record using a custom serializer.
+ *
+ * @param obj the object for the new record.
+ * @param serializer a custom serializer
+ * @return the rowid for the new record.
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ long insert( Object obj, Serializer serializer ) throws IOException;
+
+
+ /**
+ * Deletes a record.
+ *
+ * @param recid the rowid for the record that should be deleted.
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ void delete( long recid ) throws IOException;
+
+
+ /**
+ * Updates a record using standard java object serialization.
+ *
+ * @param recid the recid for the record that is to be updated.
+ * @param obj the new object for the record.
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ void update( long recid, Object obj ) throws IOException;
+
+
+ /**
+ * Updates a record using a custom serializer.
+ *
+ * @param recid the recid for the record that is to be updated.
+ * @param obj the new object for the record.
+ * @param serializer a custom serializer
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ void update( long recid, Object obj, Serializer serializer ) throws IOException;
+
+
+ /**
+ * Fetches a record using standard java object serialization.
+ *
+ * @param recid the recid for the record that must be fetched.
+ * @return the object contained in the record.
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ Object fetch( long recid ) throws IOException;
+
+
+ /**
+ * Fetches a record using a custom serializer.
+ *
+ * @param recid the recid for the record that must be fetched.
+ * @param serializer a custom serializer
+ * @return the object contained in the record.
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ Object fetch( long recid, Serializer serializer ) throws IOException;
+
+
+ /**
+ * Closes the record manager.
+ *
+ * @throws IOException when one of the underlying I/O operations fails.
+ */
+ void close() throws IOException;
+
+
+ /**
+ * Returns the number of slots available for "root" rowids. These slots
+ * can be used to store special rowids, like rowids that point to
+ * other rowids. Root rowids are useful for bootstrapping access to
+ * a set of data.
+ */
+ int getRootCount();
+
+
+ /**
+ * Returns the indicated root rowid.
+ *
+ * @see #getRootCount
+ */
+ long getRoot( int id ) throws IOException;
+
+
+ /**
+ * Sets the indicated root rowid.
+ *
+ * @see #getRootCount
+ */
+ void setRoot( int id, long rowid ) throws IOException;
+
+
+ /** Commit (make persistent) all changes since beginning of transaction. */
+ void commit() throws IOException;
+
+
+ /** Rollback (cancel) all changes since beginning of transaction. */
+ void rollback() throws IOException;
+
+
+ /** Obtain the record id of a named object. Returns 0 if named object doesn't exist. */
+ long getNamedObject( String name ) throws IOException;
+
+
+ /** Set the record id of a named object. */
+ void setNamedObject( String name, long recid ) throws IOException;
+}
+
Added: directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerFactory.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerFactory.java (added)
+++ directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerFactory.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,115 @@
+/**
+ * JDBM LICENSE v1.00
+ *
+ * Redistribution and use of this software and associated documentation
+ * ("Software"), with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain copyright
+ * statements and notices. Redistributions must also contain a
+ * copy of this document.
+ *
+ * 2. Redistributions in binary form must reproduce the
+ * above copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. The name "JDBM" must not be used to endorse or promote
+ * products derived from this Software without prior written
+ * permission of Cees de Groot. For written permission,
+ * please contact cg@cdegroot.com.
+ *
+ * 4. Products derived from this Software may not be called "JDBM"
+ * nor may "JDBM" appear in their names without prior written
+ * permission of Cees de Groot.
+ *
+ * 5. Due credit should be given to the JDBM Project
+ * (http://jdbm.sourceforge.net/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
+ * Copyright 2000-2001 (C) Alex Boisvert. All Rights Reserved.
+ * Contributions are Copyright (C) 2000 by their associated contributors.
+ *
+ * $Id: RecordManagerFactory.java,v 1.2 2005/06/25 23:12:31 doomdark Exp $
+ */
+package jdbm;
+
+
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.directory.server.i18n.I18n;
+
+
+/**
+ * This is the factory class to use for instantiating {@link RecordManager}
+ * instances.
+ *
+ * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
+ * @author <a href="cg@cdegroot.com">Cees de Groot</a>
+ */
+public final class RecordManagerFactory
+{
+
+ /**
+ * Create a record manager.
+ *
+ * @param name Name of the record file.
+ * @throws IOException if an I/O related exception occurs while creating
+ * or opening the record manager.
+ * @throws UnsupportedOperationException if some options are not supported by the
+ * implementation.
+ * @throws IllegalArgumentException if some options are invalid.
+ */
+ public static RecordManager createRecordManager( String name ) throws IOException
+ {
+ return createRecordManager( name, new Properties() );
+ }
+
+
+ /**
+ * Create a record manager.
+ *
+ * @param name Name of the record file.
+ * @param options Record manager options.
+ * @throws IOException if an I/O related exception occurs while creating
+ * or opening the record manager.
+ * @throws UnsupportedOperationException if some options are not supported by the
+ * implementation.
+ * @throws IllegalArgumentException if some options are invalid.
+ */
+ public static RecordManager createRecordManager( String name, Properties options ) throws IOException
+ {
+ String provider;
+ Class<?> clazz;
+ RecordManagerProvider factory;
+
+ provider = options.getProperty( RecordManagerOptions.PROVIDER_FACTORY, "jdbm.recman.Provider" );
+
+ try
+ {
+ clazz = Thread.currentThread().getContextClassLoader().loadClass( provider );
+ factory = ( RecordManagerProvider ) clazz.newInstance();
+ }
+ catch ( Exception except )
+ {
+ throw new IllegalArgumentException( I18n.err( I18n.ERR_567, provider, except.getClass().getName(),
+ except.getLocalizedMessage() ) );
+ }
+
+ return factory.createRecordManager( name, options );
+ }
+}
Added: directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerOptions.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerOptions.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerOptions.java (added)
+++ directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerOptions.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,118 @@
+/**
+ * JDBM LICENSE v1.00
+ *
+ * Redistribution and use of this software and associated documentation
+ * ("Software"), with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain copyright
+ * statements and notices. Redistributions must also contain a
+ * copy of this document.
+ *
+ * 2. Redistributions in binary form must reproduce the
+ * above copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. The name "JDBM" must not be used to endorse or promote
+ * products derived from this Software without prior written
+ * permission of Cees de Groot. For written permission,
+ * please contact cg@cdegroot.com.
+ *
+ * 4. Products derived from this Software may not be called "JDBM"
+ * nor may "JDBM" appear in their names without prior written
+ * permission of Cees de Groot.
+ *
+ * 5. Due credit should be given to the JDBM Project
+ * (http://jdbm.sourceforge.net/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
+ * Copyright 2000-2001 (C) Alex Boisvert. All Rights Reserved.
+ * Contributions are Copyright (C) 2000 by their associated contributors.
+ *
+ * $Id: RecordManagerOptions.java,v 1.1 2002/05/31 06:33:20 boisvert Exp $
+ */
+package jdbm;
+
+
+/**
+ * Standard options for RecordManager.
+ * Final reference -> class shouldn't be extended
+ *
+ * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
+ * @author <a href="cg@cdegroot.com">Cees de Groot</a>
+ */
+public final class RecordManagerOptions
+{
+ /**
+ * Ensures no construction of this class, also ensures there is no need for final keyword above
+ * (Implicit super constructor is not visible for default constructor),
+ * but is still self documenting.
+ */
+ private RecordManagerOptions()
+ {
+ }
+
+ /** Option to create a thread-safe record manager. */
+ public final static String PROVIDER_FACTORY = "jdbm.provider";
+
+
+ /** Option to create a thread-safe record manager. */
+ public final static String THREAD_SAFE = "jdbm.threadSafe";
+
+
+ /** Option to automatically commit data after each operation. */
+ public final static String AUTO_COMMIT = "jdbm.autoCommit";
+
+
+ /**
+ * Option to disable transaction (to increase performance at the cost of
+ * potential data loss).
+ */
+ public final static String DISABLE_TRANSACTIONS = "jdbm.disableTransactions";
+
+
+ /** Cache type. */
+ public final static String CACHE_TYPE = "jdbm.cache.type";
+
+
+ /** Cache size (when applicable) */
+ public final static String CACHE_SIZE = "jdbm.cache.size";
+
+
+ /** Use normal (strong) object references for the record cache. */
+ public final static String NORMAL_CACHE = "normal";
+
+
+ /**
+ * Use soft references {$link java.lang.ref.SoftReference} for the record
+ * cache instead of the default normal object references.
+ * <p>
+ * Soft references are cleared at the discretion of the garbage collector
+ * in response to memory demand.
+ */
+ public final static String SOFT_REF_CACHE = "soft";
+
+
+ /**
+ * Use weak references {$link java.lang.ref.WeakReference} for the record
+ * cache instead of the default normal object references.
+ * <p>
+ * Weak references do not prevent their referents from being made
+ * finalizable, finalized, and then reclaimed.
+ */
+ public final static String WEAK_REF_CACHE = "weak";
+}
Added: directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerProvider.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerProvider.java?rev=1239581&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerProvider.java (added)
+++ directory/apacheds/trunk/jdbm2/src/main/java/jdbm/RecordManagerProvider.java Thu Feb 2 12:38:39 2012
@@ -0,0 +1,76 @@
+/**
+ * JDBM LICENSE v1.00
+ *
+ * Redistribution and use of this software and associated documentation
+ * ("Software"), with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain copyright
+ * statements and notices. Redistributions must also contain a
+ * copy of this document.
+ *
+ * 2. Redistributions in binary form must reproduce the
+ * above copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. The name "JDBM" must not be used to endorse or promote
+ * products derived from this Software without prior written
+ * permission of Cees de Groot. For written permission,
+ * please contact cg@cdegroot.com.
+ *
+ * 4. Products derived from this Software may not be called "JDBM"
+ * nor may "JDBM" appear in their names without prior written
+ * permission of Cees de Groot.
+ *
+ * 5. Due credit should be given to the JDBM Project
+ * (http://jdbm.sourceforge.net/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+ * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
+ * Copyright 2000-2001 (C) Alex Boisvert. All Rights Reserved.
+ * Contributions are Copyright (C) 2000 by their associated contributors.
+ *
+ * $Id: RecordManagerProvider.java,v 1.2 2005/06/25 23:12:31 doomdark Exp $
+ */
+package jdbm;
+
+
+import java.io.IOException;
+import java.util.Properties;
+
+
+/**
+ * Provider of RecordManager implementation. Classes implementing this
+ * interface act as a factory to provide implementations of RecordManager.
+ *
+ * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
+ */
+public interface RecordManagerProvider
+{
+
+ /**
+ * Create a record manager.
+ *
+ * @param filename Base filename of the record file.
+ * @param options Record manager options.
+ * @throws IOException if an I/O related exception occurs while creating
+ * or opening the record manager.
+ * @throws UnsupportedOperationException if some options are not supported by the
+ * implementation.
+ * @throws IllegalArgumentException if some options are invalid.
+ */
+ RecordManager createRecordManager( String filename, Properties options ) throws IOException;
+}