diff --git a/testcase-archetype/apacheds-testcase-archetype.sh b/testcase-archetype/apacheds-testcase-archetype.sh
index 1f2f91f..5488206 100755
--- a/testcase-archetype/apacheds-testcase-archetype.sh
+++ b/testcase-archetype/apacheds-testcase-archetype.sh
@@ -1,4 +1,4 @@
 #!/bin/sh
 
-mvn archetype:create -DarchetypeGroupId=org.apache.directory.server -DarchetypeArtifactId=apacheds-testcase-archetype -DarchetypeVersion=1.0.2 -DgroupId=$1 -DartifactId=$2
+mvn archetype:generate -DarchetypeGroupId=org.apache.directory.server -DarchetypeArtifactId=apacheds-testcase-archetype -DarchetypeVersion=1.5.5-SNAPSHOT -DgroupId=$1 -DartifactId=$2 -Dversion=1.0-SNAPSHOT
 
diff --git a/testcase-archetype/pom.xml b/testcase-archetype/pom.xml
index 4c61c30..bd73e7d 100644
--- a/testcase-archetype/pom.xml
+++ b/testcase-archetype/pom.xml
@@ -1,12 +1,13 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
     <groupId>org.apache.directory.server</groupId>
-    <artifactId>build</artifactId>
-    <version>1.0.2</version>
+    <artifactId>apacheds-parent</artifactId>
+    <version>1.5.5</version>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <artifactId>apacheds-testcase-archetype</artifactId>
-  <packaging>maven-plugin</packaging>
+  <packaging>jar</packaging>
   <name>ApacheDS Testcase Archetype</name>
+  <version>1.5.5-SNAPSHOT</version>
 </project>
diff --git a/testcase-archetype/src/main/resources/META-INF/archetype.xml b/testcase-archetype/src/main/resources/META-INF/archetype.xml
index fe5b0a3..2be244b 100644
--- a/testcase-archetype/src/main/resources/META-INF/archetype.xml
+++ b/testcase-archetype/src/main/resources/META-INF/archetype.xml
@@ -4,9 +4,13 @@
     <source>src/main/java/Dummy.java</source>
   </sources>
   <testSources>
-    <source>src/test/java/ApacheDSITest.java</source>
+    <source>src/test/java/AdvancedTest.java</source>
+    <source>src/test/java/AdvancedTestApacheDsFactory.java</source>
+    <source>src/test/java/MinimalTest.java</source>
   </testSources>
   <resources>
     <resource>src/test/resources/log4j.properties</resource>
+    <resource>src/test/resources/sevenSeas_data.ldif</resource>
+    <resource>src/test/resources/sevenSeas_schema.ldif</resource>
   </resources>
 </archetype>
diff --git a/testcase-archetype/src/main/resources/archetype-resources/pom.xml b/testcase-archetype/src/main/resources/archetype-resources/pom.xml
index b580da0..9fc640f 100644
--- a/testcase-archetype/src/main/resources/archetype-resources/pom.xml
+++ b/testcase-archetype/src/main/resources/archetype-resources/pom.xml
@@ -5,27 +5,39 @@
   <artifactId>${artifactId}</artifactId>
   <packaging>jar</packaging>
   <version>${version}</version>
-  <name>Schema Project</name>
+  <name>Test Project</name>
   <url>http://directory.apache.org/</url>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
   <dependencies>
     <dependency>
       <groupId>org.apache.directory.server</groupId>
-      <artifactId>apacheds-server-unit</artifactId>
-      <version>1.0.2</version>
+      <artifactId>apacheds-server-integ</artifactId>
+      <version>1.5.5</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>3.8.1</version>
+      <version>4.5</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>nlog4j</artifactId>
-      <version>1.2.25</version>
-      <scope>test</scope>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>1.3.1</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/main/java/Dummy.java b/testcase-archetype/src/main/resources/archetype-resources/src/main/java/Dummy.java
index 92b6baa..4b4d5f1 100644
--- a/testcase-archetype/src/main/resources/archetype-resources/src/main/java/Dummy.java
+++ b/testcase-archetype/src/main/resources/archetype-resources/src/main/java/Dummy.java
@@ -21,8 +21,8 @@
 
 
 /**
- * This class does nothing.  Makes sure maven builds and the archetype works.
+ * This class does nothing. Makes sure maven builds and the archetype works.
  */
