improves testability of corpus-server-connector
diff --git a/corpus-server/corpus-server-connector/pom.xml b/corpus-server/corpus-server-connector/pom.xml
index 389cf55..d4f3028 100644
--- a/corpus-server/corpus-server-connector/pom.xml
+++ b/corpus-server/corpus-server-connector/pom.xml
@@ -102,6 +102,27 @@
<version>${derby.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derbytools</artifactId>
+ <version>${derby.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jul-to-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j2-impl</artifactId>
+ <version>${log4j2.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/corpus-server/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
index 31f7741..7abe4df 100644
--- a/corpus-server/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
@@ -39,8 +39,8 @@
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.cas.impl.XmiCasSerializer;
import org.apache.uima.resource.ResourceInitializationException;
-import org.apache.uima.util.Level;
-import org.apache.uima.util.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
/**
@@ -48,6 +48,8 @@
*/
public class CSCasWriter extends CasAnnotator_ImplBase {
+ private static final Logger LOG = LoggerFactory.getLogger(CSCasWriter.class);
+
private String serverAddress;
private String corpusName;
@@ -56,7 +58,6 @@
private Type idType;
private Feature idFeature;
- private Logger logger;
@Override
public void initialize(UimaContext context) throws ResourceInitializationException {
@@ -64,8 +65,6 @@
serverAddress = (String) context.getConfigParameterValue(CSQueueCollectionReader.SERVER_ADDRESS);
corpusName = (String) context.getConfigParameterValue(CSQueueCollectionReader.CORPUS_NAME);
-
- logger = context.getLogger();
}
@Override
@@ -131,13 +130,9 @@
private void logResponse(Response res, String casId) {
int statusCode = res.getStatus();
if (statusCode >= Response.Status.BAD_REQUEST.getStatusCode()) {
- if (logger.isLoggable(Level.SEVERE)) {
- logger.log(Level.SEVERE, "Error (" + statusCode + "), " + action + ", " + casId);
- }
+ LOG.error("Error ({}), " + action + ", {}", statusCode, casId);
} else {
- if (logger.isLoggable(Level.FINE)) {
- logger.log(Level.FINE, "OK (" + statusCode + "), " + action + ", " + casId);
- }
+ LOG.debug("OK ({}), " + action + ", {}", statusCode, casId);
}
}
}
diff --git a/corpus-server/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
index f933ff8..bca229d 100644
--- a/corpus-server/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
@@ -38,10 +38,10 @@
import org.apache.uima.collection.CollectionException;
import org.apache.uima.collection.CollectionReader_ImplBase;
import org.apache.uima.resource.ResourceInitializationException;
-import org.apache.uima.util.Level;
-import org.apache.uima.util.Logger;
import org.apache.uima.util.Progress;
import org.glassfish.jersey.client.ClientResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A {@link org.apache.uima.collection.CollectionReader} which reads {@link CAS CASes} from a corpus
@@ -49,6 +49,8 @@
*/
public class CSQueueCollectionReader extends CollectionReader_ImplBase {
+ private static final Logger LOG = LoggerFactory.getLogger(CSQueueCollectionReader.class);
+
static final String SERVER_ADDRESS = "ServerAddress";
static final String CORPUS_NAME = "CorpusName";
@@ -66,15 +68,10 @@
private Iterator<String> casIds;
- private Logger logger;
-
-
@Override
public void initialize() throws ResourceInitializationException {
super.initialize();
- logger = getLogger();
-
serverAddress = (String) getConfigParameterValue(SERVER_ADDRESS);
// Retrieve corpus address ...
@@ -103,9 +100,7 @@
new RuntimeException("Failed to create queue: " + response.getStatus()));
}
- if (logger.isLoggable(Level.INFO)) {
- logger.log(Level.INFO, "Successfully created queue: " + queueName + " for corpus: " + corpusName);
- }
+ LOG.info("Successfully created queue: {} for corpus: {}", queueName, corpusName);
}
}
@@ -115,7 +110,7 @@
WebTarget r = c.target(serverAddress + "/queues/" + queueName);
while (true) {
- System.out.println("Requesting next CAS ID!");
+ LOG.info("Requesting next CAS ID!");
// TODO: Make query configurable ...
try (Response response = r.path("_nextTask").request(MediaType.APPLICATION_JSON)
@@ -123,10 +118,10 @@
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
String casId = response.readEntity(String.class);
- System.out.println("Received CAS ID: " + casId);
+ LOG.info("Received CAS ID: {}", casId);
casIdList.add(casId);
} else if (response.getStatus() == Response.Status.NO_CONTENT.getStatusCode()) {
- System.out.println("##### FINISHED #####");
+ LOG.info("##### FINISHED #####");
break;
}
}
@@ -161,7 +156,7 @@
try (InputStream casIn = casResponse.getEntityStream()) {
UimaUtil.deserializeXmiCAS(cas, casIn);
} catch (IOException e) {
- logger.log(Level.SEVERE,"Failed to load CAS: " + casId + " code: " + casResponse.getStatus());
+ LOG.error("Failed to load CAS: {} code: {}", casId, casResponse.getStatus());
throw e;
}
diff --git a/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/AbstractCSTest.java b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/AbstractCSTest.java
index 39c62e3..c596950 100644
--- a/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/AbstractCSTest.java
+++ b/corpus-server/corpus-server-connector/src/test/java/org/apache/opennlp/corpus_server/connector/AbstractCSTest.java
@@ -27,6 +27,14 @@
public abstract class AbstractCSTest {
+ static {
+ // Remove existing handlers
+ org.slf4j.bridge.SLF4JBridgeHandler.removeHandlersForRootLogger();
+
+ // Install SLF4J bridge
+ org.slf4j.bridge.SLF4JBridgeHandler.install();
+ }
+
protected static final String BASE_PATH = CSCollectionReaderTest.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm();
protected static void cleanTestDB() throws IOException {
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
index 35ec15b..14b915e 100644
--- 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
@@ -35,7 +35,6 @@
import static org.junit.jupiter.api.Assertions.fail;
-@Disabled
class CSCasWriterTest extends AbstractCSTest {
private static final String CCPATH = "/CSCasConsumerTestDescriptor.xml";
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
index 71b481b..0ef0d8c 100644
--- 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
@@ -17,9 +17,9 @@
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.opennlp.corpus_server.store.CorpusStore;
import org.apache.uima.UIMAFramework;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.impl.XmiCasSerializer;
@@ -46,7 +46,6 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
-@Disabled
class CSCollectionReaderTest extends AbstractCSTest {
private static final String CRDPATH = "/CSCollectionReaderTestDescriptor.xml";
@@ -61,11 +60,10 @@
ByteArrayOutputStream os = new ByteArrayOutputStream()) {
TypeSystemDescription tsd = UimaUtil.createTypeSystemDescription(in);
tsd.toXML(os);
- CorporaStore corporaStore = new DerbyCorporaStore();
-
- corporaStore.initialize(BASE_PATH.replace("file:", "").replace("/test-classes", ""));
+ CorporaStore cs = new DerbyCorporaStore();
+ cs.initialize(BASE_PATH.replace("file:", "").replace("/test-classes", ""));
byte[] indexMapping = new byte[] {};
- corporaStore.createCorpus("wikinews", os.toByteArray(), indexMapping);
+ cs.createCorpus("wikinews", os.toByteArray(), indexMapping);
os.reset();
CAS cas = UimaUtil.createEmptyCAS(tsd);
@@ -76,8 +74,9 @@
a.addToIndexes();
XmiCasSerializer.serialize(cas, os);
- corporaStore.getCorpus("wikinews").addCAS("111", os.toByteArray());
- corporaStore.getCorpus("wikinews").addCAS("222", os.toByteArray());
+ CorpusStore wikiNews = cs.getCorpus("wikinews");
+ wikiNews.addCAS("111", os.toByteArray());
+ wikiNews.addCAS("222", os.toByteArray());
} catch (Exception e) {
fail(e.getLocalizedMessage());
}
@@ -85,8 +84,8 @@
@Test
@Disabled
- // TODO Investigate why this test fails with:
- // No value has been assigned to the mandatory configuration parameter corpusName.
+ // TODO Investigate why this test fails with:
+ // java.net.ConnectException: Connection refused
void explicitCRTest() {
try {
XMLInputSource s = new XMLInputSource(CSCollectionReaderTest.class.getResource(CRDPATH));
@@ -102,7 +101,7 @@
cr.getNext(cas);
assertFalse(cr.hasNext());
} catch (Exception e) {
- fail(e.getLocalizedMessage());
+ fail(e.getLocalizedMessage(), e);
}
}
diff --git a/corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml b/corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml
index 5caba80..912aef5 100644
--- a/corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml
+++ b/corpus-server/corpus-server-connector/src/test/resources/CSCollectionReaderTestDescriptor.xml
@@ -22,12 +22,30 @@
<implementationName>org.apache.opennlp.corpus_server.connector.CSQueueCollectionReader</implementationName>
<processingResourceMetaData>
<name>CSCollectionReaderDescriptor</name>
- <description></description>
+ <description/>
<version>1.0</version>
- <vendor></vendor>
+ <vendor/>
<configurationParameters>
<configurationParameter>
- <name>corpusName</name>
+ <name>ServerAddress</name>
+ <type>String</type>
+ <multiValued>false</multiValued>
+ <mandatory>true</mandatory>
+ </configurationParameter>
+ <configurationParameter>
+ <name>CorpusName</name>
+ <type>String</type>
+ <multiValued>false</multiValued>
+ <mandatory>true</mandatory>
+ </configurationParameter>
+ <configurationParameter>
+ <name>QueueName</name>
+ <type>String</type>
+ <multiValued>false</multiValued>
+ <mandatory>true</mandatory>
+ </configurationParameter>
+ <configurationParameter>
+ <name>SearchQuery</name>
<type>String</type>
<multiValued>false</multiValued>
<mandatory>true</mandatory>
@@ -39,7 +57,38 @@
<mandatory>true</mandatory>
</configurationParameter>
</configurationParameters>
- <configurationParameterSettings/>
+ <configurationParameterSettings>
+ <nameValuePair>
+ <name>ServerAddress</name>
+ <value>
+ <string>http://localhost:8080</string>
+ </value>
+ </nameValuePair>
+ <nameValuePair>
+ <name>CorpusName</name>
+ <value>
+ <string>Test</string>
+ </value>
+ </nameValuePair>
+ <nameValuePair>
+ <name>QueueName</name>
+ <value>
+ <string>qn1</string>
+ </value>
+ </nameValuePair>
+ <nameValuePair>
+ <name>SearchQuery</name>
+ <value>
+ <string>sq1</string>
+ </value>
+ </nameValuePair>
+ <nameValuePair>
+ <name>casIds</name>
+ <value>
+ <array><string>Id1</string></array>
+ </value>
+ </nameValuePair>
+ </configurationParameterSettings>
<typeSystemDescription/>
<typePriorities/>
<fsIndexCollection/>
diff --git a/corpus-server/corpus-server-connector/src/test/resources/log4j2.xml b/corpus-server/corpus-server-connector/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..817d9ff
--- /dev/null
+++ b/corpus-server/corpus-server-connector/src/test/resources/log4j2.xml
@@ -0,0 +1,36 @@
+<?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.
+-->
+<Configuration>
+ <Appenders>
+ <Console name="STDOUT" target="SYSTEM_OUT">
+ <!--
+ The pattern can be adjusted as needed, see https://logging.apache.org/log4j/2.x/manual/layouts.html
+ -->
+ <PatternLayout pattern="%m%n"/>
+ </Console>
+ </Appenders>
+
+ <Loggers>
+ <Logger name="org.apache.opennlp.corpus_server.connector" level="info"/>
+ <Root level="WARN">
+ <AppenderRef ref="STDOUT"/>
+ </Root>
+ </Loggers>
+</Configuration>
diff --git a/corpus-server/corpus-server-impl/pom.xml b/corpus-server/corpus-server-impl/pom.xml
index 0fc030e..8d47c7f 100644
--- a/corpus-server/corpus-server-impl/pom.xml
+++ b/corpus-server/corpus-server-impl/pom.xml
@@ -70,14 +70,24 @@
<groupId>org.apache.uima</groupId>
<artifactId>uimaj-core</artifactId>
<version>${uimaj.version}</version>
- <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>${derby.version}</version>
</dependency>
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>Lucas</artifactId>
<version>2.3.1</version>
- <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
@@ -94,6 +104,7 @@
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
</dependency>
+
</dependencies>
<build>
diff --git a/corpus-server/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
index 45d8f6e..815918f 100644
--- a/corpus-server/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
@@ -29,10 +29,9 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import javax.sql.DataSource;
+import org.slf4j.LoggerFactory;
import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
import org.apache.derby.jdbc.EmbeddedDataSource;
@@ -42,7 +41,7 @@
public class DerbyCorporaStore extends AbstractCorporaStore {
- private final static Logger LOGGER = Logger.getLogger(DerbyCorporaStore.class .getName());
+ private final static org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DerbyCorporaStore.class.getName());
public static final String DB_NAME = "XmiCasDB";
private DataSource dataSource = null;
@@ -118,13 +117,11 @@
}
} catch (SQLException e) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.log(Level.SEVERE, "Failed to create corpus: " + corpusName, e);
- }
+ LOGGER.error("Failed to create corpus: {}", corpusName, e);
throw new IOException(e);
}
-
- LOGGER.info("Created new corpus: " + corpusName);
+
+ LOGGER.info("Created new corpus: {}", corpusName);
for (CorporaChangeListener listener : getListeners()) {
// TODO: Maybe optimize this, or just pass the corpus id
@@ -149,9 +146,7 @@
}
} catch (SQLException e) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.log(Level.SEVERE, "Failed to retrieve corpus ids!", e);
- }
+ LOGGER.error("Failed to retrieve corpus ids!", e);
throw new IOException(e);
}
@@ -168,9 +163,7 @@
conn.commit();
} catch (SQLException e) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.log(Level.SEVERE, "Failed to create corpus: " + corpusName, e);
- }
+ LOGGER.error("Failed to create corpus: {}", corpusName, e);
throw new IOException(e);
}
@@ -205,10 +198,7 @@
}
}
} catch (SQLException e) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.log(Level.SEVERE, "Failed to check if corpus exists!", e);
- }
-
+ LOGGER.error("Failed to check if corpus exists!", e);
return null;
}
diff --git a/corpus-server/pom.xml b/corpus-server/pom.xml
index 88d734e..9b4b35a 100644
--- a/corpus-server/pom.xml
+++ b/corpus-server/pom.xml
@@ -41,10 +41,10 @@
</modules>
<properties>
- <derby.version>10.17.1.0</derby.version>
<!-- A minimum JDK version of 21 is required for modern Derby versions -->
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
+ <derby.version>10.17.1.0</derby.version>
</properties>
<dependencyManagement>
@@ -120,7 +120,10 @@
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
- <compilerArgument>-Xlint</compilerArgument>
+ <showWarnings>true</showWarnings>
+ <compilerArgs>
+ <arg>-Xlint:-options</arg>
+ </compilerArgs>
</configuration>
</plugin>
</plugins>
diff --git a/pom.xml b/pom.xml
index 9e75a34..c4f5ef3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -565,7 +565,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.14.0</version>
<configuration>
<release>${java.version}</release>
<compilerArgument>-Xlint</compilerArgument>