From 48e73e27e5a6b254471fabeefa3a197dd071c1b8 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Mon, 02 Oct 2006 16:32:07 +0000
Subject: [PATCH] Perform significant refactoring in the core and plugin code in order to help make it easier for external developers to extend OpenDS. In particular, this is a big step towards eliminating the need for developers to reference anything in the core package, and it's also a signficant simplification to the plugin API because it helps expose which operation methods are safe to call at various points in the plugin processing.
---
opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java | 100 ++++++++++++++++++++------------------------------
1 files changed, 40 insertions(+), 60 deletions(-)
diff --git a/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java b/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
index 9c35138..33e3435 100644
--- a/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
+++ b/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
@@ -42,9 +42,7 @@
import org.opends.server.api.plugin.PreOperationPluginResult;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
-import org.opends.server.core.AddOperation;
import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.InitializationException;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
@@ -52,6 +50,7 @@
import org.opends.server.types.AttributeValue;
import org.opends.server.types.Entry;
import org.opends.server.types.LDIFImportConfig;
+import org.opends.server.types.operation.PreOperationAddOperation;
import static org.opends.server.loggers.Debug.*;
import static org.opends.server.messages.MessageHandler.*;
@@ -62,9 +61,14 @@
/**
* This class implements a Directory Server plugin that will add the entryUUID
- * attribute to an entry whenever it is added or imported.
+ * attribute to an entry whenever it is added or imported as per RFC 4530. For
+ * entries added over LDAP, the entryUUID will be based on a semi-random UUID
+ * (which is still guaranteed to be unique). For entries imported from LDIF,
+ * the UUID will be constructed from the entry DN using a repeatable algorithm.
+ * This will ensure that LDIF files imported in parallel across multiple systems
+ * will have identical entryUUID values.
*/
-public class EntryUUIDPlugin
+public final class EntryUUIDPlugin
extends DirectoryServerPlugin
{
/**
@@ -83,7 +87,7 @@
// The attribute type for the "entryUUID" attribute.
- private AttributeType entryUUIDType;
+ private final AttributeType entryUUIDType;
@@ -98,33 +102,33 @@
super();
assert debugConstructor(CLASS_NAME);
+
+
+ // Get the entryUUID attribute type. This needs to be done in the
+ // constructor in order to make the associated variables "final".
+ AttributeType at = DirectoryServer.getAttributeType(ENTRYUUID);
+ if (at == null)
+ {
+ at = new AttributeType(ENTRYUUID, Collections.singleton(ENTRYUUID),
+ ENTRYUUID, null, null,
+ DirectoryServer.getDefaultAttributeSyntax(),
+ AttributeUsage.DIRECTORY_OPERATION, false, true,
+ false, true);
+ }
+
+ entryUUIDType = at;
}
/**
- * Performs any initialization necessary for this plugin. This will be called
- * as soon as the plugin has been loaded and before it is registered with the
- * server.
- *
- * @param directoryServer The reference to the Directory Server instance in
- * which the plugin will be running.
- * @param pluginTypes The set of plugin types that indicate the ways in
- * which this plugin will be invoked.
- * @param configEntry The entry containing the configuration information
- * for this plugin.
- *
- * @throws ConfigException If the provided entry does not contain a valid
- * configuration for this plugin.
- *
- * @throws InitializationException If a problem occurs while initializing
- * the plugin that is not related to the
- * server configuration.
+ * {@inheritDoc}
*/
- public void initializePlugin(DirectoryServer directoryServer,
- Set<PluginType> pluginTypes,
- ConfigEntry configEntry)
- throws ConfigException, InitializationException
+ @Override()
+ public final void initializePlugin(DirectoryServer directoryServer,
+ Set<PluginType> pluginTypes,
+ ConfigEntry configEntry)
+ throws ConfigException
{
assert debugEnter(CLASS_NAME, "initializePlugin",
String.valueOf(directoryServer),
@@ -149,37 +153,16 @@
throw new ConfigException(msgID, message);
}
}
-
-
- // Get the entryUUID attribute type.
- entryUUIDType = DirectoryServer.getAttributeType(ENTRYUUID);
- if (entryUUIDType == null)
- {
- entryUUIDType = new AttributeType(ENTRYUUID,
- Collections.singleton(ENTRYUUID),
- ENTRYUUID,
- null,
- null,
- DirectoryServer.getDefaultAttributeSyntax(),
- AttributeUsage.DIRECTORY_OPERATION,
- false, true, false, true);
- }
}
/**
- * Performs any necessary processing that should be done during an LDIF import
- * operation immediately after reading an entry and confirming that it should
- * be imported based on the provided configuration.
- *
- * @param importConfig The configuration used for the LDIF import.
- * @param entry The entry that has been read to the LDIF file.
- *
- * @return The result of the plugin processing.
+ * {@inheritDoc}
*/
- public LDIFPluginResult doLDIFImport(LDIFImportConfig importConfig,
- Entry entry)
+ @Override()
+ public final LDIFPluginResult doLDIFImport(LDIFImportConfig importConfig,
+ Entry entry)
{
assert debugEnter(CLASS_NAME, "doLDIFImport",
String.valueOf(importConfig), String.valueOf(entry));
@@ -217,14 +200,11 @@
/**
- * Performs any necessary processing that should be done just before the
- * Directory Server performs the core processing for an add operation.
- *
- * @param addOperation The add operation to be processed.
- *
- * @return Information about the result of the plugin processing.
+ * {@inheritDoc}
*/
- public PreOperationPluginResult doPreOperation(AddOperation addOperation)
+ @Override()
+ public final PreOperationPluginResult
+ doPreOperation(PreOperationAddOperation addOperation)
{
assert debugEnter(CLASS_NAME, "doPreOperation",
String.valueOf(addOperation));
@@ -252,10 +232,10 @@
uuidList = new ArrayList<Attribute>(1);
Attribute uuidAttr = new Attribute(entryUUIDType, "entryUUID", values);
uuidList.add(uuidAttr);
- operationalAttributes.put(entryUUIDType, uuidList);
- // We shouldn't ever need to return a non-success result.
+ // Add the attribute to the entry and return.
+ addOperation.setAttribute(entryUUIDType, uuidList);
return new PreOperationPluginResult();
}
}
--
Gitblit v1.10.0