-public class Dummy 
+public class Dummy
 {
 }
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/test/java/AdvancedTest.java b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/AdvancedTest.java
new file mode 100644
index 0000000..4db547a
--- /dev/null
+++ b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/AdvancedTest.java
@@ -0,0 +1,144 @@
+/*
+ *  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 ${groupId};
+
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+import static org.apache.directory.server.integ.ServerIntegrationUtils.getWiredContext;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.naming.Context;
+import javax.naming.directory.Attributes;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+
+import org.apache.directory.server.constants.ServerDNConstants;
+import org.apache.directory.server.core.integ.Level;
+import org.apache.directory.server.core.integ.annotations.ApplyLdifFiles;
+import org.apache.directory.server.core.integ.annotations.CleanupLevel;
+import org.apache.directory.server.core.integ.annotations.Factory;
+import org.apache.directory.server.integ.SiRunner;
+import org.apache.directory.server.ldap.LdapServer;
+import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
+import org.apache.directory.shared.ldap.entry.client.ClientModification;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.util.DummySSLSocketFactory;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+/**
+ * This is an advanced test template.
+ * It shows how to configure the embedded ApacheDS:
+ * <ul>
+ * <li>Create a partition 'o=sevenSeas'</li>
+ * <li>Enable LDAP and LDAPS protocol</li>
+ * <li>Enable the 'nis' schema</li>
+ * <li>Inject a new custom schema from an LDIF file</li>
+ * <li>Inject test data from an LDIF file</li>
+ * <li>Restart the embedded ApacheDS after each test method</li>
+ * <li></li>
+ * </ul>  
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@RunWith(SiRunner.class)
+@CleanupLevel(Level.METHOD)
+@Factory(AdvancedTestApacheDsFactory.class)
+@ApplyLdifFiles(
+    { "/sevenSeas_schema.ldif", "/sevenSeas_data.ldif" })
+public class AdvancedTest
+{
+    // the LdapServer is injected on test startup
+    public static LdapServer ldapServer;
+
+
+    @Before
+    public void enableNisSchema() throws Exception
+    {
+        List<Modification> mod = new ArrayList<Modification>();
+        mod.add( new ClientModification( ModificationOperation.REMOVE_ATTRIBUTE, new DefaultClientAttribute(
+            "m-disabled" ) ) );
+        ldapServer.getDirectoryService().getAdminSession().modify( new LdapDN( "cn=nis,ou=schema" ), mod );
+    }
+
+
+    /**
+     * Test that partition 'o=sevenSeas' exists.
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testCustomPartitionExists() throws Exception
+    {
+        assertTrue( ldapServer.getDirectoryService().getAdminSession().exists( new LdapDN( "o=sevenSeas" ) ) );
+    }
+
+
+    /**
+     * Test that LDAPS works. Use JNDI as the request must go over the wire.
+     * Use a dummy SSL factory that accepts the self-signed server certificate.
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testLdaps() throws Exception
+    {
+        Hashtable<String, String> env = new Hashtable<String, String>();
+        env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
+        env.put( Context.PROVIDER_URL, "ldaps://localhost:" + ldapServer.getPortSSL() );
+        env.put( Context.SECURITY_PRINCIPAL, ServerDNConstants.ADMIN_SYSTEM_DN );
+        env.put( Context.SECURITY_CREDENTIALS, "secret" );
+        env.put( Context.SECURITY_AUTHENTICATION, "simple" );
+        env.put( "java.naming.ldap.factory.socket", DummySSLSocketFactory.class.getName() );
+        LdapContext ctx = new InitialLdapContext( env, null );
+
+        assertNotNull( ctx.lookup( "ou=users,ou=system" ) );
+    }
+
+
+    /**
+     * Test that the custom schema and the data was injected.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCustomSchemaAndData() throws Exception
+    {
+        // use the helper method to create a JNDI context from the LdapServer
+        LdapContext ctx = getWiredContext( ldapServer );
+
+        Attributes attributes = ctx.getAttributes( "cn=HMS Victory,ou=ships,o=sevenSeas" );
+        assertNotNull( attributes );
+        assertNotNull( attributes.get( "objectClass" ) );
+        assertTrue( attributes.get( "objectClass" ).contains( "ship" ) );
+        assertNotNull( attributes.get( "numberOfGuns" ) );
+        assertEquals( "104", attributes.get( "numberOfGuns" ).get() );
+    }
+
+}
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/test/java/AdvancedTestApacheDsFactory.java b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/AdvancedTestApacheDsFactory.java
new file mode 100644
index 0000000..c539955
--- /dev/null
+++ b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/AdvancedTestApacheDsFactory.java
@@ -0,0 +1,82 @@
+/*
+ *  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 ${groupId};
+
+
+import java.util.HashSet;
+import java.util.Set;
+
+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.integ.IntegrationUtils;
+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.integ.LdapServerFactory;
+import org.apache.directory.server.ldap.LdapServer;
+import org.apache.directory.server.protocol.shared.transport.TcpTransport;
+import org.apache.directory.server.xdbm.Index;
+import org.apache.mina.util.AvailablePortFinder;
+
+
+/**
+ * A LdapServerFactory for AdvancedTest.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AdvancedTestApacheDsFactory implements LdapServerFactory
+{
+    public LdapServer newInstance() throws Exception
+    {
+        // default configuration
+        DirectoryService service = new DefaultDirectoryService();
+        IntegrationUtils.doDelete( service.getWorkingDirectory() );
+        service.getChangeLog().setEnabled( true );
+        service.setAllowAnonymousAccess( true );
+        service.setShutdownHookEnabled( false );
+
+        // create a new partition "o=sevenSeas" with some indices
+        JdbmPartition example = new JdbmPartition();
+        example.setCacheSize( 500 );
+        example.setSuffix( "o=sevenSeas" );
+        example.setId( "sevenSeas" );
+        Set<Index<?, ServerEntry>> indexedAttrs = new HashSet<Index<?, ServerEntry>>();
+        indexedAttrs.add( new JdbmIndex<String, ServerEntry>( "cn" ) );
+        indexedAttrs.add( new JdbmIndex<String, ServerEntry>( "ou" ) );
+        indexedAttrs.add( new JdbmIndex<String, ServerEntry>( "dc" ) );
+        indexedAttrs.add( new JdbmIndex<String, ServerEntry>( "objectClass" ) );
+        example.setIndexedAttributes( indexedAttrs );
+        service.addPartition( example );
+
+        // create the LDAP Server, create a transport for LDAP and LDAPS
+        LdapServer ldapServer = new LdapServer();
+        ldapServer.setDirectoryService( service );
+        int ldapPort = AvailablePortFinder.getNextAvailable( 1024 );
+        TcpTransport ldapTransport = new TcpTransport( ldapPort );
+        int ldapsPort = AvailablePortFinder.getNextAvailable( ldapPort + 1 );
+        TcpTransport ldapsTransport = new TcpTransport( ldapsPort );
+        ldapsTransport.setEnableSSL( true );
+        ldapServer.setTransports( ldapTransport, ldapsTransport );
+        ldapServer.setAllowAnonymousAccess( true );
+
+        return ldapServer;
+    }
+
+}
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/test/java/ApacheDSITest.java b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/ApacheDSITest.java
deleted file mode 100644
index 12ac457..0000000
--- a/testcase-archetype/src/main/resources/archetype-resources/src/test/java/ApacheDSITest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- *  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 ${groupId};
-
-
-import java.util.Hashtable;
-
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-
-import org.apache.directory.server.unit.AbstractServerTest;
-
-
-
-/**
- * An example ApacheDS integration test.  
- * 
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev$
- */
-public class ApacheDSITest extends AbstractServerTest
-{
-    private DirContext ctx = null;
-
-
-    /**
-     * Get a connection to the embedded server using the SUN JNDI LDAP provider
-     * over the wire.
-     */
-    public void setUp() throws Exception
-    {
-        // Starts up the embedded ApacheDS instance.
-        super.setUp();
-
-        // -------------------------------------------------------------------
-        // Get a connection (JNDI context) to the LDAP server       
-        // -------------------------------------------------------------------
-
-        Hashtable env = new Hashtable();
-        env.put( "java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory" );
-        env.put( "java.naming.provider.url", "ldap://localhost:" + port + "/ou=system" );
-        env.put( "java.naming.security.principal", "uid=admin,ou=system" );
-        env.put( "java.naming.security.credentials", "secret" );
-        env.put( "java.naming.security.authentication", "simple" );
-        ctx = new InitialDirContext( env );
-    }
-
-
-    /**
-     * Closes our context before shuting down the server.
-     */
-    public void tearDown() throws Exception
-    {
-        ctx.close();
-        super.tearDown();
-    }
-
-
-    /**
-     * An example test reads and assert an attribute value in the ou=system
-     * context.
-     */
-    public void testExample() throws NamingException
-    {
-        Attributes system = ctx.getAttributes( "" );
-        assertNotNull( system );
-        assertEquals( "system", system.get( "ou" ).get() );
-    }
-}
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/test/java/MinimalTest.java b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/MinimalTest.java
new file mode 100644
index 0000000..6232e2c
--- /dev/null
+++ b/testcase-archetype/src/main/resources/archetype-resources/src/test/java/MinimalTest.java
@@ -0,0 +1,219 @@
+/*
+ *  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 ${groupId};
+
+
+import static junit.framework.Assert.assertNotNull;
+import static org.apache.directory.server.integ.ServerIntegrationUtils.getWiredContext;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.ModificationItem;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.LdapContext;
+
+import org.apache.directory.server.core.CoreSession;
+import org.apache.directory.server.core.entry.DefaultServerEntry;
+import org.apache.directory.server.core.entry.ServerEntry;
+import org.apache.directory.server.core.filtering.EntryFilteringCursor;
+import org.apache.directory.server.integ.SiRunner;
+import org.apache.directory.server.ldap.LdapServer;
+import org.apache.directory.server.schema.registries.Registries;
+import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
+import org.apache.directory.shared.ldap.entry.client.ClientModification;
+import org.apache.directory.shared.ldap.entry.client.ClientStringValue;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
+import org.apache.directory.shared.ldap.filter.EqualityNode;
+import org.apache.directory.shared.ldap.filter.SearchScope;
+import org.apache.directory.shared.ldap.message.AliasDerefMode;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+/**
+ * This is a minimal test template.
+ * It just starts up an embedded ApacheDS with default configuration:
+ * <ul>
+ * <li>Only system partion 'ou=system' and schema partition 'ou=schema' exist.</li>
+ * <li>Only LDAP protocol (no LDAPS) is enabled, listening on port 1024.</li>
+ * <li>The directory data can also be accessed directly via the core API.</li>
+ * <li></li>
+ * </ul>
+ * 
+ * The two tests methods demonstrate how to use the core API and JNDI 
+ * to access the embedded ApacheDS within the JVM or over the wire.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@RunWith(SiRunner.class)
+public class MinimalTest
+{
+    // the LdapServer is injected on test startup
+    public static LdapServer ldapServer;
+
+
+    /**
+     * Demonstrates how to use the core API.
+     * Note that those requests don't go over the wire but access
+     * the ApacheDS within the same JVM.
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void demonstrateCoreAPI() throws Exception
+    {
+        // get the admin session which has unlimited access rights to the directory
+        CoreSession session = ldapServer.getDirectoryService().getAdminSession();
+        Registries registries = ldapServer.getDirectoryService().getRegistries();
+
+        // this entry should exist
+        assertTrue( session.exists( new LdapDN( "ou=users,ou=system" ) ) );
+
+        // this entry should not exist
+        assertFalse( session.exists( new LdapDN( "uid=foo.bar,ou=users,ou=system" ) ) );
+
+        // create an entry
+        ServerEntry newEntry = new DefaultServerEntry( registries, new LdapDN( "uid=foo.bar,ou=users,ou=system" ) );
+        newEntry.add( "objectClass", "top", "person", "organizationalPerson", "inetOrgPerson" );
+        newEntry.add( "uid", "foo.bar" );
+        newEntry.add( "cn", "Foo Bar" );
+        newEntry.add( "sn", "Bar" );
+        newEntry.add( "givenName", "Foo" );
+        session.add( newEntry );
+
+        // lookup entry
+        ServerEntry entry = session.lookup( new LdapDN( "uid=foo.bar,ou=users,ou=system" ) );
+        assertTrue( entry.hasObjectClass( "inetOrgPerson" ) );
+        assertNotNull( entry.get( "cn" ) );
+        assertEquals( "Foo Bar", entry.get( "cn" ).get().getString() );
+
+        // modify entry
+        List<Modification> modifications = new ArrayList<Modification>();
+        modifications.add( new ClientModification( ModificationOperation.ADD_ATTRIBUTE, new DefaultClientAttribute(
+            "mail", "bar@example.com", "foo.bar@example.com" ) ) );
+        modifications.add( new ClientModification( ModificationOperation.REMOVE_ATTRIBUTE, new DefaultClientAttribute(
+            "givenName" ) ) );
+        modifications.add( new ClientModification( ModificationOperation.REPLACE_ATTRIBUTE, new DefaultClientAttribute(
+            "description", "This is Foo Bar." ) ) );
+        session.modify( new LdapDN( "uid=foo.bar,ou=users,ou=system" ), modifications );
+
+        // search
+        EntryFilteringCursor cursor = session.search( new LdapDN( "ou=users,ou=system" ), SearchScope.ONELEVEL,
+            new EqualityNode<String>( "uid", new ClientStringValue( "foo.bar" ) ), AliasDerefMode.DEREF_ALWAYS, null );
+        cursor.beforeFirst();
+        assertTrue( cursor.next() );
+        assertNotNull( cursor.get() );
+        assertEquals( "uid=foo.bar,ou=users,ou=system", cursor.get().getDn().getUpName() );
+        assertFalse( cursor.next() );
+        cursor.close();
+
+        // delete entry
+        session.delete( new LdapDN( "uid=foo.bar,ou=users,ou=system" ) );
+    }
+
+
+    /**
+     * Demonstrates how to use the JNDI API to access the embedded
+     * ApacheDS over the wire.
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void demonstrateJndiAPI() throws Exception
+    {
+        // use the helper method to create a JNDI context from the LdapServer
+        LdapContext ctx = getWiredContext( ldapServer );
+
+        // this entry should exist
+        assertNotNull( ctx.lookup( "ou=users,ou=system" ) );
+
+        // this entry should not exist
+        try
+        {
+            ctx.lookup( "uid=foo.bar,ou=users,ou=system" );
+            fail( "uid=foo.bar,ou=users,ou=system doesn't exist." );
+        }
+        catch ( NameNotFoundException e )
+        {
+            // expected
+        }
+
+        // create an entry
+        Attributes newAttributes = new BasicAttributes();
+        Attribute newOcAttribute = new BasicAttribute( "objectClass" );
+        newOcAttribute.add( "top" );
+        newOcAttribute.add( "person" );
+        newOcAttribute.add( "organizationalPerson" );
+        newOcAttribute.add( "inetOrgPerson" );
+        newAttributes.put( newOcAttribute );
+        newAttributes.put( "uid", "foo.bar" );
+        newAttributes.put( "cn", "Foo Bar" );
+        newAttributes.put( "sn", "Bar" );
+        newAttributes.put( "givenName", "Foo" );
+        ctx.bind( "uid=foo.bar,ou=users,ou=system", null, newAttributes );
+
+        // lookup entry
+        Attributes attributes = ctx.getAttributes( "uid=foo.bar,ou=users,ou=system" );
+        assertNotNull( attributes.get( "objectClass" ) );
+        assertTrue( attributes.get( "objectClass" ).contains( "inetOrgPerson" ) );
+        assertNotNull( attributes.get( "cn" ) );
+        assertEquals( "Foo Bar", attributes.get( "cn" ).get() );
+
+        // modify entry
+        ModificationItem[] modificatons = new ModificationItem[3];
+        modificatons[0] = new ModificationItem( DirContext.ADD_ATTRIBUTE, new BasicAttribute( "mail",
+            "foo.bar@example.com" ) );
+        modificatons[1] = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( "givenName" ) );
+        modificatons[2] = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, new BasicAttribute( "description",
+            "This is Foo Bar." ) );
+        ctx.modifyAttributes( "uid=foo.bar,ou=users,ou=system", modificatons );
+
+        // search
+        SearchControls searchControls = new SearchControls();
+        NamingEnumeration<SearchResult> results = ctx.search( "ou=users,ou=system", "(uid=foo.bar)", searchControls );
+        assertTrue( results.hasMore() );
+        SearchResult next = results.next();
+        assertNotNull( next );
+        assertEquals( "uid=foo.bar,ou=users,ou=system", next.getNameInNamespace() );
+        assertFalse( results.hasMore() );
+        results.close();
+
+        // delete entry
+        ctx.unbind( "uid=foo.bar,ou=users,ou=system" );
+
+        ctx.close();
+    }
+
+}
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/test/resources/sevenSeas_data.ldif b/testcase-archetype/src/main/resources/archetype-resources/src/test/resources/sevenSeas_data.ldif
new file mode 100644
index 0000000..945c74b
--- /dev/null
+++ b/testcase-archetype/src/main/resources/archetype-resources/src/test/resources/sevenSeas_data.ldif
@@ -0,0 +1,236 @@
+# Sample LDIF data for the ApacheDS v1.0 Basic User's Guide
+#
+# Some sailors and their ships
+# userpassword for all persons is "pass"
+#
+version: 1
+
+dn: o=sevenSeas
+objectClass: organization
+objectClass: top
+o: sevenSeas
+
+dn: ou=people,o=sevenSeas
+objectClass: organizationalUnit
+objectClass: top
+description: Contains entries which describe persons (seamen)
+ou: people
+
+dn: ou=groups,o=sevenSeas
+objectClass: organizationalUnit
+objectClass: top
+description: Contains entries which describe groups (crews, for instance)
+ou: groups
+
+dn: ou=crews,ou=groups,o=sevenSeas
+objectClass: organizationalUnit
+objectClass: top
+description: Contains entries which describe ship crews
+ou: crews
+
+dn: ou=ranks,ou=groups,o=sevenSeas
+objectClass: organizationalUnit
+objectClass: top
+description: Contains entries which describe naval ranks (e.g. captain)
+ou: ranks
+
+dn: ou=ships,o=sevenSeas
+objectClass: organizationalUnit
+objectClass: top
+description: Contains entries which describe ships
+ou: ships
+
+# HMS Lydia Crew
+# --------------
+
+dn: cn=Horatio Hornblower,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Horatio Hornblower
+description: Capt. Horatio Hornblower, R.N
+givenName: Horatio
+sn: Hornblower
+uid: hhornblo
+mail: hhornblo@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=William Bush,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: William Bush
+description: Lt. William Bush
+givenName: William
+manager: cn=Horatio Hornblower,ou=people,o=sevenSeas
+sn: Bush
+uid: wbush
+mail: wbush@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=Thomas Quist,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Thomas Quist
+description: Seaman Quist
+givenName: Thomas
+manager: cn=Horatio Hornblower,ou=people,o=sevenSeas
+sn: Quist
+uid: tquist
+mail: tquist@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=Moultrie Crystal,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Moultrie Crystal
+description: Lt. Crystal
+givenName: Moultrie
+manager: cn=Horatio Hornblower,ou=people,o=sevenSeas
+sn: Crystal
+uid: mchrysta
+mail: mchrysta@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=HMS Lydia,ou=crews,ou=groups,o=sevenSeas
+objectClass: groupOfUniqueNames
+objectClass: top
+cn: HMS Lydia
+uniqueMember: cn=Horatio Hornblower,ou=people,o=sevenSeas
+uniqueMember: cn=William Bush,ou=people,o=sevenSeas
+uniqueMember: cn=Thomas Quist,ou=people,o=sevenSeas
+uniqueMember: cn=Moultrie Crystal,ou=people,o=sevenSeas
+
+# HMS Victory Crew
+# ----------------
+
+dn: cn=Horatio Nelson,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Horatio Nelson
+description: Lord Horatio Nelson
+givenName: Horatio
+sn: Nelson
+uid: hnelson
+mail: hnelson@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=Thomas Masterman Hardy,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Thomas Masterman Hardy
+description: Sir Thomas Masterman Hardy
+givenName: Thomas
+manager: cn=Horatio Nelson,ou=people,o=sevenSeas
+sn: Hardy
+uid: thardy
+mail: thardy@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=Cornelius Buckley,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Cornelius Buckley
+description: LM Cornelius Buckley
+givenName: Cornelius
+manager: cn=Horatio Nelson,ou=people,o=sevenSeas
+sn: Buckley
+uid: cbuckley
+mail: cbuckley@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=HMS Victory,ou=crews,ou=groups,o=sevenSeas
+objectClass: groupOfUniqueNames
+objectClass: top
+cn: HMS Victory
+uniqueMember: cn=Horatio Nelson,ou=people,o=sevenSeas
+uniqueMember: cn=Thomas Masterman Hardy,ou=people,o=sevenSeas
+uniqueMember: cn=Cornelius Buckley,ou=people,o=sevenSeas
+
+dn: cn=HMS Victory,ou=ships,o=sevenSeas
+objectClass: top
+objectClass: ship
+cn: HMS Victory
+numberOfGuns: 104
+description: a ship of the line of the Royal Navy
+description: built between 1759 and 1765
+
+# HMS Bounty Crew
+# ---------------
+
+dn: cn=William Bligh,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: William Bligh
+description: Captain William Bligh
+givenName: William
+sn: Bligh
+uid: wbligh
+mail: wbligh@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=Fletcher Christian,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: Fletcher Christian
+description: Lieutenant Fletcher Christian
+givenName: Fletcher
+manager: cn=William Bligh,ou=people,o=sevenSeas
+sn: Christian
+uid: fchristi
+mail: fchristi@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=John Fryer,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: John Fryer
+description: Master John Fryer
+givenName: John
+manager: cn=William Bligh,ou=people,o=sevenSeas
+sn: Fryer
+uid: jfryer
+mail: jfryer@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=John Hallett,ou=people,o=sevenSeas
+objectClass: person
+objectClass: organizationalPerson
+objectClass: inetOrgPerson
+objectClass: top
+cn: John Hallett
+description: Midshipman John Hallett
+givenName: John
+manager: cn=William Bligh,ou=people,o=sevenSeas
+sn: Hallett
+uid: jhallett
+mail: jhallett@royalnavy.mod.uk
+userPassword: {SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
+
+dn: cn=HMS Bounty,ou=crews,ou=groups,o=sevenSeas
+objectClass: groupOfUniqueNames
+objectClass: top
+cn: HMS Bounty
+uniqueMember: cn=William Bligh,ou=people,o=sevenSeas
+uniqueMember: cn=Fletcher Christian,ou=people,o=sevenSeas
+uniqueMember: cn=John Fryer,ou=people,o=sevenSeas
+uniqueMember: cn=John Hallett,ou=people,o=sevenSeas
+
diff --git a/testcase-archetype/src/main/resources/archetype-resources/src/test/resources/sevenSeas_schema.ldif b/testcase-archetype/src/main/resources/archetype-resources/src/test/resources/sevenSeas_schema.ldif
new file mode 100644
index 0000000..b1826a7
--- /dev/null
+++ b/testcase-archetype/src/main/resources/archetype-resources/src/test/resources/sevenSeas_schema.ldif
@@ -0,0 +1,88 @@
+# sevenSeas
+# Generated by LDAP Studio on 27. April 2007 14:59:52
+
+dn: cn=sevenSeas, ou=schema
+objectclass: metaSchema
+objectclass: top
+cn: sevenSeas
+
+dn: ou=attributeTypes, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: attributetypes
+
+dn: m-oid=1.3.6.1.4.1.18060.0.4.3.2.1, ou=attributeTypes, cn=sevenSeas, ou=schem
+ a
+objectclass: metaAttributeType
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.18060.0.4.3.2.1
+m-name: numberOfGuns
+m-description: Number of guns of a ship
+m-equality: integerMatch
+m-syntax: 1.3.6.1.4.1.1466.115.121.1.27
+m-singleValue: TRUE
+
+dn: ou=comparators, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: comparators
+
+dn: ou=ditContentRules, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: ditcontentrules
+
+dn: ou=ditStructureRules, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: ditstructurerules
+
+dn: ou=matchingRules, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: matchingrules
+
+dn: ou=matchingRuleUse, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: matchingruleuse
+
+dn: ou=nameForms, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: nameforms
+
+dn: ou=normalizers, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: normalizers
+
+dn: ou=objectClasses, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: objectClasses
+
+dn: m-oid=1.3.6.1.4.1.18060.0.4.3.3.1, ou=objectClasses, cn=sevenSeas, ou=schema
+ 
+objectclass: metaObjectclass
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.18060.0.4.3.3.1
+m-name: ship
+m-description: An entry which represents a ship
+m-supObjectClass: top
+m-must: cn
+m-may: numberOfGuns
+m-may: description
+
+dn: ou=syntaxCheckers, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: syntaxcheckers
+
+dn: ou=syntaxes, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: syntaxes
+
