You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2010/01/18 17:07:37 UTC
svn commit: r900441 - in /directory/apacheds/trunk/syncrepl: pom.xml
src/main/java/org/apache/directory/server/syncrepl/SyncReplConsumer.java
src/main/java/org/apache/directory/server/syncrepl/SyncreplRunnerUI.java
Author: kayyagari
Date: Mon Jan 18 16:07:36 2010
New Revision: 900441
URL: http://svn.apache.org/viewvc?rev=900441&view=rev
Log:
o fixed compilation issues related LdapDN and JdbmPartition
o added schemamanager reference and fixed the initialization of DireService
Modified:
directory/apacheds/trunk/syncrepl/pom.xml
directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncReplConsumer.java
directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncreplRunnerUI.java
Modified: directory/apacheds/trunk/syncrepl/pom.xml
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/syncrepl/pom.xml?rev=900441&r1=900440&r2=900441&view=diff
==============================================================================
--- directory/apacheds/trunk/syncrepl/pom.xml (original)
+++ directory/apacheds/trunk/syncrepl/pom.xml Mon Jan 18 16:07:36 2010
@@ -71,6 +71,18 @@
</dependency>
<dependency>
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>apacheds-jdbm-partition</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>apacheds-ldif-partition</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
Modified: directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncReplConsumer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncReplConsumer.java?rev=900441&r1=900440&r2=900441&view=diff
==============================================================================
--- directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncReplConsumer.java (original)
+++ directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncReplConsumer.java Mon Jan 18 16:07:36 2010
@@ -66,6 +66,7 @@
import org.apache.directory.shared.ldap.message.control.replication.SyncStateTypeEnum;
import org.apache.directory.shared.ldap.message.control.replication.SyncStateValueControl;
import org.apache.directory.shared.ldap.message.control.replication.SynchronizationModeEnum;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
import org.apache.directory.shared.ldap.util.StringTools;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -104,6 +105,9 @@
/** a reference to the directoryService */
private DirectoryService directoryService;
+ /** the schema manager */
+ private SchemaManager schemaManager;
+
/** the decoder for syncinfovalue control */
private SyncInfoValueControlDecoder decoder = new SyncInfoValueControlDecoder();
@@ -157,6 +161,8 @@
cookieFile = new File( cookieDir, String.valueOf( config.getReplicaId() ) );
session = directoryService.getAdminSession();
+
+ schemaManager = directoryservice.getSchemaManager();
}
@@ -367,9 +373,9 @@
case ADD :
if ( !session.exists( remoteEntry.getDn() ) )
{
- LOG.debug( "adding entry with dn {}", remoteEntry.getDn().getUpName() );
+ LOG.debug( "adding entry with dn {}", remoteEntry.getDn().getName() );
LOG.debug( remoteEntry.toString() );
- session.add( new DefaultServerEntry( directoryService.getRegistries(), remoteEntry ) );
+ session.add( new DefaultServerEntry( schemaManager, remoteEntry ) );
}
break;
@@ -379,7 +385,7 @@
break;
case DELETE :
- LOG.debug( "deleting entry with dn {}", remoteEntry.getDn().getUpName() );
+ LOG.debug( "deleting entry with dn {}", remoteEntry.getDn().getName() );
session.delete( remoteEntry.getDn() );
break;
}
Modified: directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncreplRunnerUI.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncreplRunnerUI.java?rev=900441&r1=900440&r2=900441&view=diff
==============================================================================
--- directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncreplRunnerUI.java (original)
+++ directory/apacheds/trunk/syncrepl/src/main/java/org/apache/directory/server/syncrepl/SyncreplRunnerUI.java Mon Jan 18 16:07:36 2010
@@ -26,6 +26,9 @@
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import javax.swing.JButton;
import javax.swing.JFrame;
@@ -35,15 +38,32 @@
import javax.swing.border.TitledBorder;
import org.apache.commons.io.FileUtils;
+import org.apache.directory.server.constants.ServerDNConstants;
import org.apache.directory.server.core.DefaultDirectoryService;
import org.apache.directory.server.core.DirectoryService;
+import org.apache.directory.server.core.entry.ServerEntry;
+import org.apache.directory.server.core.partition.Partition;
+import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex;
import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
+import org.apache.directory.server.core.partition.ldif.LdifPartition;
+import org.apache.directory.server.core.schema.SchemaPartition;
import org.apache.directory.server.ldap.LdapServer;
import org.apache.directory.server.ldap.handlers.extended.StartTlsHandler;
import org.apache.directory.server.ldap.handlers.extended.StoredProcedureExtendedOperationHandler;
import org.apache.directory.server.protocol.shared.transport.TcpTransport;
+import org.apache.directory.server.xdbm.Index;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.filter.SearchScope;
+import org.apache.directory.shared.ldap.ldif.LdifEntry;
+import org.apache.directory.shared.ldap.ldif.LdifReader;
import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
+import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
+import org.apache.directory.shared.ldap.schema.ldif.extractor.impl.DefaultSchemaLdifExtractor;
+import org.apache.directory.shared.ldap.schema.loader.ldif.LdifSchemaLoader;
+import org.apache.directory.shared.ldap.schema.manager.impl.DefaultSchemaManager;
+import org.apache.directory.shared.ldap.schema.registries.SchemaLoader;
+import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.util.AvailablePortFinder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -83,7 +103,7 @@
private String provServerHost = "localhost";
private int provServerPort = 389;
- private String provServerBindDn = "cn=admin,dc=nodomain";
+ private String provServerBindDn = "cn=Manager,dc=my-domain,dc=com";
private String provServerPwd = "secret";
private boolean connected;
@@ -94,9 +114,9 @@
config = new SyncreplConfiguration();
config.setProviderHost( "localhost" );
config.setPort( 389 );
- config.setBindDn( "cn=admin,dc=nodomain" );
+ config.setBindDn( "uid=admin,ou=system" );
config.setCredentials( "secret" );
- config.setBaseDn( "dc=test,dc=nodomain" );
+ config.setBaseDn( "dc=my-domain,dc=com" );
config.setFilter( "(objectclass=*)" );
config.setAttributes( "*,+" );
config.setSearchScope( SearchScope.SUBTREE.getJndiScope() );
@@ -116,7 +136,7 @@
workDir.mkdirs();
}
- dirService = startEmbeddedServer( workDir );
+ startEmbeddedServer( workDir );
agent.init( dirService );
agent.bind();
@@ -181,41 +201,51 @@
}
- private DirectoryService startEmbeddedServer( File workDir )
+ private void startEmbeddedServer( File workDir )
{
try
{
- DefaultDirectoryService dirService = new DefaultDirectoryService();
+ dirService = new DefaultDirectoryService();
dirService.setShutdownHookEnabled( false );
dirService.setWorkingDirectory( workDir );
int consumerPort = AvailablePortFinder.getNextAvailable( 1024 );
+
+ initSchema();
+ initSystemPartition();
+
ldapServer = new LdapServer();
ldapServer.setTransports( new TcpTransport( consumerPort ) );
ldapServer.setDirectoryService( dirService );
LdapDN suffix = new LdapDN( config.getBaseDn() );
JdbmPartition partition = new JdbmPartition();
- partition.setSuffix( suffix.getUpName() );
+ partition.setSuffix( suffix.getName() );
partition.setId( "syncrepl" );
+ partition.setPartitionDir( new File( workDir, partition.getId() ) );
partition.setSyncOnWrite( true );
- partition.init( dirService );
+ partition.setSchemaManager( dirService.getSchemaManager() );
+ partition.initialize();
dirService.addPartition( partition );
+ String ldif = "dn: " + config.getBaseDn() + "\n" +
+ "objectClass: top \n" +
+ "objectClass: domain \n" +
+ "dc: my-domain\n";
+ LdifReader reader = new LdifReader();
+ List<LdifEntry> testEntries = reader.parseLdif( ldif );
+ dirService.setTestEntries( testEntries );
dirService.startup();
ldapServer.addExtendedOperationHandler( new StartTlsHandler() );
ldapServer.addExtendedOperationHandler( new StoredProcedureExtendedOperationHandler() );
ldapServer.start();
- return dirService;
}
catch ( Exception e )
{
e.printStackTrace();
}
-
- return null;
}
@@ -245,7 +275,7 @@
entryInjector.enable( false );
entryInjector.setBorder( new TitledBorder( "Entry Injector" ) );
entryInjector.setConfig( config );
-
+
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle( "Syncrepl consumer UI" );
@@ -314,6 +344,65 @@
}
+ private void initSchema() throws Exception
+ {
+ SchemaPartition schemaPartition = dirService.getSchemaService().getSchemaPartition();
+
+ // Init the LdifPartition
+ LdifPartition ldifPartition = new LdifPartition();
+ String workingDirectory = dirService.getWorkingDirectory().getPath();
+ ldifPartition.setWorkingDirectory( workingDirectory + "/schema" );
+
+ // Extract the schema on disk (a brand new one) and load the registries
+ File schemaRepository = new File( workingDirectory, "schema" );
+ SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( new File( workingDirectory ) );
+ extractor.extractOrCopy( true );
+
+ schemaPartition.setWrappedPartition( ldifPartition );
+
+ SchemaLoader loader = new LdifSchemaLoader( schemaRepository );
+ SchemaManager schemaManager = new DefaultSchemaManager( loader );
+ dirService.setSchemaManager( schemaManager );
+
+ // We have to load the schema now, otherwise we won't be able
+ // to initialize the Partitions, as we won't be able to parse
+ // and normalize their suffix DN
+ schemaManager.loadAllEnabled();
+
+ schemaPartition.setSchemaManager( schemaManager );
+
+ List<Throwable> errors = schemaManager.getErrors();
+
+ if ( errors.size() != 0 )
+ {
+ throw new Exception( "Schema load failed : " + ExceptionUtils.printErrors( errors ) );
+ }
+ }
+
+
+ private void initSystemPartition() throws Exception
+ {
+ // change the working directory to something that is unique
+ // on the system and somewhere either under target directory
+ // or somewhere in a temp area of the machine.
+
+ // Inject the System Partition
+ Partition systemPartition = new JdbmPartition();
+ systemPartition.setId( "system" );
+ ( ( JdbmPartition ) systemPartition ).setCacheSize( 500 );
+ systemPartition.setSuffix( ServerDNConstants.SYSTEM_DN );
+ systemPartition.setSchemaManager( dirService.getSchemaManager() );
+ ( ( JdbmPartition ) systemPartition ).setPartitionDir( new File( dirService.getWorkingDirectory(), "system" ) );
+
+ // Add objectClass attribute for the system partition
+ Set<Index<?, ServerEntry>> indexedAttrs = new HashSet<Index<?, ServerEntry>>();
+ indexedAttrs.add( new JdbmIndex<Object, ServerEntry>( SchemaConstants.OBJECT_CLASS_AT ) );
+ ( ( JdbmPartition ) systemPartition ).setIndexedAttributes( indexedAttrs );
+
+ dirService.setSystemPartition( systemPartition );
+ }
+
+
public static void main( String[] args )
{
SyncreplRunnerUI runnerUi = new SyncreplRunnerUI();