Hi, I usually run as a service, so added:
-Dschema.resource.location=C:\Tomcat_5_5\webapps\ApacheDSXX\WEB-INF\lib\apacheds-all-1.5.8-SNAPSHOT.jar in the Java tab, Java Options. Thanks Roy -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Kiran Ayyagari Sent: Tuesday, August 03, 2010 12:11 PM To: Apache Directory Developers List Subject: Re: Startup Error for Embedded ApacheDS Created by ApacheDS archetype hmmm, are you setting the property 'schema.resource.location' with -D flag it should be something like set JAVA_OPTS="-Dschema.resource.location=c:\\path\\to\apachds-<version>-all.jar" am suspecting that this property was not set correctly before. P.S:- if you can, then hang onto #apache-directory , I will be available for some 30 more minutes. Use a web based IRC client to bypass the corporate proxy hell. Kiran Ayyagari On Wed, Aug 4, 2010 at 12:28 AM, Benjamin, Roy <[email protected]> wrote: > Thanks Kiran, > > The only difference is I'm using Tomcat 5.5.29. > > Even if I hard code the ads-data-dir property no schema files are created. > > for example: > <snip> > String workDirPath = System.getProperty( "ads-data-dir" ); > workDirPath = "C:\\tmp\\ds"; > <snip> > > If ds doesn't exist, it and schema are created, but the schema folder is > always empty. > > Thanks!! > > Roy > > > > > > -----Original Message----- > From: [email protected] [mailto:[email protected]] On Behalf Of > Kiran Ayyagari > Sent: Tuesday, August 03, 2010 9:36 AM > To: Apache Directory Developers List > Subject: Re: Startup Error for Embedded ApacheDS Created by ApacheDS archetype > > ahh, forgot to mention the versions, > > ApacheDS - 1.5.8-SNAPSHOT > Tomcat - 6.0.26 > > note that if you are using the updated maven archetype then it > automatically generates the webapp with ApacheDS version > 1.5.8-SNAPSHOT > > Kiran Ayyagari > > > > On Tue, Aug 3, 2010 at 9:59 PM, Benjamin, Roy <[email protected]> wrote: >> Hi Kiran, >> >> Can you tell me which version of ApacheDS you are using? The one I'm >> on doesn't think there is a ctor on AbstractAuthenticator that takes an >> AuthenticationLevel. >> >> Thanks! >> >> Roy >> >> -----Original Message----- >> From: [email protected] [mailto:[email protected]] On Behalf Of >> Kiran Ayyagari >> Sent: Tuesday, August 03, 2010 1:03 AM >> To: Apache Directory Developers List >> Subject: Re: Startup Error for Embedded ApacheDS Created by ApacheDS >> archetype >> >> hi Roy, >> >> more inline >> >> On Tue, Aug 3, 2010 at 6:28 AM, Benjamin, Roy <[email protected]> wrote: >>> I get an error, don't understand why this doesn't work. >>> >>> >>> >>> in stdout log: >>> >>> [17:40:29] ERROR >>> [org.apache.directory.shared.ldap.schema.loader.ldif.LdifSchemaLoader] >>> - >>> ERR_10004 Expecting to find a schema.ldif file in provided >>> baseDirectory path >>> 'C:\Tomcat_5_5\work\Catalina\localhost\ApacheDSXX\server-work\schema\ou=schema.ldif' >>> but no such file found. >>> >>> >>> >>> Question: >>> >>> 1) Is there really supposed to be a file named: 'ou=schema.ldif' ? >>> >>> 2) The path >>> C:\Tomcat_5_5\work\Catalina\localhost\ApacheDSXX\server-work\schema is >>> valid, >>> >>> so why can't the default schema be generated successfully ? >> yes, those LDIF files are required and also we generate the schema during >> startup of ApacheDS but it is unable to generate it, cause you are embedding >> the server in a container and containers have a different classloading >> mechanism which prevents generating the schema files. >> However if you followed my earlier mails it can be easily circumvented by >> setting the property -Dschema.resource.location >> >> <snip/> >>> My use case will require a custom Authenticator class, but if I try to >>> add an Authenticator >>> >>> even at various places in the code I get an exception. I've tried >>> every place, early in the >>> >>> code, late in the code, before startup(), pretty much in each place I >>> could add it. For each I >>> >>> re-check server startup. Everything is OK, except that I always get >>> the following exception: >>> >>> >>> >>> javax.servlet.ServletException: Bind requests only tunnel down into >>> partitions if there are no authenticators to handle the mechanism. >>> >>> Check to see if you have correctly configured authenticators for the server. >>> >>> ... >>> >>> root cause >>> >>> ... >>> >>> org.apache.directory.shared.ldap.exception.LdapAuthenticationNotSupportedException: >>> Bind requests only tunnel down into partitions if there are no >>> authenticators to handle the mechanism. >>> >>> Check to see if you have correctly configured authenticators for the server. >>> >>> >>> >>> I get the exception no matter where I try and add the Authenticator, >>> or what Authenticator I try to add. >>> >> >> you need to add the authenticator before startup, which I see that you are >> doing it (shown in the other mail), but I suspect that you are not >> initializing that custom authenticator properly hence the issue, here I am >> attaching a modified StartStopListener code. >> >> note that it also supports an additional property 'ads-data-dir' to specify >> the working directory >> >> HTH >> >> P.S:- appreciate your patience, and sorry if it took long time to solve >> this. been held up with other >> issues >> >> Kiran Ayyagari >> >> ============== pasting the code here (in case if attachment gets stripped ) >> ============== >> /* >> * 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 org.example; >> >> >> import java.io.File; >> import java.util.HashSet; >> import java.util.List; >> import java.util.Set; >> >> import javax.servlet.ServletContext; >> import javax.servlet.ServletContextEvent; >> import javax.servlet.ServletContextListener; >> >> 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.LdapPrincipal; >> import org.apache.directory.server.core.authn.AbstractAuthenticator; >> import org.apache.directory.server.core.authn.AuthenticationInterceptor; >> import org.apache.directory.server.core.authn.Authenticator; >> import org.apache.directory.server.core.authn.SimpleAuthenticator; >> import org.apache.directory.server.core.factory.JdbmPartitionFactory; >> import >> org.apache.directory.server.core.interceptor.context.BindOperationContext; >> import org.apache.directory.server.core.partition.Partition; >> 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.protocol.shared.transport.TcpTransport; >> import org.apache.directory.shared.ldap.constants.AuthenticationLevel; >> import org.apache.directory.shared.ldap.constants.SchemaConstants; >> 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; >> >> >> /** >> * A Servlet context listener to start and stop ApacheDS. >> * >> * @author <a href="mailto:[email protected]">Apache Directory >> * Project</a> >> */ >> public class StartStopListener implements ServletContextListener { >> >> private DirectoryService directoryService; >> >> private LdapServer ldapServer; >> >> >> /** >> * Startup ApacheDS embedded. >> */ >> public void contextInitialized( ServletContextEvent evt ) >> { >> try >> { >> ServletContext servletContext = evt.getServletContext(); >> >> directoryService = new DefaultDirectoryService(); >> directoryService.setShutdownHookEnabled( true ); >> >> ldapServer = new LdapServer(); >> ldapServer.setDirectoryService( directoryService ); >> ldapServer.setAllowAnonymousAccess( true ); >> >> // Set LDAP port to 10389 >> TcpTransport ldapTransport = new TcpTransport( 10389 ); >> ldapServer.setTransports( ldapTransport ); >> >> directoryService.setWorkingDirectory( getWorkingDir( >> servletContext ) ); >> >> initSchema(); >> initSystemPartition(); >> >> AuthenticationInterceptor authInterceptor = ( >> AuthenticationInterceptor ) directoryService >> .getInterceptor( AuthenticationInterceptor.class.getName() ); >> Set<Authenticator> authenticators = >> authInterceptor.getAuthenticators(); >> if ( authenticators == null ) >> { >> authenticators = new HashSet<Authenticator>(); >> } >> >> // add your authenticator >> authenticators.add( new MyAuthenticator() ); >> >> authInterceptor.setAuthenticators( authenticators ); >> >> directoryService.startup(); >> ldapServer.start(); >> >> // Store directoryService in context to provide it to servlets >> etc. >> servletContext.setAttribute( DirectoryService.JNDI_KEY, >> directoryService ); >> } >> catch ( Exception e ) >> { >> throw new RuntimeException( e ); >> } >> } >> >> >> /** >> * Shutdown ApacheDS embedded. >> */ >> public void contextDestroyed( ServletContextEvent evt ) >> { >> try >> { >> ldapServer.stop(); >> directoryService.shutdown(); >> } >> catch ( Exception e ) >> { >> throw new RuntimeException( e ); >> } >> } >> >> >> /** >> * Inits the schema and schema partition. >> */ >> private void initSchema() throws Exception >> { >> SchemaPartition schemaPartition = >> directoryService.getSchemaService().getSchemaPartition(); >> >> // Init the LdifPartition >> LdifPartition ldifPartition = new LdifPartition(); >> String workingDirectory = >> directoryService.getWorkingDirectory().getPath(); >> ldifPartition.setWorkingDirectory( workingDirectory + "/schema" ); >> >> // Extract the schema on disk (a brand new one) and load the >> registries >> File serverWorkDirectory = new File( workingDirectory ); >> File schemaRepository = new File( serverWorkDirectory, "schema" ); >> SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( >> serverWorkDirectory ); >> if ( !schemaRepository.exists() ) >> { >> // extract only if the schema directory is not present >> extractor.extractOrCopy(); >> } >> else >> { >> System.out.println( "schema partition directory exists, skipping >> schema extraction" ); >> } >> >> schemaPartition.setWrappedPartition( ldifPartition ); >> >> SchemaLoader loader = new LdifSchemaLoader( schemaRepository ); >> SchemaManager schemaManager = new DefaultSchemaManager( loader ); >> directoryService.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 ) >> { >> System.out.println( errors ); >> throw new RuntimeException( "there were errors while loading >> schema" ); >> } >> } >> >> >> /** >> * Inits the system partition. >> * >> * @throws Exception the exception >> */ >> 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. >> JdbmPartitionFactory partitionFactory = new JdbmPartitionFactory(); >> >> // Inject the System Partition >> Partition systemPartition = partitionFactory.createPartition( >> "system", ServerDNConstants.SYSTEM_DN, 500, >> new File( directoryService.getWorkingDirectory(), "system" ) ); >> systemPartition.setSchemaManager( directoryService.getSchemaManager() >> ); >> >> partitionFactory.addIndex( systemPartition, >> SchemaConstants.OBJECT_CLASS_AT, 100 ); >> >> directoryService.setSystemPartition( systemPartition ); >> } >> >> >> private File getWorkingDir( ServletContext servletContext ) >> { >> File workingDir = null; >> >> String workDirPath = System.getProperty( "ads-data-dir" ); >> >> if ( workDirPath == null ) >> { >> // Determine an appropriate working directory >> workingDir = ( File ) servletContext.getAttribute( >> "javax.servlet.context.tempdir" ); >> workingDir = new File( workingDir, "server-work" ); >> System.out.println( "ads-data-dir property is not set storing the >> ldap data in temporary directory " >> + workingDir.getAbsolutePath() ); >> } >> else >> { >> workingDir = new File( workDirPath ); >> System.out.println( "storing the ldap data in the directory " + >> workingDir.getAbsolutePath() ); >> } >> >> workingDir.mkdirs(); >> >> return workingDir; >> } >> } >> >> class MyAuthenticator extends AbstractAuthenticator { >> >> private SimpleAuthenticator wrappedAuth; >> >> >> public MyAuthenticator() >> { >> super( AuthenticationLevel.SIMPLE ); >> wrappedAuth = new SimpleAuthenticator(); >> } >> >> >> @Override >> protected void doInit() >> { >> try >> { >> wrappedAuth.init( getDirectoryService() ); >> } >> catch ( Exception e ) >> { >> throw new RuntimeException( e ); >> } >> } >> >> >> public LdapPrincipal authenticate( BindOperationContext bindContext ) >> throws Exception >> { >> System.out.println( "++++++++++ authenticating using a custome >> authenticator '" >> + MyAuthenticator.class.getName() + "'" ); >> return wrappedAuth.authenticate( bindContext ); >> } >> >> } >>
