You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opennlp.apache.org by ma...@apache.org on 2023/01/26 13:54:24 UTC

[opennlp-sandbox] branch introduce-common-maven-module-structure-for-corpus-server-components created (now ee554a4)

This is an automated email from the ASF dual-hosted git repository.

mawiesne pushed a change to branch introduce-common-maven-module-structure-for-corpus-server-components
in repository https://gitbox.apache.org/repos/asf/opennlp-sandbox.git


      at ee554a4  introduce-common-maven-module-structure-for-corpus-server-components

This branch includes the following new commits:

     new ee554a4  introduce-common-maven-module-structure-for-corpus-server-components

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[opennlp-sandbox] 01/01: introduce-common-maven-module-structure-for-corpus-server-components

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mawiesne pushed a commit to branch introduce-common-maven-module-structure-for-corpus-server-components
in repository https://gitbox.apache.org/repos/asf/opennlp-sandbox.git

commit ee554a4607963712e13de3665073cb705ca33aeb
Author: Martin Wiesner <ma...@hs-heilbronn.de>
AuthorDate: Thu Jan 26 14:50:26 2023 +0100

    introduce-common-maven-module-structure-for-corpus-server-components
    
    - adjusts parent project (org.apache.apache) to version 18
    - adjusts Java language level to 11
    - introduces parent pom module `corpus-server` and reorganizes children: -core, -impl, -connector, -tools
    - updates several dependencies to more up-to-date versions to mitigate several CVEs
    - adjusts some array declarations to comply with Java, not C style
    - fixes existing, commented JUnit tests in `-connector`, yet they won't fully work -> Ignored for this PR
---
 .../corpus_server/connector/CSCasConsumerTest.java |  59 -----
 .../connector/CSCollectionReaderTest.java          |  77 ------
 corpus-server-impl/pom.xml                         | 155 ------------
 .../corpus-server-connector}/desc/CSCasWriter.xml  | 120 +++++-----
 .../desc/CSQueueCollectionReader.xml               | 216 ++++++++---------
 .../desc/EngPersonNameFinderTrainerCPE.xml         |   0
 .../desc/EngTokenizerAndSentdetectCPE.xml          |   0
 .../desc/PersonNameFinderTrainer.xml               |   0
 .../desc/SentenceDetector.xml                      |   0
 .../corpus-server-connector}/desc/Tokenizer.xml    |   0
 .../desc/TokenizerAndSentdetectAAE.xml             |   0
 .../corpus-server-connector}/pom.xml               |  67 +++---
 .../corpus_server/connector/CSCasWriter.java       |   5 +-
 .../connector/CSQueueCollectionReader.java         |   2 +-
 .../opennlp/corpus_server/connector/UimaUtil.java  |   3 +-
 .../corpus_server/connector/CSCasWriterTest.java   |  78 +++++++
 .../connector/CSCollectionReaderTest.java          | 106 +++++++++
 .../corpus_server/connector}/TestCorpusServer.java |   4 +-
 .../test/resources/CSCasConsumerTestDescriptor.xml |   2 +-
 .../resources/CSCollectionReaderTestDescriptor.xml |   2 +-
 .../src/test/resources}/TypeSystem.xml             |   0
 corpus-server/{ => corpus-server-core}/feature.xml |   4 +-
 corpus-server/corpus-server-core/pom.xml           | 120 ++++++++++
 .../opennlp/corpus_server/CorporaResource.java     |  10 +-
 .../opennlp/corpus_server/CorpusResource.java      |   0
 .../apache/opennlp/corpus_server/CorpusServer.java |   6 +-
 .../corpus_server/CorpusServerApplication.java     |   0
 .../opennlp/corpus_server/CorpusServerBundle.java  |   0
 .../opennlp/corpus_server/TaskQueueResource.java   |   0
 .../opennlp/corpus_server/TaskQueuesResource.java  |   0
 .../corpus_server/search/SearchService.java        |   0
 .../corpus_server/store/AbstractCorporaStore.java  |   0
 .../corpus_server/store/CorporaChangeListener.java |   0
 .../opennlp/corpus_server/store/CorporaStore.java  |   3 +-
 .../opennlp/corpus_server/store/CorpusStore.java   |   0
 .../corpus_server/store/MemoryCorporaStore.java    |   0
 .../corpus_server/store/MemoryCorpusStore.java     |   0
 .../corpus_server/taskqueue/MemoryTaskQueue.java   |   0
 .../taskqueue/MemoryTaskQueueService.java          |   0
 .../opennlp/corpus_server/taskqueue/TaskQueue.java |   0
 .../corpus_server/taskqueue/TaskQueueService.java  |   0
 .../corpus_server/search}/IndexWriter.properties   |   0
 .../opennlp/corpus_server/search/LuceneIndexer.xml |   0
 .../opennlp/corpus_server/search/TypeSystem.xml    |   0
 .../src/main/webapp/WEB-INF/web.xml                |   0
 .../corpus_server/util/TestCorpusServer.java       |   0
 .../corpus-server-impl}/feature.xml                |   4 +-
 corpus-server/corpus-server-impl/pom.xml           | 144 ++++++++++++
 .../opennlp/corpus_server/impl/Activator.java      |   2 +-
 .../corpus_server/impl/CorpusServerImpl.java       |   5 +-
 .../corpus_server/impl/DerbyCorporaStore.java      |   4 +-
 .../corpus_server/impl/DerbyCorpusStore.java       |  13 +-
 .../opennlp/corpus_server/impl/LuceneIndexer.java  |   0
 .../corpus_server/impl/LuceneSearchService.java    |   6 +-
 .../opennlp/corpus_server/impl/UimaUtil.java       |   0
 .../corpus_server/impl}/IndexWriter.properties     |   0
 .../opennlp/corpus_server/impl/LuceneIndexer.xml   |   0
 .../opennlp/corpus_server/impl/TypeSystem.xml      |   0
 .../corpus-server-tools}/bin/cs-tools              |   0
 .../corpus-server-tools}/pom.xml                   |  44 ++--
 .../opennlp/corpus_server/tools/CASImporter.java   |   0
 .../opennlp/corpus_server/tools/CorpusBackup.java  |   0
 .../opennlp/corpus_server/tools/CreateCorpus.java  |   0
 .../corpus_server/tools/CreateTaskQueue.java       |   0
 .../opennlp/corpus_server/tools/DropCorpus.java    |   0
 .../opennlp/corpus_server/tools/FileUtil.java      |   0
 .../opennlp/corpus_server/tools/RemoveCAS.java     |   0
 .../corpus_server/tools/ReplaceTypeSystem.java     |   0
 .../opennlp/corpus_server/tools/SearchCorpus.java  |   0
 corpus-server/pom.xml                              | 260 +++++++++------------
 70 files changed, 801 insertions(+), 720 deletions(-)

