You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by jk...@apache.org on 2021/03/26 12:31:20 UTC

[unomi] branch unomi-1.5.x updated: UNOMI-451 : Use bus service rest server (#269)

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

jkevan pushed a commit to branch unomi-1.5.x
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/unomi-1.5.x by this push:
     new 15e4d30  UNOMI-451 : Use bus service rest server (#269)
15e4d30 is described below

commit 15e4d3034f35bd89a0efa5daf8359228a0d84b51
Author: kevan Jahanshahi <ke...@jahia.com>
AuthorDate: Fri Mar 26 13:29:17 2021 +0100

    UNOMI-451 : Use bus service rest server (#269)
    
    * UNOMI-451: implement REST server bus as OSGI Service to correctly reload server when it's necessary and avoid duplicated features in the bus
    
    * UNOMI-451: remove unecessary class import
---
 .../java/org/apache/unomi/rest/RestServer.java     | 27 +++++++++---------
 .../java/org/apache/unomi/rest/RestServerBus.java  | 33 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/rest/src/main/java/org/apache/unomi/rest/RestServer.java b/rest/src/main/java/org/apache/unomi/rest/RestServer.java
index 9004aae..12c60ac 100644
--- a/rest/src/main/java/org/apache/unomi/rest/RestServer.java
+++ b/rest/src/main/java/org/apache/unomi/rest/RestServer.java
@@ -18,9 +18,7 @@ package org.apache.unomi.rest;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
 import org.apache.cxf.endpoint.Server;
-import org.apache.cxf.feature.LoggingFeature;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.openapi.OpenApiCustomizer;
 import org.apache.cxf.jaxrs.openapi.OpenApiFeature;
@@ -29,16 +27,14 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.*;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.ws.rs.ext.ExceptionMapper;
+import javax.xml.namespace.QName;
 import java.util.*;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -50,6 +46,7 @@ public class RestServer {
     private Server server;
     private BundleContext bundleContext;
     private ServiceTracker jaxRSServiceTracker;
+    private Bus serverBus;
     private List<ExceptionMapper> exceptionMappers = new ArrayList<>();
     private long timeOfLastUpdate = System.currentTimeMillis();
     private Timer refreshTimer = null;
@@ -57,6 +54,13 @@ public class RestServer {
 
     final List<Object> serviceBeans = new CopyOnWriteArrayList<>();
 
+    private static final QName UNOMI_REST_SERVER_END_POINT_NAME = new QName("http://rest.unomi.apache.org/", "UnomiRestServerEndPoint");
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    public void setServerBus(Bus serverBus) {
+        this.serverBus = serverBus;
+    }
+
     @Reference
     public void addExceptionMapper(ExceptionMapper exceptionMapper) {
         this.exceptionMappers.add(exceptionMapper);
@@ -151,11 +155,7 @@ public class RestServer {
 
         JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
         jaxrsServerFactoryBean.setAddress("/");
-        Bus bus = BusFactory.getDefaultBus();
-        // bus.getFeatures().add(new LoggingFeature());
-        bus.getFeatures().add(new LoggingFeature());
-        bus.getFeatures().add(new org.apache.cxf.metrics.MetricsFeature());
-        jaxrsServerFactoryBean.setBus(bus);
+        jaxrsServerFactoryBean.setBus(serverBus);
         jaxrsServerFactoryBean.setProvider(
                 new JacksonJaxbJsonProvider(
                         new org.apache.unomi.persistence.spi.CustomObjectMapper(),
@@ -171,10 +171,11 @@ public class RestServer {
         }
         jaxrsServerFactoryBean.setServiceBeans(serviceBeans);
         jaxrsServerFactoryBean.getFeatures().add(openApiFeature);
+
         if (serviceBeans.size() > 0) {
             logger.info("Starting JAX RS Endpoint...");
             server = jaxrsServerFactoryBean.create();
+            server.getEndpoint().getEndpointInfo().setName(UNOMI_REST_SERVER_END_POINT_NAME);
         }
     }
-
-}
+}
\ No newline at end of file
diff --git a/rest/src/main/java/org/apache/unomi/rest/RestServerBus.java b/rest/src/main/java/org/apache/unomi/rest/RestServerBus.java
new file mode 100644
index 0000000..6ceb6ed
--- /dev/null
+++ b/rest/src/main/java/org/apache/unomi/rest/RestServerBus.java
@@ -0,0 +1,33 @@
+/*
+ * 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.unomi.rest;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.extension.ExtensionManagerBus;
+import org.apache.cxf.feature.LoggingFeature;
+import org.osgi.service.component.annotations.Component;
+
+/**
+ * Rest server bus
+ */
+@Component(service = Bus.class)
+public class RestServerBus extends ExtensionManagerBus implements Bus {
+    public RestServerBus() {
+        this.getFeatures().add(new LoggingFeature());
+        this.getFeatures().add(new org.apache.cxf.metrics.MetricsFeature());
+    }
+}