From 4cb8262e95fde77e6a0d2c84f1aa118e3b1ee850 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Thu, 06 Nov 2014 14:50:48 +0000
Subject: [PATCH] OPENDJ-1591 CR-5092 Switch server to SDK matching rules
---
opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVKeyComparator.java | 36 ++++++++++++++++++++++++++++++++----
1 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVKeyComparator.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVKeyComparator.java
index 6fd1ec4..74c8a16 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVKeyComparator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVKeyComparator.java
@@ -26,16 +26,17 @@
*/
package org.opends.server.backends.jeb;
-import java.io.Serializable;
import java.util.Comparator;
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DecodeException;
import org.forgerock.opendj.ldap.ResultCode;
-import org.opends.server.api.MatchingRule;
+import org.forgerock.opendj.ldap.schema.MatchingRule;
+import org.opends.server.core.DirectoryServer;
import org.opends.server.types.DirectoryException;
+import com.sleepycat.je.DatabaseComparator;
import com.sleepycat.je.DatabaseException;
/**
@@ -43,7 +44,7 @@
* made up the sort values and the entry ID of the largest entry in the sorted
* set stored in the data for the key.
*/
-public class VLVKeyComparator implements Comparator<byte[]>, Serializable
+public class VLVKeyComparator implements DatabaseComparator
{
/**
* The serial version identifier required to satisfy the compiler because this
@@ -53,7 +54,15 @@
*/
static final long serialVersionUID = 1585167927344130604L;
- private MatchingRule[] orderingRules;
+ /** Matching rules are not serializable. */
+ private transient MatchingRule[] orderingRules;
+
+ /**
+ * Only oids of matching rules are recorded for serialization. Oids allow to
+ * retrieve matching rules after deserialization, through
+ * {@code initialize(ClassLoader)} method.
+ */
+ private String[] orderingRuleOids;
private boolean[] ascending;
@@ -68,6 +77,11 @@
public VLVKeyComparator(MatchingRule[] orderingRules, boolean[] ascending)
{
this.orderingRules = orderingRules;
+ this.orderingRuleOids = new String[orderingRules.length];
+ for (int i = 0; i < orderingRules.length; i++)
+ {
+ orderingRuleOids[i] = orderingRules[i].getOID();
+ }
this.ascending = ascending;
}
@@ -331,4 +345,18 @@
// of available values and the entry ID is not available. Just return 0.
return 0;
}
+
+ /** {@inheritDoc} */
+ @Override
+ public void initialize(ClassLoader loader)
+ {
+ if (orderingRules == null)
+ {
+ orderingRules = new MatchingRule[orderingRuleOids.length];
+ for (int i = 0; i < orderingRuleOids.length; i++)
+ {
+ orderingRules[i] = DirectoryServer.getSchema().getMatchingRule(orderingRuleOids[i]);
+ }
+ }
+ }
}
--
Gitblit v1.10.0