diff --git a/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCasConsumerTest.java b/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCasConsumerTest.java
deleted file mode 100644
index 7f2896e..0000000
--- a/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCasConsumerTest.java
+++ /dev/null
@@ -1,59 +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 org.apache.opennlp.corpus_server.connector;
-
-
-public class CSCasConsumerTest {
-
-//  private static final String CCPATH = "src/test/resources/org/apache/opennlp/corpus_server/CSCasConsumerTestDescriptor.xml";
-//
-//  @Before
-//  public void setUp() throws Exception {
-//    InputStream in = CorpusServer.class
-//            .getResourceAsStream("/org/apache/opennlp/corpus_server/search/TypeSystem.xml");
-//    TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
-//    ByteArrayOutputStream os = new ByteArrayOutputStream();
-//    tsd.toXML(os);
-//    CorporaStore corporaStore = new DerbyCorporaStore();
-//    try {
-//      corporaStore.initialize();
-//      corporaStore.createCorpus("wikinews", os.toByteArray());
-//    } catch (Exception e) {
-//      // do nothing
-//    }
-//    new TestCorpusServer();
-//  }
-//
-//  @Test
-//  public void testCasWrite() {
-//    try {
-//      XMLInputSource s = new XMLInputSource(new File(CCPATH));
-//      ResourceSpecifier rs = UIMAFramework.getXMLParser().parseCasConsumerDescription(s);
-//      CasConsumer casConsumer = UIMAFramework.produceCasConsumer(rs);
-//      InputStream in = CorpusServer.class
-//              .getResourceAsStream("/org/apache/opennlp/corpus_server/WikinewsTypeSystem.xml");
-//      TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
-//      CAS cas = UimaUtil.createEmptyCAS(tsd);
-//      cas.setDocumentText("this cas needs to be stored");
-//      casConsumer.processCas(cas);
-//    } catch (Exception e) {
-//      e.printStackTrace();
-//      fail(e.getLocalizedMessage());
-//    }
-//  }
-}
diff --git a/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCollectionReaderTest.java b/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCollectionReaderTest.java
deleted file mode 100644
index 3bd90cd..0000000
--- a/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCollectionReaderTest.java
+++ /dev/null
@@ -1,77 +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 org.apache.opennlp.corpus_server.connector;
-
-
-public class CSCollectionReaderTest {
-
-  private static final String CRDPATH = "src/test/resources/org/apache/opennlp/corpus_server/CSCollectionReaderTestDescriptor.xml";
-
-//  @BeforeClass
-//  public static void setUp() throws Exception {
-//    InputStream in = CorpusServer.class
-//            .getResourceAsStream("/org/apache/opennlp/corpus_server/search/TypeSystem.xml");
-//    TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
-//    ByteArrayOutputStream os = new ByteArrayOutputStream();
-//    tsd.toXML(os);
-//    CorporaStore corporaStore = new DerbyCorporaStore();
-//    try {
-//      corporaStore.initialize();
-//      corporaStore.createCorpus("wikinews", os.toByteArray());
-//    } catch (Exception e) {
-//      // do nothing
-//    }
-//    os.reset();
-//    CAS cas = UimaUtil.createEmptyCAS(tsd);
-//    cas.setDocumentText("this is a test text");
-//    Annotation a = new Annotation(cas.getJCas());
-//    a.setBegin(0);
-//    a.setEnd(4);
-//    a.addToIndexes();
-//    XmiCasSerializer.serialize(cas, os);
-//    try {
-//      corporaStore.getCorpus("wikinews").addCAS("111", os.toByteArray());
-//      corporaStore.getCorpus("wikinews").addCAS("222", os.toByteArray());
-//    } catch (Exception e) {
-//      // do nothing
-//    }
-//    new TestCorpusServer();
-//  }
-//
-//  @Test
-//  public void explicitCRTest() {
-//    try {
-//      XMLInputSource s = new XMLInputSource(new File(CRDPATH));
-//      ResourceSpecifier rs = UIMAFramework.getXMLParser().parseCollectionReaderDescription(s);
-//      CollectionReader cr = UIMAFramework.produceCollectionReader(rs);
-//      CAS cas = CasCreationUtils.createCas(new ArrayList<MetaDataObject>(0));
-//      assertTrue(cr.hasNext());
-//      cr.getNext(cas);
-//      assertNotNull(cas);
-//      AnnotationIndex<AnnotationFS> annotationIndex = cas.getAnnotationIndex();
-//      assertTrue(annotationIndex.size() == 2);
-//      assertTrue(cr.hasNext());
-//      cr.getNext(cas);
-//      assertFalse(cr.hasNext());
-//    } catch (Exception e) {
-//      e.printStackTrace();
-//      fail(e.getLocalizedMessage());
-//    }
-//  }
-
-}
diff --git a/corpus-server-impl/pom.xml b/corpus-server-impl/pom.xml
deleted file mode 100644
index d28808c..0000000
--- a/corpus-server-impl/pom.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-   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.    
--->
-
-<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">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache</groupId>
-		<artifactId>apache</artifactId>
-		<version>9</version>
-		<relativePath />
-	</parent>
-
-	<groupId>org.apache.opennlp</groupId>
-	<artifactId>corpus-server-impl</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-	<packaging>bundle</packaging>
-
-	<name>Apache OpenNLP Corpus Server Implementation</name>
-	
-	<dependencies>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>4.2.0</version>
-            <scope>provided</scope>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <version>4.2.0</version>
-            <scope>provided</scope>
-        </dependency>
-        
-		<dependency>
-			<groupId>org.apache.opennlp</groupId>
-			<artifactId>corpus-server</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-			<scope>provided</scope>
-		</dependency>
-
-		<dependency>
-		    <groupId>org.apache.derby</groupId>
-		    <artifactId>derby</artifactId>
-		    <version>10.8.1.2</version>
-		    <scope>provided</scope>
-		</dependency>
-
-		<!-- UIMA and Lucas must be embedded to work properly! -->
-		<dependency>
-			<groupId>org.apache.uima</groupId>
-			<artifactId>uimaj-core</artifactId>
-			<version>2.3.1</version>
-			<scope>compile</scope>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.uima</groupId>
-			<artifactId>Lucas</artifactId>
-			<version>2.3.1</version>
-			<scope>compile</scope>
-		</dependency>
-		
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-	
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.6</source>
-					<target>1.6</target>
-          			<compilerArgument>-Xlint</compilerArgument>
-				</configuration>
-			</plugin>
-			
-			<!-- to generate the MANIFEST-FILE required by the bundle -->
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.7</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <instructions>
-                    	<Embed-Dependency>*;scope=compile;inline=false</Embed-Dependency>
-                    	<Embed-Transitive>true</Embed-Transitive>
-                        <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
-                        <Import-Package>
-                        	!com.sun.jdmk.comm,
-                        	!javax.persistence.*,
-                        	!javax.servlet.annotation,
-                        	!javax.servlet.jsp.*,
-                        	!javax.microedition.*,
-                        	!javax.mail.*,
-                        	!javax.transaction.xa,
-                        	!javax.jms,
-                        	!javax.interceptor,!javax.inject,
-                        	!javax.enterprise.*,
-                        	!javax.annotation.security,
-                        	!javax.ejb,
-                        	!com.sun.xml.fastinfoset.*,
-                        	!org.jvnet.*,
-                        	!org.apache.derby.impl.drda,
-                        	!com.ibm.jvm,
-                        	!com.sun.net.httpserver,
-                        	!sun.misc,
-                        	*,
-                        	org.apache.opennlp.corpus_server,
-                        	org.apache.derby.jdbc
-                        	</Import-Package>
-                        <!-- Import-Package>!com.ibm.jvm,!com.sun.jdmk.comm,!com.sun.net.httpserver,*,com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet</Import-Package-->
-                        <Export-Package>org.apache.opennlp.corpus_server.impl</Export-Package>
-                        <Bundle-Activator>org.apache.opennlp.corpus_server.impl.Activator</Bundle-Activator>
-                    </instructions>
-                </configuration>
-            </plugin>
-		</plugins>
-	</build>
-</project>
\ No newline at end of file
diff --git a/corpus-server-connector/desc/CSCasWriter.xml b/corpus-server/corpus-server-connector/desc/CSCasWriter.xml
similarity index 97%
rename from corpus-server-connector/desc/CSCasWriter.xml
rename to corpus-server/corpus-server-connector/desc/CSCasWriter.xml
index fcb1696..ec39576 100644
--- a/corpus-server-connector/desc/CSCasWriter.xml
+++ b/corpus-server/corpus-server-connector/desc/CSCasWriter.xml
@@ -1,60 +1,60 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- *************************************************************** * 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. *************************************************************** -->
-
-<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
-	<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
-	<primitive>true</primitive>
-	<annotatorImplementationName>org.apache.opennlp.corpus_server.connector.CSCasWriter
-	</annotatorImplementationName>
-	<analysisEngineMetaData>
-		<name>Corpus Server Cas Writer</name>
-		<description>Writes a CAS (back) to the Corpus Server.</description>
-		<configurationParameters>
-			<configurationParameter>
-				<name>ServerAddress</name>
-				<description>The location of the server.</description>
-				<type>String</type>
-				<multiValued>false</multiValued>
-				<mandatory>true</mandatory>
-			</configurationParameter>
-			<configurationParameter>
-				<name>CorpusName</name>
-				<description>The id of the corpus which should be processed.
-				</description>
-				<type>String</type>
-				<multiValued>false</multiValued>
-				<mandatory>true</mandatory>
-			</configurationParameter>
-		</configurationParameters>
-
-		<typeSystemDescription>
-			<imports>
-				<import name="org.apache.uima.examples.SourceDocumentInformation" />
-			</imports>
-		</typeSystemDescription>
-		<capabilities>
-			<capability>
-				<inputs />
-				<outputs />
-				<languagesSupported />
-			</capability>
-		</capabilities>
-		<operationalProperties>
-			<modifiesCas>true</modifiesCas>
-			<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
-			<outputsNewCASes>false</outputsNewCASes>
-		</operationalProperties>
-	</analysisEngineMetaData>
-</analysisEngineDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- *************************************************************** * 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. *************************************************************** -->
+
+<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
+	<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+	<primitive>true</primitive>
+	<annotatorImplementationName>org.apache.opennlp.corpus_server.connector.CSCasWriter
+	</annotatorImplementationName>
+	<analysisEngineMetaData>
+		<name>Corpus Server Cas Writer</name>
+		<description>Writes a CAS (back) to the Corpus Server.</description>
+		<configurationParameters>
+			<configurationParameter>
+				<name>ServerAddress</name>
+				<description>The location of the server.</description>
+				<type>String</type>
+				<multiValued>false</multiValued>
+				<mandatory>true</mandatory>
+			</configurationParameter>
+			<configurationParameter>
+				<name>CorpusName</name>
+				<description>The id of the corpus which should be processed.
+				</description>
+				<type>String</type>
+				<multiValued>false</multiValued>
+				<mandatory>true</mandatory>
+			</configurationParameter>
+		</configurationParameters>
+
+		<typeSystemDescription>
+			<imports>
+				<import name="org.apache.uima.examples.SourceDocumentInformation" />
+			</imports>
+		</typeSystemDescription>
+		<capabilities>
+			<capability>
+				<inputs />
+				<outputs />
+				<languagesSupported />
+			</capability>
+		</capabilities>
+		<operationalProperties>
+			<modifiesCas>true</modifiesCas>
+			<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
+			<outputsNewCASes>false</outputsNewCASes>
+		</operationalProperties>
+	</analysisEngineMetaData>
+</analysisEngineDescription>
diff --git a/corpus-server-connector/desc/CSQueueCollectionReader.xml b/corpus-server/corpus-server-connector/desc/CSQueueCollectionReader.xml
similarity index 97%
rename from corpus-server-connector/desc/CSQueueCollectionReader.xml
rename to corpus-server/corpus-server-connector/desc/CSQueueCollectionReader.xml
index eaa52c6..a32c65f 100644
--- a/corpus-server-connector/desc/CSQueueCollectionReader.xml
+++ b/corpus-server/corpus-server-connector/desc/CSQueueCollectionReader.xml
@@ -1,108 +1,108 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-	<!--
-	 ***************************************************************
-	 * 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.
-	 ***************************************************************
-   -->
-   
-<collectionReaderDescription  xmlns="http://uima.apache.org/resourceSpecifier">
-    <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
-    <implementationName>org.apache.opennlp.corpus_server.connector.CSQueueCollectionReader</implementationName>
-    <processingResourceMetaData>
-        <name>Corpus Server Collection Reader</name>
-        <description>Reads CASes from a Corpus Server Queue.</description>
-        <version>1.0</version>
-        <vendor>The Apache Software Foundation</vendor>
-        <configurationParameters>
-            <configurationParameter>
-                <name>ServerAddress</name>
-                <description>The location of the server.</description>
-                <type>String</type>
-                <multiValued>false</multiValued>
-                <mandatory>true</mandatory>
-            </configurationParameter>
-            <configurationParameter>
-                <name>CorpusName</name>
-                <description>The id of the corpus which should be processed.</description>
-                <type>String</type>
-                <multiValued>false</multiValued>
-                <mandatory>true</mandatory>
-            </configurationParameter>
-            <configurationParameter>
-                <name>SearchQuery</name>
-                <description>The query to populate the queue.</description>
-                <type>String</type>
-                <multiValued>false</multiValued>
-                <mandatory>true</mandatory>
-            </configurationParameter>
-            <configurationParameter>
-                <name>QueueName</name>
-                <description>Name of the queue to create with the search query.</description>
-                <type>String</type>
-                <multiValued>false</multiValued>
-                <mandatory>true</mandatory>
-            </configurationParameter>
-        </configurationParameters>
-		<configurationParameterSettings>
-		    <nameValuePair>
-		        <name>ServerAddress</name>
-		        <value>
-		            <string>http://localhost:8080/rest</string>
-		        </value>
-		    </nameValuePair>
-		    <nameValuePair>
-		        <name>CorpusName</name>
-		        <value>
-		            <string>enwikinews</string>
-		        </value>
-		    </nameValuePair>
-		    <nameValuePair>
-		        <name>SearchQuery</name>
-		        <value>
-		            <string>status-token:true</string>
-		        </value>
-		    </nameValuePair>
-		    <nameValuePair>
-		        <name>QueueName</name>
-		        <value>
-		            <string>EnglishTokenizerTraining</string>
-		        </value>
-		    </nameValuePair>
-		</configurationParameterSettings>
-		
-		<!-- Type System must be compatible with the one used for the corpus. -->
-        <typeSystemDescription>
-          <imports>
-            <import location="TypeSystem.xml"/>
-          </imports>
-        </typeSystemDescription>
-
-        <capabilities>
-          	<capability>
-          		<inputs/>
-          		<outputs/>
-          	</capability>
-        </capabilities>
-		<operationalProperties>
-			<modifiesCas>true</modifiesCas>
-			<multipleDeploymentAllowed>false</multipleDeploymentAllowed>
-			<outputsNewCASes>true</outputsNewCASes>
-		</operationalProperties>		
-    </processingResourceMetaData>
-</collectionReaderDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+
+	<!--
+	 ***************************************************************
+	 * 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.
+	 ***************************************************************
+   -->
+   
+<collectionReaderDescription  xmlns="http://uima.apache.org/resourceSpecifier">
+    <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+    <implementationName>org.apache.opennlp.corpus_server.connector.CSQueueCollectionReader</implementationName>
+    <processingResourceMetaData>
+        <name>Corpus Server Collection Reader</name>
+        <description>Reads CASes from a Corpus Server Queue.</description>
+        <version>1.0</version>
+        <vendor>The Apache Software Foundation</vendor>
+        <configurationParameters>
+            <configurationParameter>
+                <name>ServerAddress</name>
+                <description>The location of the server.</description>
+                <type>String</type>
+                <multiValued>false</multiValued>
+                <mandatory>true</mandatory>
+            </configurationParameter>
+            <configurationParameter>
+                <name>CorpusName</name>
+                <description>The id of the corpus which should be processed.</description>
+                <type>String</type>
+                <multiValued>false</multiValued>
+                <mandatory>true</mandatory>
+            </configurationParameter>
+            <configurationParameter>
+                <name>SearchQuery</name>
+                <description>The query to populate the queue.</description>
+                <type>String</type>
+                <multiValued>false</multiValued>
+                <mandatory>true</mandatory>
+            </configurationParameter>
+            <configurationParameter>
+                <name>QueueName</name>
+                <description>Name of the queue to create with the search query.</description>
+                <type>String</type>
+                <multiValued>false</multiValued>
+                <mandatory>true</mandatory>
+            </configurationParameter>
+        </configurationParameters>
+		<configurationParameterSettings>
+		    <nameValuePair>
+		        <name>ServerAddress</name>
+		        <value>
+		            <string>http://localhost:8080/rest</string>
+		        </value>
+		    </nameValuePair>
+		    <nameValuePair>
+		        <name>CorpusName</name>
+		        <value>
+		            <string>enwikinews</string>
+		        </value>
+		    </nameValuePair>
+		    <nameValuePair>
+		        <name>SearchQuery</name>
+		        <value>
+		            <string>status-token:true</string>
+		        </value>
+		    </nameValuePair>
+		    <nameValuePair>
+		        <name>QueueName</name>
+		        <value>
+		            <string>EnglishTokenizerTraining</string>
+		        </value>
+		    </nameValuePair>
+		</configurationParameterSettings>
+		
+		<!-- Type System must be compatible with the one used for the corpus. -->
+        <typeSystemDescription>
+          <imports>
+            <import location="TypeSystem.xml"/>
+          </imports>
+        </typeSystemDescription>
+
+        <capabilities>
+          	<capability>
+          		<inputs/>
+          		<outputs/>
+          	</capability>
+        </capabilities>
+		<operationalProperties>
+			<modifiesCas>true</modifiesCas>
+			<multipleDeploymentAllowed>false</multipleDeploymentAllowed>
+			<outputsNewCASes>true</outputsNewCASes>
+		</operationalProperties>		
+    </processingResourceMetaData>
+</collectionReaderDescription>
diff --git a/corpus-server-connector/desc/EngPersonNameFinderTrainerCPE.xml b/corpus-server/corpus-server-connector/desc/EngPersonNameFinderTrainerCPE.xml
similarity index 100%
rename from corpus-server-connector/desc/EngPersonNameFinderTrainerCPE.xml
rename to corpus-server/corpus-server-connector/desc/EngPersonNameFinderTrainerCPE.xml
diff --git a/corpus-server-connector/desc/EngTokenizerAndSentdetectCPE.xml b/corpus-server/corpus-server-connector/desc/EngTokenizerAndSentdetectCPE.xml
similarity index 100%
rename from corpus-server-connector/desc/EngTokenizerAndSentdetectCPE.xml
rename to corpus-server/corpus-server-connector/desc/EngTokenizerAndSentdetectCPE.xml
diff --git a/corpus-server-connector/desc/PersonNameFinderTrainer.xml b/corpus-server/corpus-server-connector/desc/PersonNameFinderTrainer.xml
similarity index 100%
rename from corpus-server-connector/desc/PersonNameFinderTrainer.xml
rename to corpus-server/corpus-server-connector/desc/PersonNameFinderTrainer.xml
diff --git a/corpus-server-connector/desc/SentenceDetector.xml b/corpus-server/corpus-server-connector/desc/SentenceDetector.xml
similarity index 100%
rename from corpus-server-connector/desc/SentenceDetector.xml
rename to corpus-server/corpus-server-connector/desc/SentenceDetector.xml
diff --git a/corpus-server-connector/desc/Tokenizer.xml b/corpus-server/corpus-server-connector/desc/Tokenizer.xml
similarity index 100%
rename from corpus-server-connector/desc/Tokenizer.xml
rename to corpus-server/corpus-server-connector/desc/Tokenizer.xml
diff --git a/corpus-server-connector/desc/TokenizerAndSentdetectAAE.xml b/corpus-server/corpus-server-connector/desc/TokenizerAndSentdetectAAE.xml
similarity index 100%
rename from corpus-server-connector/desc/TokenizerAndSentdetectAAE.xml
rename to corpus-server/corpus-server-connector/desc/TokenizerAndSentdetectAAE.xml
diff --git a/corpus-server-connector/pom.xml b/corpus-server/corpus-server-connector/pom.xml
similarity index 63%
rename from corpus-server-connector/pom.xml
rename to corpus-server/corpus-server-connector/pom.xml
index 0b181d7..3dec8ed 100644
--- a/corpus-server-connector/pom.xml
+++ b/corpus-server/corpus-server-connector/pom.xml
@@ -21,58 +21,58 @@
 
 <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">
 	<modelVersion>4.0.0</modelVersion>
