diff options
5 files changed, 130 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java index a0a7380f51..3fbc73f0e1 100644 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java @@ -33,6 +33,7 @@ import com.db4o.query.Query; import com.db4o.reflect.jdk.JdkReflector; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; @@ -220,10 +221,15 @@ public class DB4OStore extends LongIDStore implements IDB4OStore } finally { - container.close(); + closeClient(container); } } + protected void closeClient(ObjectContainer container) + { + container.close(); + } + private void commitServerInfo(ObjectContainer container) { ObjectContainer usedContainer = container != null ? container : openClient(); @@ -237,7 +243,7 @@ public class DB4OStore extends LongIDStore implements IDB4OStore { if (usedContainer != container) { - usedContainer.close(); + closeClient(usedContainer); } } } @@ -295,6 +301,12 @@ public class DB4OStore extends LongIDStore implements IDB4OStore return (DB4ORevision)revisions.get(0); } + public static <T> List<T> getElementsOfType(ObjectContainer container, Class<T> clazz) + { + ObjectSet<T> elements = container.query(clazz); + return elements; + } + public static IDB4OIdentifiableObject getIdentifiableObject(ObjectContainer container, String id) { Query query = container.query(); diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java index c5a11f2884..47335fa3de 100644 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java @@ -19,6 +19,8 @@ import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.id.CDOIDUtil; import org.eclipse.emf.cdo.common.lob.CDOLobHandler; import org.eclipse.emf.cdo.common.model.EMFUtil; +import org.eclipse.emf.cdo.common.protocol.CDODataInput; +import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.CDORevisionCacheAdder; import org.eclipse.emf.cdo.common.revision.CDORevisionHandler; @@ -27,6 +29,7 @@ import org.eclipse.emf.cdo.common.util.CDOQueryInfo; import org.eclipse.emf.cdo.eresource.EresourcePackage; import org.eclipse.emf.cdo.server.IQueryHandler; import org.eclipse.emf.cdo.server.ISession; +import org.eclipse.emf.cdo.server.IStoreAccessor; import org.eclipse.emf.cdo.server.IStoreChunkReader; import org.eclipse.emf.cdo.server.ITransaction; import org.eclipse.emf.cdo.server.db4o.IDB4OIdentifiableObject; @@ -68,6 +71,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; +import java.io.Writer; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -81,7 +85,7 @@ import java.util.Set; /** * @author Victor Roldan Betancort */ -public class DB4OStoreAccessor extends LongIDStoreAccessor +public class DB4OStoreAccessor extends LongIDStoreAccessor implements IStoreAccessor.Raw { private ObjectContainer objectContainer; @@ -312,8 +316,11 @@ public class DB4OStoreAccessor extends LongIDStoreAccessor { Query query = getObjectContainer().query(); query.constrain(DB4ORevision.class); - query.descend(DB4ORevision.ATTRIBUTE_PACKAGE_NS_URI).constrain(eClass.getEPackage().getNsURI()); - query.descend(DB4ORevision.ATTRIBUTE_CLASS_NAME).constrain(eClass.getName()); + if (eClass != null) + { + query.descend(DB4ORevision.ATTRIBUTE_PACKAGE_NS_URI).constrain(eClass.getEPackage().getNsURI()); + query.descend(DB4ORevision.ATTRIBUTE_CLASS_NAME).constrain(eClass.getName()); + } ObjectSet<?> revisions = query.execute(); if (revisions.isEmpty()) @@ -425,8 +432,42 @@ public class DB4OStoreAccessor extends LongIDStoreAccessor public void handleLobs(long fromTime, long toTime, CDOLobHandler handler) throws IOException { - // TODO: implement DB4OStoreAccessor.handleLobs(fromTime, toTime, handler) - throw new UnsupportedOperationException(); + for (DB4OBlob db4oBlob : DB4OStore.getElementsOfType(getObjectContainer(), DB4OBlob.class)) + { + byte[] id = HexUtil.hexToBytes(db4oBlob.getId()); + byte[] blob = db4oBlob.getValue(); + ByteArrayInputStream in = new ByteArrayInputStream(blob); + OutputStream out = handler.handleBlob(id, blob.length); + if (out != null) + { + try + { + IOUtil.copyBinary(in, out, blob.length); + } + finally + { + IOUtil.close(out); + } + } + } + for (DB4OClob db4oClob : DB4OStore.getElementsOfType(getObjectContainer(), DB4OClob.class)) + { + byte[] id = HexUtil.hexToBytes(db4oClob.getId()); + char[] clob = db4oClob.getValue(); + CharArrayReader in = new CharArrayReader(clob); + Writer out = handler.handleClob(id, clob.length); + if (out != null) + { + try + { + IOUtil.copyCharacter(in, out, clob.length); + } + finally + { + IOUtil.close(out); + } + } + } } public void loadLob(byte[] id, OutputStream out) throws IOException @@ -715,4 +756,57 @@ public class DB4OStoreAccessor extends LongIDStoreAccessor throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder " + folderID); //$NON-NLS-1$ //$NON-NLS-2$ } } + + public void rawExport(CDODataOutput out, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime) + throws IOException + { + // TODO: Implement DB4OStoreAccessor.rawExport(CDODataOutput, int, int, long, long) + throw new UnsupportedOperationException(); + } + + public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime, + OMMonitor monitor) throws IOException + { + // TODO: Implement DB4OStoreAccessor.rawImport(CDODataInput, int, int, long, long, OMMonitor) + throw new UnsupportedOperationException(); + } + + public void rawStore(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor) + { + writePackageUnits(packageUnits, monitor); + } + + public void rawStore(InternalCDORevision revision, OMMonitor monitor) + { + writeRevision(revision, monitor); + } + + public void rawStore(byte[] id, long size, InputStream inputStream) throws IOException + { + // TODO: Implement DB4OStoreAccessor.rawExport(CDODataOutput, int, int, long, long) + throw new UnsupportedOperationException(); + } + + public void rawStore(byte[] id, long size, Reader reader) throws IOException + { + // TODO: Implement DB4OStoreAccessor.rawStore(byte[], long, Reader) + throw new UnsupportedOperationException(); + } + + public void rawStore(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, + OMMonitor monitor) + { + writeCommitInfo(branch, timeStamp, previousTimeStamp, userID, comment, monitor); + } + + public void rawDelete(CDOID id, int version, CDOBranch branch, EClass eClass, OMMonitor monitor) + { + // TODO: Implement DB4OStoreAccessor.rawDelete(CDOID, int, CDOBranch, EClass, OMMonitor) + throw new UnsupportedOperationException(); + } + + public void rawCommit(double commitWork, OMMonitor monitor) + { + doCommit(monitor); + } } diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/MEMDB4OStore.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/MEMDB4OStore.java index 434617500e..d7eff1c621 100644 --- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/MEMDB4OStore.java +++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/MEMDB4OStore.java @@ -23,6 +23,8 @@ import com.db4o.ext.MemoryFile; public final class MEMDB4OStore extends DB4OStore
{
+ private ObjectContainer objectContainer;
+
public MEMDB4OStore()
{
super(null, 0);
@@ -31,7 +33,11 @@ public final class MEMDB4OStore extends DB4OStore @Override
public ObjectContainer openClient()
{
- return ExtDb4o.openMemoryFile(new MemoryFile());
+ if (objectContainer == null)
+ {
+ objectContainer = ExtDb4o.openMemoryFile(new MemoryFile());
+ }
+ return objectContainer;
}
@Override
@@ -45,4 +51,10 @@ public final class MEMDB4OStore extends DB4OStore {
// no server is defined. Objects are mantained in-memory in ObjectContainer instances
}
+
+ @Override
+ protected void closeClient(ObjectContainer container)
+ {
+ // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java b/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java index 91223f5004..0ffa57e412 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java +++ b/plugins/org.eclipse.emf.cdo.tests.db4o/src/com/eclipse/emf/cdo/test/db4o/AllTestsDB4O.java @@ -14,8 +14,6 @@ import org.eclipse.emf.cdo.server.IRepository; import org.eclipse.emf.cdo.server.IStore; import org.eclipse.emf.cdo.server.internal.db4o.MEMDB4OStore; import org.eclipse.emf.cdo.tests.AllConfigs; -import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_261218_Test; -import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_316444_Test; import org.eclipse.emf.cdo.tests.config.impl.ConfigTest; import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig; @@ -40,9 +38,9 @@ public class AllTestsDB4O extends AllConfigs { super.initTestClasses(testClasses); - // Takes too much time - testClasses.remove(Bugzilla_261218_Test.class); - testClasses.remove(Bugzilla_316444_Test.class); + // Added here testcases to skip, example: + // testClasses.remove(Bugzilla_261218_Test.class); + // testClasses.remove(Bugzilla_316444_Test.class); } @Override diff --git a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/AbstractOMTest.java b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/AbstractOMTest.java index e8a41888c9..cb6c1d892a 100644 --- a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/AbstractOMTest.java +++ b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/AbstractOMTest.java @@ -50,7 +50,7 @@ import junit.framework.TestResult; */ public abstract class AbstractOMTest extends TestCase { - public static final long DEFAULT_TIMEOUT = 120 * 1000; + public static final long DEFAULT_TIMEOUT = 15 * 1000; public static final long DEFAULT_TIMEOUT_EXPECTED = 2 * 1000; |