Hi, You bet, I can always just stop the service and run using startup.bat. It was the first thing I tried. I added the -D inside the script to be sure.
I am I right to assume it points to the jar because the jar contains the needed files ? Thanks Roy -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Kiran Ayyagari Sent: Tuesday, August 03, 2010 1:14 PM To: Apache Directory Developers List Subject: Re: Startup Error for Embedded ApacheDS Created by ApacheDS archetype On Wed, Aug 4, 2010 at 1:30 AM, Benjamin, Roy <[email protected]> wrote: > 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. hmm, its been many years since I worked on a windows machine, so can't really say whats going on there, can you install tomcat from a zip archive and run from the command line and see? (for get not to set the JAVA_OPTS env variable with the above value) > > 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 ); >>> } >>> >>> } >>> > -- Kiran Ayyagari