-
 	<parent>
-		<groupId>org.apache</groupId>
-		<artifactId>apache</artifactId>
-		<version>9</version>
-		<relativePath />
+		<groupId>org.apache.opennlp</groupId>
+		<artifactId>corpus-server</artifactId>
+		<version>2.1.1-SNAPSHOT</version>
 	</parent>
 
-	<groupId>org.apache.opennlp</groupId>
 	<artifactId>corpus-server-connector</artifactId>
-	<version>0.0.1-incubating-SNAPSHOT</version>
 	<packaging>jar</packaging>
 
-	<name>OpenNLP Corpus Server UIMA Connector</name>
-
-	<prerequisites>
-		<maven>3.0</maven>
-	</prerequisites>
+	<name>Apache OpenNLP Corpus Server UIMA Connector</name>
 
-	<repositories>
-		<repository>
-			<id>maven2-repository.java.net</id>
-			<name>Java.net Repository for Maven</name>
-			<url>http://download.java.net/maven/2/</url>
-			<layout>default</layout>
-		</repository>
-	</repositories>
-	
 	<dependencies>
 		<dependency>
-		    <groupId>com.sun.jersey</groupId>
-		    <artifactId>jersey-json</artifactId>
-		    <version>1.8</version>
+			<groupId>org.apache.opennlp</groupId>
+			<artifactId>corpus-server-core</artifactId>
+			<version>2.1.1-SNAPSHOT</version>
+			<scope>provided</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.apache.opennlp</groupId>
+			<artifactId>corpus-server-impl</artifactId>
+			<version>2.1.1-SNAPSHOT</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-json</artifactId>
 		</dependency>
 
 		<dependency>
