You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opennlp.apache.org by jo...@apache.org on 2012/03/22 15:25:15 UTC
svn commit: r1303796 - in
/opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server:
CorpusServerApplication.java CorpusServerBundle.java
Author: joern
Date: Thu Mar 22 14:25:15 2012
New Revision: 1303796
URL: http://svn.apache.org/viewvc?rev=1303796&view=rev
Log:
OPENNLP-476 Added OSGi bundle and the application for the rest servlet
Added:
opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java (with props)
opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java (with props)
Added: opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java
URL: http://svn.apache.org/viewvc/opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java?rev=1303796&view=auto
==============================================================================
--- opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java (added)
+++ opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java Thu Mar 22 14:25:15 2012
@@ -0,0 +1,36 @@
+/*
+ * 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;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+public class CorpusServerApplication extends Application {
+
+ @Override
+ public Set<Class<?>> getClasses() {
+ Set<Class<?>> result = new HashSet<Class<?>>();
+ result.add(CorporaResource.class);
+ result.add(CorpusResource.class);
+ result.add(TaskQueuesResource.class);
+ result.add(TaskQueueResource.class);
+ return result;
+ }
+}
Propchange: opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerApplication.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java
URL: http://svn.apache.org/viewvc/opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java?rev=1303796&view=auto
==============================================================================
--- opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java (added)
+++ opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java Thu Mar 22 14:25:15 2012
@@ -0,0 +1,157 @@
+/*
+ * 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;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import javax.servlet.ServletException;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.http.HttpService;
+import org.osgi.service.http.NamespaceException;
+import org.osgi.util.tracker.ServiceTracker;
+
+import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+public class CorpusServerBundle implements BundleActivator {
+
+ private static CorpusServerBundle instance;
+
+ private ServiceReference corpusServerServiceReference;
+ private CorpusServer corpusServer;
+
+ private ServiceTracker tracker;
+
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ instance = this;
+
+ // Registers a service listener to listen for a corpus server implementation.
+ // The first implementation which can be found will be used. All other implementations
+ // which could be there as well will be ignored.
+
+ context.getServiceReference(CorpusServer.class.getName());
+
+ ServiceListener sl = new ServiceListener() {
+ public void serviceChanged(ServiceEvent ev) {
+
+ switch (ev.getType()) {
+ case ServiceEvent.REGISTERED: {
+
+ if (corpusServer == null) {
+ System.out.println("Registered a Corpus Server implementation!");
+
+ corpusServerServiceReference = ev.getServiceReference();
+ corpusServer = (CorpusServer) context
+ .getService(corpusServerServiceReference);
+ }
+ }
+ break;
+ case ServiceEvent.UNREGISTERING: {
+
+ if (ev.getServiceReference().equals(corpusServerServiceReference)) {
+ System.out.println("Unregistered Corpus Server implementation!");
+
+ context.ungetService(corpusServerServiceReference);
+ corpusServerServiceReference = null;
+ corpusServer = null;
+ }
+ }
+ break;
+ }
+ }
+ };
+
+ String filter = "(objectclass=" + CorpusServer.class.getName() + ")";
+
+ try {
+ context.addServiceListener(sl, filter);
+ ServiceReference[] srl = context.getServiceReferences(null, filter);
+ for (int i = 0; srl != null && i < srl.length; i++) {
+ sl.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, srl[i]));
+ }
+ } catch (InvalidSyntaxException e) {
+ e.printStackTrace();
+ // TODO: Log error
+ }
+
+ // Register the Jersey servlet
+ this.tracker = new ServiceTracker(context, HttpService.class.getName(), null) {
+
+ private HttpService httpService;
+
+ @Override
+ public Object addingService(ServiceReference serviceRef) {
+ httpService = (HttpService)super.addingService(serviceRef);
+
+ Dictionary<String, String> jerseyServletParams = new Hashtable<String, String>();
+ jerseyServletParams.put("javax.ws.rs.Application", CorpusServerApplication.class.getName());
+ jerseyServletParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true");
+
+ try {
+ httpService.registerServlet("/rest", new ServletContainer(), jerseyServletParams, null);
+ } catch (ServletException e) {
+ throw new RuntimeException(e);
+ } catch (NamespaceException e) {
+ throw new RuntimeException(e);
+ }
+
+ return httpService;
+ }
+
+ @Override
+ public void removedService(ServiceReference ref, Object service) {
+ if (httpService == service) {
+
+ httpService.unregister("/rest");
+
+ httpService = null;
+ }
+
+ super.removedService(ref, service);
+ }
+ };
+
+ this.tracker.open();
+ }
+
+ public static CorpusServerBundle getInstance() {
+ return instance;
+ }
+
+ public CorpusServer getCorpusServer() {
+ return corpusServer;
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ instance = null;
+
+ if (corpusServerServiceReference != null) {
+ context.ungetService(corpusServerServiceReference);
+ }
+
+ tracker.close();
+ }
+}
Propchange: opennlp/sandbox/corpus-server/src/main/java/org/apache/opennlp/corpus_server/CorpusServerBundle.java
------------------------------------------------------------------------------
svn:mime-type = text/plain