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"
+ });
+};