-		    <groupId>com.sun.jersey</groupId>
-		    <artifactId>jersey-client</artifactId>
-		    <version>1.8</version>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-client</artifactId>
 		</dependency>
-    
+
     	<dependency>
 			<groupId>org.apache.uima</groupId>
 			<artifactId>uimaj-core</artifactId>
-			<version>2.3.1</version>
+			<version>${uimaj.version}</version>
 			<scope>compile</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>derby</artifactId>
+			<version>${derby.version}</version>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
@@ -82,11 +82,6 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.6</source>
-					<target>1.6</target>
-          			<compilerArgument>-Xlint</compilerArgument>
-				</configuration>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSCasWriter.java b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSCasWriter.java
similarity index 96%
rename from corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSCasWriter.java
rename to corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSCasWriter.java
index 138e492..5399c46 100644
--- a/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSCasWriter.java
+++ b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSCasWriter.java
@@ -50,7 +50,7 @@ public class CSCasWriter extends CasAnnotator_ImplBase {
   private String corpusName;
 
   // TODO: Make it configurable
-  private String action = "update";
+  private final String action = "update";
   
   private Type idType;
   private Feature idFeature;
@@ -93,9 +93,8 @@ public class CSCasWriter extends CasAnnotator_ImplBase {
       cas.removeFsFromIndexes(idFs);
       
       ByteArrayOutputStream xmiBytes = new ByteArrayOutputStream();
-      XmiCasSerializer serializer = new XmiCasSerializer(cas.getTypeSystem());
       try {
-        serializer.serialize(cas, xmiBytes);
+        XmiCasSerializer.serialize(cas, xmiBytes);
       } catch (SAXException e) {
         throw new AnalysisEngineProcessException();
       }
diff --git a/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
similarity index 99%
rename from corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
rename to corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
index fb06d79..1529333 100644
--- a/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
+++ b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/CSQueueCollectionReader.java
@@ -43,7 +43,7 @@ import com.sun.jersey.api.client.WebResource;
 
 /**
  * a {@link org.apache.uima.collection.CollectionReader} which reads {@link CAS}s from a corpus
- * in the {@link CorpusServer}
+ * in the {@link org.apache.opennlp.corpus_server.CorpusServer}
  */
 public class CSQueueCollectionReader extends CollectionReader_ImplBase {
 
diff --git a/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/UimaUtil.java b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/UimaUtil.java
similarity index 97%
rename from corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/UimaUtil.java
rename to corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/UimaUtil.java
index 37616cb..6db5573 100644
--- a/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/UimaUtil.java
+++ b/corpus-server/corpus-server-connector/src/main/java/org/apache/opennlp/corpus_server/connector/UimaUtil.java
@@ -55,8 +55,7 @@ public class UimaUtil {
     TypeSystemDescription typeSystemDesciptor;
 
     try {
-      typeSystemDesciptor = (TypeSystemDescription) xmlParser
-          .parse(xmlTypeSystemSource);
+      typeSystemDesciptor = (TypeSystemDescription) xmlParser.parse(xmlTypeSystemSource);
 
       typeSystemDesciptor.resolveImports();
     } catch (InvalidXMLException e) {
diff --git a/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCasWriterTest.java b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCasWriterTest.java
new file mode 100644
index 0000000..6f7424f
--- /dev/null
+++ b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCasWriterTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.apache.opennlp.corpus_server.connector;
+
+
+import org.apache.opennlp.corpus_server.impl.DerbyCorporaStore;
+import org.apache.opennlp.corpus_server.store.CorporaStore;
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.collection.CasConsumer;
+import org.apache.uima.resource.ResourceSpecifier;
+import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.apache.uima.util.XMLInputSource;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.fail;
+
+public class CSCasWriterTest {
+
+  private static final String CCPATH = "/CSCasConsumerTestDescriptor.xml";
+
+  @Before
+  public void setUp() throws Exception {
+    try (InputStream in = CSCasWriterTest.class.getResourceAsStream("/TypeSystem.xml");
+         ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+      TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
+      tsd.toXML(os);
+      CorporaStore corporaStore = new DerbyCorporaStore();
+      corporaStore.initialize();
+      byte[] indexMapping = new byte[]{};
+      corporaStore.createCorpus("wikinews", os.toByteArray(), indexMapping);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getLocalizedMessage());
+    }
+    new TestCorpusServer();
+  }
+
+  @Test
+  @Ignore
+  // TODO Investigate why this test fails with:
+  //  A CasConsumer descriptor specified implementation class "org.apache.opennlp.corpus_server.connector.CSCasWriter",
+  //  but this class does not implement the CasConsumer interface.
+  public void testCasWrite() {
+    try (InputStream in = CSCasWriterTest.class.getResourceAsStream("/TypeSystem.xml")) {
+      XMLInputSource s = new XMLInputSource(CSCasWriterTest.class.getResource(CCPATH));
+      ResourceSpecifier rs = UIMAFramework.getXMLParser().parseCasConsumerDescription(s);
+      CasConsumer casConsumer = UIMAFramework.produceCasConsumer(rs);
+      TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
+      CAS cas = UimaUtil.createEmptyCAS(tsd);
+      cas.setDocumentText("this cas needs to be stored");
+      casConsumer.processCas(cas);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getLocalizedMessage());
+    }
+  }
+}
diff --git a/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCollectionReaderTest.java b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCollectionReaderTest.java
new file mode 100644
index 0000000..99dca6f
--- /dev/null
+++ b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/CSCollectionReaderTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.apache.opennlp.corpus_server.connector;
+
+
+import org.apache.opennlp.corpus_server.CorpusServer;
+import org.apache.opennlp.corpus_server.impl.DerbyCorporaStore;
+import org.apache.opennlp.corpus_server.store.CorporaStore;
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.impl.XmiCasSerializer;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.collection.CollectionReader;
+import org.apache.uima.jcas.tcas.Annotation;
+import org.apache.uima.resource.ResourceSpecifier;
+import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.apache.uima.util.CasCreationUtils;
+import org.apache.uima.util.XMLInputSource;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class CSCollectionReaderTest {
+
+  private static final String CRDPATH = "/CSCollectionReaderTestDescriptor.xml";
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    try (InputStream in = CSCollectionReaderTest.class.getResourceAsStream("/TypeSystem.xml");
+         ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+      TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
+      tsd.toXML(os);
+      CorporaStore corporaStore = new DerbyCorporaStore();
+      corporaStore.initialize();
+      byte[] indexMapping = new byte[]{};
+      corporaStore.createCorpus("wikinews", os.toByteArray(), indexMapping);
+
+      os.reset();
+      CAS cas = UimaUtil.createEmptyCAS(tsd);
+      cas.setDocumentText("this is a test text");
+      Annotation a = new Annotation(cas.getJCas());
+      a.setBegin(0);
+      a.setEnd(4);
+      a.addToIndexes();
+      XmiCasSerializer.serialize(cas, os);
+
+      corporaStore.getCorpus("wikinews").addCAS("111", os.toByteArray());
+      corporaStore.getCorpus("wikinews").addCAS("222", os.toByteArray());
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getLocalizedMessage());
+    }
+    new TestCorpusServer();
+  }
+
+  @Test
+  @Ignore
+  // TODO Investigate why this test fails with:
+  //  No value has been assigned to the mandatory configuration parameter corpusName.
+  public void explicitCRTest() {
+    try {
+      XMLInputSource s = new XMLInputSource(CSCollectionReaderTest.class.getResource(CRDPATH));
+      ResourceSpecifier rs = UIMAFramework.getXMLParser().parseCollectionReaderDescription(s);
+      CollectionReader cr = UIMAFramework.produceCollectionReader(rs);
+      CAS cas = CasCreationUtils.createCas(new ArrayList<>(0));
+      assertTrue(cr.hasNext());
+      cr.getNext(cas);
+      assertNotNull(cas);
+      AnnotationIndex<AnnotationFS> annotationIndex = cas.getAnnotationIndex();
+      assertEquals(2, annotationIndex.size());
+      assertTrue(cr.hasNext());
+      cr.getNext(cas);
+      assertFalse(cr.hasNext());
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getLocalizedMessage());
+    }
+  }
+
+}
diff --git a/corpus-server/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/TestCorpusServer.java
similarity index 90%
copy from corpus-server/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java
copy to corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/TestCorpusServer.java
index da2fdf8..05485fd 100644
--- a/corpus-server/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java
+++ b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/TestCorpusServer.java
@@ -15,9 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.opennlp.corpus_server.util;
-
-import org.apache.opennlp.corpus_server.CorpusServer;
+package org.apache.opennlp.corpus_server.connector;
 
 /**
  * Utility CorpusServer extension class that can be used for test purposes.
diff --git a/corpus-server-connector/src/test/resources/org/apache/opennlp/corpus_server/connector/CSCasConsumerDescriptor.xml b/corpus-server/corpus-server-connector/src/test/resources/CSCasConsumerTestDescriptor.xml
similarity index 99%
rename from corpus-server-connector/src/test/resources/org/apache/opennlp/corpus_server/connector/CSCasConsumerDescriptor.xml
rename to corpus-server/corpus-server-connector/src/test/resources/CSCasConsumerTestDescriptor.xml
index 122348f..d88c77f 100644
--- a/corpus-server-connector/src/test/resources/org/apache/opennlp/corpus_server/connector/CSCasConsumerDescriptor.xml
+++ b/corpus-server/corpus-server-connector/src/test/resources/CSCasConsumerTestDescriptor.xml
@@ -20,7 +20,7 @@
 <casConsumerDescription xmlns="http://uima.apache.org/resourceSpecifier">
   <frameworkImplementation>org.apache.uima.java
   </frameworkImplementation>
-  <implementationName>org.apache.opennlp.corpus_server.connector.CSCasConsumer
+  <implementationName>org.apache.opennlp.corpus_server.connector.CSCasWriter
   </implementationName>
   <processingResourceMetaData>
     <name>CSCasConsumerDescriptor</name>
diff --git a/corpus-server-connector/src/test/resources/org/apache/opennlp/corpus_server/connector/CSCollectionReaderDescriptor.xml b/corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml
similarity index 97%
rename from corpus-server-connector/src/test/resources/org/apache/opennlp/corpus_server/connector/CSCollectionReaderDescriptor.xml
rename to corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml
index fdcd605..5caba80 100644
--- a/corpus-server-connector/src/test/resources/org/apache/opennlp/corpus_server/connector/CSCollectionReaderDescriptor.xml
+++ b/corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml
@@ -19,7 +19,7 @@
 -->
 <collectionReaderDescription xmlns="http://uima.apache.org/resourceSpecifier">
   <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
-  <implementationName>org.apache.opennlp.corpus_server.connector.CSCollectionReader</implementationName>
+  <implementationName>org.apache.opennlp.corpus_server.connector.CSQueueCollectionReader</implementationName>
   <processingResourceMetaData>
     <name>CSCollectionReaderDescriptor</name>
     <description></description>
diff --git a/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/TypeSystem.xml b/corpus-server/corpus-server-connector/src/test/resources/TypeSystem.xml
similarity index 100%
copy from corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/TypeSystem.xml
copy to corpus-server/corpus-server-connector/src/test/resources/TypeSystem.xml
diff --git a/corpus-server/feature.xml b/corpus-server/corpus-server-core/feature.xml
similarity index 94%
rename from corpus-server/feature.xml
rename to corpus-server/corpus-server-core/feature.xml
index ab05e8a..a7804ab 100644
--- a/corpus-server/feature.xml
+++ b/corpus-server/corpus-server-core/feature.xml
@@ -21,7 +21,7 @@
 
 <features>
 	<!-- This feature.xml should be automatically be generated, all dependencies are duplicated here! -->
-    <feature name="opennlp-corpus-server" version="0.0.1.SNAPSHOT">
+    <feature name="opennlp-corpus-server" version="2.1.1.SNAPSHOT">
         <bundle>http://repo1.maven.org/maven2/org/ops4j/pax/web/pax-web-jetty-bundle/0.7.1/pax-web-jetty-bundle-0.7.1.jar</bundle>
         <bundle>http://repo2.maven.org/maven2/org/ops4j/pax/web/pax-web-extender-war/0.7.1/pax-web-extender-war-0.7.1.jar</bundle>
         <bundle>https://maven.java.net/service/local/artifact/maven/redirect?r=releases&amp;g=com.sun.jersey&amp;a=jersey-core&amp;v=1.12&amp;e=jar</bundle>
@@ -33,6 +33,6 @@
         <bundle>http://repo1.maven.org/maven2/org/codehaus/jackson/jackson-xc/1.9.2/jackson-xc-1.9.2.jar</bundle>
         <bundle>http://repo1.maven.org/maven2/org/codehaus/jackson/jackson-mapper-asl/1.9.2/jackson-mapper-asl-1.9.2.jar</bundle>
         <bundle>http://repo1.maven.org/maven2/org/codehaus/jettison/jettison/1.3.1/jettison-1.3.1.jar</bundle>
-        <bundle>mvn:org.apache.opennlp/corpus-server/0.0.1-SNAPSHOT</bundle>
+        <bundle>mvn:org.apache.opennlp/corpus-server/2.1.1-SNAPSHOT</bundle>
     </feature>
 </features>
\ No newline at end of file
diff --git a/corpus-server/corpus-server-core/pom.xml b/corpus-server/corpus-server-core/pom.xml
new file mode 100644
index 0000000..d54f879
--- /dev/null
+++ b/corpus-server/corpus-server-core/pom.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.opennlp</groupId>
+    <artifactId>corpus-server</artifactId>
+    <version>2.1.1-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>corpus-server-core</artifactId>
+  <name>Apache OpenNLP Corpus Server Core</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-servlet</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-json</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-client</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
+
+      <!-- to generate the MANIFEST-FILE required by the bundle -->
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <version>5.1.8</version>
+        <extensions>true</extensions>
+        <executions>
+          <execution>
+            <id>bundle-manifest</id>
+            <phase>process-classes</phase>
+            <goals>
+              <goal>manifest</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <manifestLocation>${project.build.directory}/META-INF</manifestLocation>
+          <instructions>
+            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+            <Import-Package>
+              !javax.persistence.*,
+              !javax.servlet.annotation,
+              !javax.servlet.jsp.*,
+              !javax.microedition.*,
+              !javax.mail.*,
+              !javax.transaction.xa,
+              !javax.jms,
+              !javax.interceptor,!javax.inject,
+              !javax.enterprise.*,
+              !javax.annotation.security,
+              !javax.ejb,
+              !com.sun.xml.fastinfoset.*,
+              !org.jvnet.*,
+              !org.apache.derby.impl.drda,
+              !com.ibm.jvm,
+              !com.sun.jdmk.comm,
+              !com.sun.net.httpserver,
+              !sun.misc,
+              javax.servlet,
+              *,
+              com.sun.jersey.json.impl.provider.entity.*,
+              com.sun.jersey.json.*,
+              org.codehaus.jackson.*,
+              org.codehaus.jackson.xc,
+              org.apache.opennlp.corpus_server,
+              com.sun.jersey.api.core,
+              com.sun.jersey.spi.container.servlet</Import-Package>
+            <!-- Import-Package>org.apache.derby.jdbc, !com.ibm.jvm,!com.sun.jdmk.comm,!com.sun.net.httpserver,*,com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet</Import-Package-->
+            <Export-Package>org.apache.opennlp.corpus_server.*, org.apache.opennlp.corpus_server.search</Export-Package>
+            <Webapp-Context>rest</Webapp-Context>
+            <Web-ContextPath>rest</Web-ContextPath>
+            <Bundle-Activator>org.apache.opennlp.corpus_server.CorpusServerBundle</Bundle-Activator>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
\ No newline at end of file
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorporaResource.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorporaResource.java
similarity index 92%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorporaResource.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorporaResource.java
index 72d4620..1e87855 100644
--- a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorporaResource.java
+++ b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorporaResource.java
@@ -37,14 +37,13 @@ public class CorporaResource {
 	 * <br>
 	 * Note: Type system references are not supported currently!
 	 * 
-	 * @param casId
-	 * @param typeSystemBytes
+	 * @param corpusName
+	 * @param resources
 	 */
 	@POST
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Path("_createCorpus")
-	public void createCorpus(@QueryParam("corpusName") String corpusName,
-			byte[][] resources) throws IOException {
+	public void createCorpus(@QueryParam("corpusName") String corpusName, byte[][] resources) throws IOException {
 	  
 	  if (resources.length != 2) {
 	    // TODO: throw exception
@@ -58,8 +57,7 @@ public class CorporaResource {
 	}
 
   @Path("{corpus}")
-	public CorpusResource getCorpus(
-			@PathParam("corpus") String corpusId) throws IOException {
+	public CorpusResource getCorpus(@PathParam("corpus") String corpusId) throws IOException {
     
       CorpusServer corpusServer = CorpusServerBundle.getInstance().getCorpusServer();
       CorporaStore store = corpusServer.getStore();
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusResource.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusResource.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusResource.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusResource.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServer.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServer.java
similarity index 89%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServer.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServer.java
index b7dea02..549e1d9 100644
--- a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServer.java
+++ b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServer.java
@@ -23,9 +23,9 @@ import org.apache.opennlp.corpus_server.taskqueue.TaskQueueService;
 
 public interface CorpusServer {
 
-  public CorporaStore getStore();
+  CorporaStore getStore();
   
-  public SearchService getSearchService();
+  SearchService getSearchService();
   
-  public TaskQueueService getTaskQueueService();
+  TaskQueueService getTaskQueueService();
 }
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/TaskQueueResource.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/TaskQueueResource.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/TaskQueueResource.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/TaskQueueResource.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/TaskQueuesResource.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/TaskQueuesResource.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/TaskQueuesResource.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/TaskQueuesResource.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/search/SearchService.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/search/SearchService.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/search/SearchService.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/search/SearchService.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/AbstractCorporaStore.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/AbstractCorporaStore.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/AbstractCorporaStore.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/AbstractCorporaStore.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorporaChangeListener.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorporaChangeListener.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorporaChangeListener.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorporaChangeListener.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorporaStore.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorporaStore.java
similarity index 95%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorporaStore.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorporaStore.java
index 98c9c70..d3bf9e0 100644
--- a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorporaStore.java
+++ b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorporaStore.java
@@ -45,8 +45,7 @@ public interface CorporaStore {
    * @param typeSystemBytes
    * @param indexMapping
    */
-  void createCorpus(String corpusName, byte typeSystemBytes[],
-      byte indexMapping[]) throws IOException;
+  void createCorpus(String corpusName, byte[] typeSystemBytes, byte[] indexMapping) throws IOException;
   
   Set<String> getCorpusIds() throws IOException;
   
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorpusStore.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorpusStore.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/CorpusStore.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/CorpusStore.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorporaStore.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorporaStore.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorporaStore.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorporaStore.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorpusStore.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorpusStore.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorpusStore.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/store/MemoryCorpusStore.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueue.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueue.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueue.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueue.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueueService.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueueService.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueueService.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/MemoryTaskQueueService.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueue.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueue.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueue.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueue.java
diff --git a/corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueueService.java b/corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueueService.java
similarity index 100%
rename from corpus-server/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueueService.java
rename to corpus-server/corpus-server-core/src/main/java/org/apache/opennlp/corpus_server/taskqueue/TaskQueueService.java
diff --git a/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/IndexWriter.properties b/corpus-server/corpus-server-core/src/main/resources/org/apache/opennlp/corpus_server/search/IndexWriter.properties
similarity index 100%
rename from corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/IndexWriter.properties
rename to corpus-server/corpus-server-core/src/main/resources/org/apache/opennlp/corpus_server/search/IndexWriter.properties
diff --git a/corpus-server/src/main/resources/org/apache/opennlp/corpus_server/search/LuceneIndexer.xml b/corpus-server/corpus-server-core/src/main/resources/org/apache/opennlp/corpus_server/search/LuceneIndexer.xml
similarity index 100%
rename from corpus-server/src/main/resources/org/apache/opennlp/corpus_server/search/LuceneIndexer.xml
rename to corpus-server/corpus-server-core/src/main/resources/org/apache/opennlp/corpus_server/search/LuceneIndexer.xml
diff --git a/corpus-server/src/main/resources/org/apache/opennlp/corpus_server/search/TypeSystem.xml b/corpus-server/corpus-server-core/src/main/resources/org/apache/opennlp/corpus_server/search/TypeSystem.xml
similarity index 100%
rename from corpus-server/src/main/resources/org/apache/opennlp/corpus_server/search/TypeSystem.xml
rename to corpus-server/corpus-server-core/src/main/resources/org/apache/opennlp/corpus_server/search/TypeSystem.xml
diff --git a/corpus-server/src/main/webapp/WEB-INF/web.xml b/corpus-server/corpus-server-core/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from corpus-server/src/main/webapp/WEB-INF/web.xml
rename to corpus-server/corpus-server-core/src/main/webapp/WEB-INF/web.xml
diff --git a/corpus-server/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java b/corpus-server/corpus-server-core/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java
similarity index 100%
rename from corpus-server/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java
rename to corpus-server/corpus-server-core/src/test/java/org/apache/opennlp/corpus_server/util/TestCorpusServer.java
diff --git a/corpus-server-impl/feature.xml b/corpus-server/corpus-server-impl/feature.xml
similarity index 88%
rename from corpus-server-impl/feature.xml
rename to corpus-server/corpus-server-impl/feature.xml
index eac4a04..d0b89b7 100644
--- a/corpus-server-impl/feature.xml
+++ b/corpus-server/corpus-server-impl/feature.xml
@@ -22,7 +22,7 @@
 <features>
 	<!-- This feature.xml should be automatically be generated, all dependencies are duplicated here! -->
     <feature name="opennlp-corpus-server-impl" version="0.0.1.SNAPSHOT">
-        <bundle>mvn:org.apache.derby/derby/10.8.1.2</bundle>
-        <bundle>mvn:org.apache.opennlp/corpus-server-impl/0.0.1-SNAPSHOT</bundle>
+        <bundle>mvn:org.apache.derby/derby/10.14.2.0</bundle>
+        <bundle>mvn:org.apache.opennlp/corpus-server-impl/2.1.1-SNAPSHOT</bundle>
     </feature>
 </features>
\ No newline at end of file
diff --git a/corpus-server/corpus-server-impl/pom.xml b/corpus-server/corpus-server-impl/pom.xml
new file mode 100644
index 0000000..316c56e
--- /dev/null
+++ b/corpus-server/corpus-server-impl/pom.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+   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.    
+-->
+
+<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">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.apache.opennlp</groupId>
+		<artifactId>corpus-server</artifactId>
+		<version>2.1.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>corpus-server-impl</artifactId>
+	<version>2.1.1-SNAPSHOT</version>
+	<packaging>bundle</packaging>
+
+	<name>Apache OpenNLP Corpus Server Implementation</name>
+	
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.opennlp</groupId>
+			<artifactId>corpus-server-core</artifactId>
+			<version>2.1.1-SNAPSHOT</version>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+				<groupId>org.osgi</groupId>
+				<artifactId>org.osgi.core</artifactId>
+				<version>4.2.0</version>
+				<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+				<groupId>org.osgi</groupId>
+				<artifactId>org.osgi.compendium</artifactId>
+				<version>4.2.0</version>
+				<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+		    <groupId>org.apache.derby</groupId>
+		    <artifactId>derby</artifactId>
+		    <version>10.14.2.0</version>
+		    <scope>provided</scope>
+		</dependency>
+
+		<!-- UIMA and Lucas must be embedded to work properly! -->
+		<dependency>
+			<groupId>org.apache.uima</groupId>
+			<artifactId>uimaj-core</artifactId>
+			<version>${uimaj.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.uima</groupId>
+			<artifactId>Lucas</artifactId>
+			<version>2.3.1</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+		</dependency>
+	</dependencies>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+			</plugin>
+			
+			<!-- to generate the MANIFEST-FILE required by the bundle -->
+			<plugin>
+					<groupId>org.apache.felix</groupId>
+					<artifactId>maven-bundle-plugin</artifactId>
+					<version>5.1.8</version>
+					<extensions>true</extensions>
+					<executions>
+							<execution>
+									<id>bundle-manifest</id>
+									<phase>process-classes</phase>
+									<goals>
+											<goal>manifest</goal>
+									</goals>
+							</execution>
+					</executions>
+					<configuration>
+							<instructions>
+								<Embed-Dependency>*;scope=compile;inline=false</Embed-Dependency>
+								<Embed-Transitive>true</Embed-Transitive>
+									<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+									<Import-Package>
+										!com.sun.jdmk.comm,
+										!javax.persistence.*,
+										!javax.servlet.annotation,
+										!javax.servlet.jsp.*,
+										!javax.microedition.*,
+										!javax.mail.*,
+										!javax.transaction.xa,
+										!javax.jms,
+										!javax.interceptor,!javax.inject,
+										!javax.enterprise.*,
+										!javax.annotation.security,
+										!javax.ejb,
+										!com.sun.xml.fastinfoset.*,
+										!org.jvnet.*,
+										!org.apache.derby.impl.drda,
+										!com.ibm.jvm,
+										!com.sun.net.httpserver,
+										!sun.misc,
+										*,
+										org.apache.opennlp.corpus_server,
+										org.apache.derby.jdbc
+										</Import-Package>
+									<!-- Import-Package>!com.ibm.jvm,!com.sun.jdmk.comm,!com.sun.net.httpserver,*,com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet</Import-Package-->
+									<Export-Package>org.apache.opennlp.corpus_server.impl</Export-Package>
+									<Bundle-Activator>org.apache.opennlp.corpus_server.impl.Activator</Bundle-Activator>
+							</instructions>
+					</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
\ No newline at end of file
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/Activator.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/Activator.java
similarity index 98%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/Activator.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/Activator.java
index b7b778f..712f5fe 100644
--- a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/Activator.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/Activator.java
@@ -33,7 +33,7 @@ public class Activator implements BundleActivator {
     
     corpusServer.start();
     
-    context.registerService(CorpusServer.class.getName(), corpusServer, new Hashtable());
+    context.registerService(CorpusServer.class.getName(), corpusServer, new Hashtable<>());
   }
 
   @Override
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/CorpusServerImpl.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/CorpusServerImpl.java
similarity index 99%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/CorpusServerImpl.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/CorpusServerImpl.java
index 734d848..0330596 100644
--- a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/CorpusServerImpl.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/CorpusServerImpl.java
@@ -154,15 +154,18 @@ public class CorpusServerImpl implements CorpusServer {
   }
     
   }
-  
+
+  @Override
   public CorporaStore getStore() {
     return store;
   }
 
+  @Override
   public SearchService getSearchService() {
     return searchService;
   }
 
+  @Override
   public TaskQueueService getTaskQueueService() {
     return taskQueueService;
   }
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
similarity index 98%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
index 5f1e634..d42e9ce 100644
--- a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorporaStore.java
@@ -57,7 +57,7 @@ public class DerbyCorporaStore extends AbstractCorporaStore {
   }
 
   @Override
-  public void createCorpus(String corpusName, byte[] typeSystemBytes, byte indexMapping[])
+  public void createCorpus(String corpusName, byte[] typeSystemBytes, byte[] indexMapping)
       throws IOException {
     
     try {
@@ -118,7 +118,7 @@ public class DerbyCorporaStore extends AbstractCorporaStore {
 
   public Set<String> getCorpusIds() throws IOException {
     
-    Set<String> corpusIds = new HashSet<String>();
+    Set<String> corpusIds = new HashSet<>();
     
     try {
       Connection conn = dataSource.getConnection();
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
similarity index 96%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
index 6bc3241..5e48821 100644
--- a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/DerbyCorpusStore.java
@@ -34,11 +34,10 @@ import org.apache.opennlp.corpus_server.store.CorpusStore;
 
 public class DerbyCorpusStore implements CorpusStore {
 
-  private final static Logger LOGGER = Logger.getLogger(
-      DerbyCorpusStore.class .getName());
+  private final static Logger LOGGER = Logger.getLogger(DerbyCorpusStore.class .getName());
 
-  private DataSource dataSource;
-  private DerbyCorporaStore store;
+  private final DataSource dataSource;
+  private final DerbyCorporaStore store;
   private final String corpusName;
   
   DerbyCorpusStore(DataSource dataSource, DerbyCorporaStore store, String corpusName) {
@@ -55,7 +54,7 @@ public class DerbyCorpusStore implements CorpusStore {
   @Override
   public byte[] getCAS(String casId) throws IOException {
     
-    byte casBytes[]  = null;
+    byte[] casBytes  = null;
     
     try {
       Connection conn = dataSource.getConnection();
@@ -220,7 +219,7 @@ public class DerbyCorpusStore implements CorpusStore {
   @Override
   public byte[] getTypeSystem() throws IOException {
     
-    byte tsBytes[];
+    byte[] tsBytes;
     
     try {
       Connection conn = dataSource.getConnection();
@@ -252,7 +251,7 @@ public class DerbyCorpusStore implements CorpusStore {
   
   @Override
   public byte[] getIndexMapping() throws IOException {
-    byte indexMappingBytes[] = null;
+    byte[] indexMappingBytes = null;
     
     try {
       Connection conn = dataSource.getConnection();
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneIndexer.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneIndexer.java
similarity index 100%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneIndexer.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneIndexer.java
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
similarity index 98%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
index 5f830e2..44611ae 100644
--- a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
+++ b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/LuceneSearchService.java
@@ -76,13 +76,13 @@ public class LuceneSearchService implements SearchService {
   /**
    * Maps the corpus id to the Lucas Indexer Analysis Engine.
    */
-  private Map<String, AnalysisEngine> corpusIndexerMap = new HashMap<String, AnalysisEngine>();
+  private final Map<String, AnalysisEngine> corpusIndexerMap = new HashMap<>();
   
   /**
    * Maps the corpus id to the Index Server instance, if one exists, otherwise
    * it will be created on first access.
    */
-  private Map<String, IndexSearcher> corpusSearcherMap = new HashMap<String, IndexSearcher>();
+  private final Map<String, IndexSearcher> corpusSearcherMap = new HashMap<>();
   
   private static File getIndexDirectory(String corpusId) {
     return new File("index" + File.separator + corpusId);
@@ -188,7 +188,7 @@ public class LuceneSearchService implements SearchService {
       }
       
       FileResourceSpecifier indexWriterFileSpecifier = new FileResourceSpecifier_impl();
-      indexWriterFileSpecifier.setFileUrl(indexWriterTmpFile.toURL().toString());
+      indexWriterFileSpecifier.setFileUrl(indexWriterTmpFile.toURI().toString());
       // TODO: This will fail ...
       specifier.getResourceManagerConfiguration().getExternalResources()[0].setResourceSpecifier(indexWriterFileSpecifier);
       
diff --git a/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/UimaUtil.java b/corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/UimaUtil.java
similarity index 100%
rename from corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/UimaUtil.java
rename to corpus-server/corpus-server-impl/src/main/java/org/apache/opennlp/corpus_server/impl/UimaUtil.java
diff --git a/corpus-server/src/main/resources/org/apache/opennlp/corpus_server/search/IndexWriter.properties b/corpus-server/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/IndexWriter.properties
similarity index 100%
rename from corpus-server/src/main/resources/org/apache/opennlp/corpus_server/search/IndexWriter.properties
rename to corpus-server/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/IndexWriter.properties
diff --git a/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/LuceneIndexer.xml b/corpus-server/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/LuceneIndexer.xml
similarity index 100%
rename from corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/LuceneIndexer.xml
rename to corpus-server/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/LuceneIndexer.xml
diff --git a/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/TypeSystem.xml b/corpus-server/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/TypeSystem.xml
similarity index 100%
rename from corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/TypeSystem.xml
rename to corpus-server/corpus-server-impl/src/main/resources/org/apache/opennlp/corpus_server/impl/TypeSystem.xml
diff --git a/corpus-server-tools/bin/cs-tools b/corpus-server/corpus-server-tools/bin/cs-tools
similarity index 100%
rename from corpus-server-tools/bin/cs-tools
rename to corpus-server/corpus-server-tools/bin/cs-tools
diff --git a/corpus-server-tools/pom.xml b/corpus-server/corpus-server-tools/pom.xml
similarity index 69%
rename from corpus-server-tools/pom.xml
rename to corpus-server/corpus-server-tools/pom.xml
index a490d58..843d3eb 100644
--- a/corpus-server-tools/pom.xml
+++ b/corpus-server/corpus-server-tools/pom.xml
@@ -21,59 +21,46 @@
 
 <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">
 	<modelVersion>4.0.0</modelVersion>
-
 	<parent>
-		<groupId>org.apache</groupId>
-		<artifactId>apache</artifactId>
-		<version>9</version>
-		<relativePath />
+		<groupId>org.apache.opennlp</groupId>
+		<artifactId>corpus-server</artifactId>
+		<version>2.1.1-SNAPSHOT</version>
 	</parent>
 
-	<groupId>org.apache.opennlp</groupId>
 	<artifactId>corpus-server-tools</artifactId>
-	<version>0.0.1-incubating-SNAPSHOT</version>
+	<version>2.1.1-incubating-SNAPSHOT</version>
 	<packaging>jar</packaging>
 
-	<name>OpenNLP Corpus Server Shell</name>
-
-	<prerequisites>
-		<maven>3.0</maven>
-	</prerequisites>
+	<name>Apache OpenNLP Corpus Server Shell</name>
 
-	<repositories>
-		<repository>
-			<id>maven2-repository.java.net</id>
-			<name>Java.net Repository for Maven</name>
-			<url>http://download.java.net/maven/2/</url>
-			<layout>default</layout>
-		</repository>
-	</repositories>
-	
 	<dependencies>
+		<dependency>
+			<groupId>org.apache.opennlp</groupId>
+			<artifactId>corpus-server-core</artifactId>
+			<version>2.1.1-SNAPSHOT</version>
+			<scope>provided</scope>
+		</dependency>
+
 		<dependency>
 		    <groupId>com.sun.jersey</groupId>
 		    <artifactId>jersey-json</artifactId>
-		    <version>1.8</version>
 		</dependency>
 
 		<dependency>
 		    <groupId>com.sun.jersey</groupId>
 		    <artifactId>jersey-client</artifactId>
-		    <version>1.8</version>
 		</dependency>
     
     	<dependency>
 			<groupId>org.apache.uima</groupId>
 			<artifactId>uimaj-core</artifactId>
-			<version>2.3.1</version>
+			<version>${uimaj.version}</version>
 			<scope>compile</scope>
 		</dependency>
 		
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
-			<scope>test</scope>
 		</dependency>
 	</dependencies>
 	
@@ -82,11 +69,6 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.6</source>
-					<target>1.6</target>
-          			<compilerArgument>-Xlint</compilerArgument>
-				</configuration>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CASImporter.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CASImporter.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CASImporter.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CASImporter.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CorpusBackup.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateCorpus.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateCorpus.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateCorpus.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateCorpus.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateTaskQueue.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateTaskQueue.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateTaskQueue.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/CreateTaskQueue.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/DropCorpus.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/DropCorpus.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/DropCorpus.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/DropCorpus.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/FileUtil.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/RemoveCAS.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/RemoveCAS.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/RemoveCAS.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/RemoveCAS.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/ReplaceTypeSystem.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/ReplaceTypeSystem.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/ReplaceTypeSystem.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/ReplaceTypeSystem.java
diff --git a/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/SearchCorpus.java b/corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/SearchCorpus.java
similarity index 100%
rename from corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/SearchCorpus.java
rename to corpus-server/corpus-server-tools/src/main/java/org/apache/opennlp/corpus_server/tools/SearchCorpus.java
diff --git a/corpus-server/pom.xml b/corpus-server/pom.xml
index 3b210c1..6d0b918 100644
--- a/corpus-server/pom.xml
+++ b/corpus-server/pom.xml
@@ -21,170 +21,122 @@
 
 <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">
 	<modelVersion>4.0.0</modelVersion>
-
 	<parent>
-		<groupId>org.apache</groupId>
-		<artifactId>apache</artifactId>
-		<version>9</version>
-		<relativePath />
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <!-- TODO OPENNLP-1452 once this is resolved, move to 29 as well. -->
+    <version>18</version>
+    <relativePath />
 	</parent>
 
 	<groupId>org.apache.opennlp</groupId>
 	<artifactId>corpus-server</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-	<packaging>bundle</packaging>
-
-	<name>OpenNLP Corpus Server</name>
-
-	<prerequisites>
-		<maven>3.0</maven>
-	</prerequisites>
-
-	<repositories>
-		<repository>
-		    <id>maven2-repository.java.net</id>
-		    <name>Java.net Repository for Maven</name>
-		    <url>http://download.java.net/maven/2/</url>
-		    <layout>default</layout>
-		</repository>
-	</repositories>
-	
-	<dependencies>
-	
-	    <dependency>
-      		<groupId>javax.servlet</groupId>
-      		<artifactId>servlet-api</artifactId>
-      		<version>2.5</version>
-      		<scope>provided</scope>
-    	</dependency>
-    
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>4.2.0</version>
-            <scope>provided</scope>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <version>4.2.0</version>
+	<version>2.1.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>Apache OpenNLP Corpus Server</name>
+
+	<modules>
+		<module>corpus-server-core</module>
+		<module>corpus-server-impl</module>
+		<module>corpus-server-tools</module>
+		<module>corpus-server-connector</module>
+	</modules>
+
+  <properties>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+    <derby.version>10.14.2.0</derby.version>
+    <uimaj.version>3.3.1</uimaj.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
             <scope>provided</scope>
         </dependency>
 
-		<dependency>
-			<groupId>com.sun.jersey</groupId>
-			<artifactId>jersey-servlet</artifactId>
-			<version>1.12</version>
-			<scope>provided</scope>
-		</dependency>
-		
-		<dependency>
-		    <groupId>com.sun.jersey</groupId>
-		    <artifactId>jersey-json</artifactId>
-		    <version>1.12</version>
-		    <scope>provided</scope>
-		</dependency>
-
-		<dependency>
-		    <groupId>com.sun.jersey</groupId>
-		    <artifactId>jersey-client</artifactId>
-		    <version>1.12</version>
-		    <scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-	
+      <dependency>
+          <groupId>org.osgi</groupId>
+          <artifactId>org.osgi.core</artifactId>
+          <version>4.2.0</version>
+          <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.osgi</groupId>
+          <artifactId>org.osgi.compendium</artifactId>
+          <version>4.2.0</version>
+          <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>com.sun.jersey</groupId>
+        <artifactId>jersey-servlet</artifactId>
+        <version>1.12</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>com.sun.jersey</groupId>
+          <artifactId>jersey-json</artifactId>
+          <version>1.12</version>
+          <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>com.sun.jersey</groupId>
+          <artifactId>jersey-client</artifactId>
+          <version>1.12</version>
+          <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>4.13.2</version>
+        <scope>test</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
 	<build>
+	  <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+            <source>${maven.compiler.source}</source>
+            <target>${maven.compiler.target}</target>
+            <compilerArgument>-Xlint</compilerArgument>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
 		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.6</source>
-					<target>1.6</target>
-          			<compilerArgument>-Xlint</compilerArgument>
-				</configuration>
-			</plugin>
-			
-			<!-- to generate the MANIFEST-FILE required by the bundle -->
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.7</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <manifestLocation>${project.build.directory}/META-INF</manifestLocation>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Import-Package>
-                        	!javax.persistence.*,
-                        	!javax.servlet.annotation,
-                        	!javax.servlet.jsp.*,
-                        	!javax.microedition.*,
-                        	!javax.mail.*,
-                        	!javax.transaction.xa,
-                        	!javax.jms,
-                        	!javax.interceptor,!javax.inject,
-                        	!javax.enterprise.*,
-                        	!javax.annotation.security,
-                        	!javax.ejb,
-                        	!com.sun.xml.fastinfoset.*,
-                        	!org.jvnet.*,
-                        	!org.apache.derby.impl.drda,
-                        	!com.ibm.jvm,
-                        	!com.sun.jdmk.comm,
-                        	!com.sun.net.httpserver,
-                        	!sun.misc,
-                        	javax.servlet,
-                        	*,
-                        	com.sun.jersey.json.impl.provider.entity.*,
-                        	com.sun.jersey.json.*,
-                        	org.codehaus.jackson.*,
-                        	org.codehaus.jackson.xc,
-                        	org.apache.opennlp.corpus_server,
-                        	com.sun.jersey.api.core,
-                        	com.sun.jersey.spi.container.servlet</Import-Package>
-                        <!-- Import-Package>org.apache.derby.jdbc, !com.ibm.jvm,!com.sun.jdmk.comm,!com.sun.net.httpserver,*,com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet</Import-Package-->
-                        <Export-Package>org.apache.opennlp.corpus_server.*, org.apache.opennlp.corpus_server.search</Export-Package>
-                        <Webapp-Context>rest</Webapp-Context>
-                        <Web-ContextPath>rest</Web-ContextPath>
-                        <Bundle-Activator>org.apache.opennlp.corpus_server.CorpusServerBundle</Bundle-Activator>
-                    </instructions>
-                </configuration>
-            </plugin>
-            
-            <!-- plugin>
-	        <groupId>org.apache.karaf.tooling</groupId>
-	        <artifactId>features-maven-plugin</artifactId>
-	        <version>2.2.4</version>
-	        <executions>
-	          <execution>
-	            <id>generate-features-file</id>
-	            <goals>
-	              <goal>generate-features-file</goal>
-	            </goals>
-	            <configuration>
-	              <karafVersion>2.2.4</karafVersion>
-	            </configuration>
-	          </execution>
-	        </executions>
-	      </plugin -->
+
+      <!-- plugin>
+				<groupId>org.apache.karaf.tooling</groupId>
+				<artifactId>features-maven-plugin</artifactId>
+				<version>2.2.4</version>
+				<executions>
+					<execution>
+						<id>generate-features-file</id>
+						<goals>
+							<goal>generate-features-file</goal>
+						</goals>
+						<configuration>
+							<karafVersion>2.2.4</karafVersion>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin -->
       
 		</plugins>
 	</build>