diff --git a/docker/src/main/docker/docker-compose-build.yml b/docker/src/main/docker/docker-compose-build.yml index 9aff5df9b5..e80f55eefe 100644 --- a/docker/src/main/docker/docker-compose-build.yml +++ b/docker/src/main/docker/docker-compose-build.yml @@ -17,34 +17,43 @@ version: '2.4' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28 - volumes: # Persist ES data in seperate "esdata" volume - - esdata1:/usr/share/elasticsearch/data + image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3 + volumes: + - unomi-3-elasticsearch-data:/usr/share/elasticsearch/data environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms1G -Xmx1G" - discovery.type=single-node - xpack.security.enabled=false - cluster.name=contextElasticSearch - ports: # Expose Elasticsearch ports - - "9200:9200" + networks: + - unomi-3 + ports: + - 9200:9200 - unomi: + node-1: build: . image: apache/unomi:${project.version} - container_name: unomi environment: - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200 ports: - 8181:8181 - 9443:9443 - 8102:8102 + networks: + - unomi-3 links: - elasticsearch depends_on: - elasticsearch - -volumes: # Define seperate volume for Elasticsearch data - esdata1: +volumes: + unomi-3-elasticsearch-data: driver: local + +networks: + unomi-3: + name: unomi-3 + ipam: + config: + - subnet: 172.24.32.0/24 diff --git a/docker/src/main/docker/docker-compose-cluster.yml b/docker/src/main/docker/docker-compose-cluster.yml new file mode 100644 index 0000000000..0eca8d6d52 --- /dev/null +++ b/docker/src/main/docker/docker-compose-cluster.yml @@ -0,0 +1,81 @@ +################################################################################ +# 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. +################################################################################ +version: '2.4' +services: + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3 + volumes: + - unomi-3-elasticsearch-data:/usr/share/elasticsearch/data + environment: + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms1G -Xmx1G" + - discovery.type=single-node + - xpack.security.enabled=false + - cluster.name=contextElasticSearch + networks: + - unomi-3 + ports: + - 9200:9200 + + node-1: + image: apache/unomi:${project.version} + environment: + - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200 + - UNOMI_CLUSTER_NODEID=unomi-3-node-1 + ports: + - 8181:8181 + - 9443:9443 + - 8102:8102 + networks: + - unomi-3 + links: + - elasticsearch + depends_on: + - elasticsearch + + wait-for-node-1: + image: alpine:latest + command: sh -c "echo 'Wait 3 minutes before starting unomi-3-node-2...' && sleep 180" + depends_on: + - node-1 + + node-2: + image: apache/unomi:${project.version} + environment: + - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200 + - UNOMI_CLUSTER_NODEID=unomi-3-node-2 + ports: + - 8182:8181 + - 9444:9443 + - 8103:8102 + networks: + - unomi-3 + links: + - elasticsearch + depends_on: + - wait-for-node-1 + +volumes: + unomi-3-elasticsearch-data: + driver: local + +networks: + unomi-3: + name: unomi-3 + ipam: + config: + - subnet: 172.24.32.0/24 diff --git a/docker/src/main/docker/docker-compose.yml b/docker/src/main/docker/docker-compose.yml index c8fc543ccd..f1b95ba472 100644 --- a/docker/src/main/docker/docker-compose.yml +++ b/docker/src/main/docker/docker-compose.yml @@ -17,33 +17,42 @@ version: '2.4' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28 - volumes: # Persist ES data in separate "esdata" volume - - esdata1:/usr/share/elasticsearch/data + image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3 + volumes: + - unomi-3-elasticsearch-data:/usr/share/elasticsearch/data environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms1G -Xmx1G" - discovery.type=single-node - xpack.security.enabled=false - cluster.name=contextElasticSearch - ports: # Expose Elasticsearch ports - - "9200:9200" + networks: + - unomi-3 + ports: + - 9200:9200 - unomi: + node-1: image: apache/unomi:${project.version} - container_name: unomi environment: - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200 ports: - 8181:8181 - 9443:9443 - 8102:8102 + networks: + - unomi-3 links: - elasticsearch depends_on: - elasticsearch - -volumes: # Define separate volume for Elasticsearch data - esdata1: +volumes: + unomi-3-elasticsearch-data: driver: local + +networks: + unomi-3: + name: unomi-3 + ipam: + config: + - subnet: 172.24.32.0/24 diff --git a/kar/src/main/feature/feature.xml b/kar/src/main/feature/feature.xml index 16cf2e8b82..73222a0e0d 100644 --- a/kar/src/main/feature/feature.xml +++ b/kar/src/main/feature/feature.xml @@ -38,6 +38,8 @@ feature spifly shell-compat + jackson + jackson-jaxrs mvn:org.apache.unomi/unomi-wab/${project.version}/cfg/unomicfg mvn:org.apache.unomi/unomi-persistence-elasticsearch-core/${project.version}/cfg/elasticsearchcfg mvn:org.apache.unomi/unomi-services/${project.version}/cfg/servicescfg @@ -54,21 +56,16 @@ mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore-osgi.version} mvn:org.apache.httpcomponents/httpclient-osgi/${httpclient-osgi.version} mvn:javax.validation/validation-api/${javax-validation.version} - mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version} - mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version} - mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version} - mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson.version} + mvn:com.fasterxml.jackson.datatype/jackson-datatype-jsr310/${jackson.version} mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${jackson.version} - mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/${jackson.version} - mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/${jackson.version} + mvn:com.github.java-json-tools/btf/${btf.version} mvn:com.github.java-json-tools/msg-simple/${msg-simple.version} mvn:com.github.java-json-tools/jackson-coreutils/${jackson-coreutils.version} mvn:com.github.java-json-tools/json-patch/${json-patch.version} mvn:com.google.guava/guava/${guava.version} mvn:org.json/json/${org-json.version} - mvn:org.yaml/snakeyaml/${snakeyaml.version} mvn:joda-time/joda-time/${joda-time.version} mvn:jakarta.annotation/jakarta.annotation-api/${jakarta-annotation-api.version} mvn:com.google.code.findbugs/jsr305/${jsr305.version} diff --git a/package/pom.xml b/package/pom.xml index 6f16886e82..db1fdc9d1a 100644 --- a/package/pom.xml +++ b/package/pom.xml @@ -43,6 +43,7 @@ ${basedir}/../etc/appended-resources + yyyy-MM-dd HH:mm:ss @@ -134,6 +135,53 @@ + + org.codehaus.mojo + buildnumber-maven-plugin + + + validate + + create + + + + + false + false + 8 + + + + org.apache.maven.plugins + maven-resources-plugin + + + process-resources + + resources + + + + + ${project.basedir}/src/main/resources + true + + BUILD + + + + ${project.basedir}/src/main/resources + false + + BUILD + + + + + + + org.apache.maven.plugins maven-dependency-plugin diff --git a/package/src/main/resources/BUILD b/package/src/main/resources/BUILD new file mode 100644 index 0000000000..79751d2fc4 --- /dev/null +++ b/package/src/main/resources/BUILD @@ -0,0 +1,3 @@ +Version: ${project.version} +Build tag: ${buildNumber} +Build timestamp: ${maven.build.timestamp} diff --git a/pom.xml b/pom.xml index bfa0d0355b..f50f9358bd 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ ${java.version} 4.4.8 - 9.0.3 + 9.1.3 9.1.3 1.1.0.Final 3.18.0 @@ -73,7 +73,7 @@ 1.11.0 3.2.2 2.5.2.Final - 2.4 + 2.3 3.10 2.19.0 9.12.2 @@ -92,7 +92,7 @@ 3.0.0 2.1.2 5.27.1 - 3.6.5 + 3.6.8 2.1 4.0.28 4.5.14 diff --git a/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java b/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java index 1ec0c2a369..3431f6453a 100644 --- a/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java +++ b/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java @@ -26,6 +26,7 @@ import org.apache.cxf.jaxrs.openapi.OpenApiCustomizer; import org.apache.cxf.jaxrs.openapi.OpenApiFeature; import org.apache.cxf.jaxrs.security.SimpleAuthorizingFilter; +import org.apache.cxf.jaxrs.swagger.ui.SwaggerUiConfig; import org.apache.cxf.message.Message; import org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter; import org.apache.unomi.api.ContextRequest; @@ -236,6 +237,8 @@ public void run() { openApiFeature.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); openApiFeature.setScan(false); openApiFeature.setUseContextBasedConfig(true); + SwaggerUiConfig swaggerUiConfig = new SwaggerUiConfig().url("openapi.json").deepLinking(true).queryConfigEnabled(false); + openApiFeature.setSwaggerUiConfig(swaggerUiConfig); OpenApiCustomizer customizer = new OpenApiCustomizer(); customizer.setDynamicBasePath(true); openApiFeature.setCustomizer(customizer); diff --git a/rest/src/main/resources/META-INF/resources/webjars/swagger-ui/5.27.1/swagger-initializer.js b/rest/src/main/resources/META-INF/resources/webjars/swagger-ui/5.27.1/swagger-initializer.js new file mode 100644 index 0000000000..b136c77618 --- /dev/null +++ b/rest/src/main/resources/META-INF/resources/webjars/swagger-ui/5.27.1/swagger-initializer.js @@ -0,0 +1,31 @@ +/* + * 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. + */ +window.onload = function() { + window.ui = SwaggerUIBundle({ + url: "/openapi.json", + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }); +};