You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by dg...@apache.org on 2017/10/06 13:33:30 UTC
[06/15] incubator-unomi git commit: UNOMI-117 add ES document version
to Item.java so we know the version of a document
UNOMI-117 add ES document version to Item.java so we know the version of a document
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/b30d3286
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/b30d3286
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/b30d3286
Branch: refs/heads/master
Commit: b30d3286fe6fb5df5df38e4b9db93e96c1e59f14
Parents: a5beefc
Author: dgaillard <dg...@jahia.com>
Authored: Fri Sep 15 17:58:17 2017 +0200
Committer: dgaillard <dg...@jahia.com>
Committed: Thu Sep 28 10:50:13 2017 +0200
----------------------------------------------------------------------
.../main/java/org/apache/unomi/api/Item.java | 9 +++++
.../elasticsearch/ESCustomObjectMapper.java | 42 ++++++++++++++++++++
.../persistence/elasticsearch/ESItemMixIn.java | 29 ++++++++++++++
.../ElasticSearchPersistenceServiceImpl.java | 22 +++++-----
.../apache/unomi/rest/LocalizationHelper.java | 2 +
.../org/apache/unomi/rest/RESTActionType.java | 9 +++++
.../apache/unomi/rest/RESTConditionType.java | 9 +++++
7 files changed, 112 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/api/src/main/java/org/apache/unomi/api/Item.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/unomi/api/Item.java b/api/src/main/java/org/apache/unomi/api/Item.java
index 2af5c00..2d9099d 100644
--- a/api/src/main/java/org/apache/unomi/api/Item.java
+++ b/api/src/main/java/org/apache/unomi/api/Item.java
@@ -40,6 +40,7 @@ public abstract class Item implements Serializable {
protected String itemId;
protected String itemType;
protected String scope;
+ protected Long version;
public Item() {
try {
@@ -110,4 +111,12 @@ public abstract class Item implements Serializable {
public int hashCode() {
return itemId != null ? itemId.hashCode() : 0;
}
+
+ public Long getVersion() {
+ return version;
+ }
+
+ public void setVersion(Long version) {
+ this.version = version;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESCustomObjectMapper.java
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESCustomObjectMapper.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESCustomObjectMapper.java
new file mode 100644
index 0000000..119d1b2
--- /dev/null
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESCustomObjectMapper.java
@@ -0,0 +1,42 @@
+/*
+ * 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.persistence.elasticsearch;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.unomi.api.Item;
+import org.apache.unomi.persistence.spi.CustomObjectMapper;
+
+/**
+ * @author dgaillard
+ */
+public class ESCustomObjectMapper extends CustomObjectMapper {
+
+ private static final long serialVersionUID = -5017620674440085575L;
+
+ public ESCustomObjectMapper() {
+ super();
+ this.addMixIn(Item.class, ESItemMixIn.class);
+ }
+
+ public static ObjectMapper getObjectMapper() {
+ return ESCustomObjectMapper.Holder.INSTANCE;
+ }
+
+ private static class Holder {
+ static final ESCustomObjectMapper INSTANCE = new ESCustomObjectMapper();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESItemMixIn.java
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESItemMixIn.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESItemMixIn.java
new file mode 100644
index 0000000..40ea3c3
--- /dev/null
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ESItemMixIn.java
@@ -0,0 +1,29 @@
+/*
+ * 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.persistence.elasticsearch;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * @author dgaillard
+ */
+public abstract class ESItemMixIn {
+
+ public ESItemMixIn() { }
+
+ @JsonIgnore abstract Long getVersion();
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
----------------------------------------------------------------------
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
index bb84d81..f6d570e 100644
--- a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
@@ -26,7 +26,6 @@ import org.apache.unomi.api.query.DateRange;
import org.apache.unomi.api.query.IpRange;
import org.apache.unomi.api.query.NumericRange;
import org.apache.unomi.persistence.elasticsearch.conditions.*;
-import org.apache.unomi.persistence.spi.CustomObjectMapper;
import org.apache.unomi.persistence.spi.PersistenceService;
import org.apache.unomi.persistence.spi.aggregate.*;
import org.elasticsearch.action.admin.cluster.node.info.NodeInfo;
@@ -654,8 +653,9 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
.actionGet();
if (response.isExists()) {
String sourceAsString = response.getSourceAsString();
- final T value = CustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
+ final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
value.setItemId(response.getId());
+ value.setVersion(response.getVersion());
return value;
} else {
return null;
@@ -663,10 +663,8 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
}
} catch (IndexNotFoundException e) {
throw new Exception("No index found for itemType=" + clazz.getName() + " itemId=" + itemId, e);
- } catch (IllegalAccessException e) {
- throw new Exception("Error loading itemType=" + clazz.getName() + " itemId=" + itemId, e);
- } catch (Exception t) {
- throw new Exception("Error loading itemType=" + clazz.getName() + " itemId=" + itemId, t);
+ } catch (Exception ex) {
+ throw new Exception("Error loading itemType=" + clazz.getName() + " itemId=" + itemId, ex);
}
}
}.catchingExecuteInClassLoader(true);
@@ -683,7 +681,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
Boolean result = new InClassLoaderExecute<Boolean>() {
protected Boolean execute(Object... args) throws Exception {
try {
- String source = CustomObjectMapper.getObjectMapper().writeValueAsString(item);
+ String source = ESCustomObjectMapper.getObjectMapper().writeValueAsString(item);
String itemType = item.getItemType();
String index = indexNames.containsKey(itemType) ? indexNames.get(itemType) :
(itemsMonthlyIndexed.contains(itemType) ? getMonthlyIndex(((TimestampedItem) item).getTimeStamp()) : indexName);
@@ -1341,6 +1339,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
}
}
SearchResponse response = requestBuilder
+ .setVersion(true)
.execute()
.actionGet();
if (size == -1) {
@@ -1350,8 +1349,9 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
for (SearchHit searchHit : response.getHits().getHits()) {
// add hit to results
String sourceAsString = searchHit.getSourceAsString();
- final T value = CustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
+ final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
value.setItemId(searchHit.getId());
+ value.setVersion(searchHit.getVersion());
results.add(value);
}
@@ -1369,8 +1369,9 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
totalHits = searchHits.getTotalHits();
for (SearchHit searchHit : searchHits) {
String sourceAsString = searchHit.getSourceAsString();
- final T value = CustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
+ final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
value.setItemId(searchHit.getId());
+ value.setVersion(searchHit.getVersion());
results.add(value);
}
}
@@ -1406,8 +1407,9 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
for (SearchHit searchHit : response.getHits().getHits()) {
// add hit to results
String sourceAsString = searchHit.getSourceAsString();
- final T value = CustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
+ final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz);
value.setItemId(searchHit.getId());
+ value.setVersion(searchHit.getVersion());
results.add(value);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java b/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
index 1899f2a..880e16a 100644
--- a/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
+++ b/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
@@ -86,6 +86,7 @@ public class LocalizationHelper {
public RESTConditionType generateCondition(ConditionType conditionType, String language) {
RESTConditionType result = new RESTConditionType();
result.setId(conditionType.getItemId());
+ result.setVersion(conditionType.getVersion());
result.setName(conditionType.getMetadata().getName());
result.setDescription(conditionType.getMetadata().getDescription());
@@ -109,6 +110,7 @@ public class LocalizationHelper {
public RESTActionType generateAction(ActionType actionType, String language) {
RESTActionType result = new RESTActionType();
result.setId(actionType.getItemId());
+ result.setVersion(actionType.getVersion());
result.setName(actionType.getMetadata().getName());
result.setDescription(actionType.getMetadata().getDescription());
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/rest/src/main/java/org/apache/unomi/rest/RESTActionType.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/RESTActionType.java b/rest/src/main/java/org/apache/unomi/rest/RESTActionType.java
index b135adc..ef8a0f7 100644
--- a/rest/src/main/java/org/apache/unomi/rest/RESTActionType.java
+++ b/rest/src/main/java/org/apache/unomi/rest/RESTActionType.java
@@ -31,6 +31,7 @@ public class RESTActionType {
private String description;
private Set<String> tags;
private List<RESTParameter> parameters;
+ protected Long version;
public String getId() {
return id;
@@ -71,4 +72,12 @@ public class RESTActionType {
public void setParameters(List<RESTParameter> parameters) {
this.parameters = parameters;
}
+
+ public Long getVersion() {
+ return version;
+ }
+
+ public void setVersion(Long version) {
+ this.version = version;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/b30d3286/rest/src/main/java/org/apache/unomi/rest/RESTConditionType.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/RESTConditionType.java b/rest/src/main/java/org/apache/unomi/rest/RESTConditionType.java
index 6ffce83..30aa497 100644
--- a/rest/src/main/java/org/apache/unomi/rest/RESTConditionType.java
+++ b/rest/src/main/java/org/apache/unomi/rest/RESTConditionType.java
@@ -30,6 +30,7 @@ public class RESTConditionType {
private String description;
private Set<String> tags = new LinkedHashSet<>();
private List<RESTParameter> parameters = new ArrayList<RESTParameter>();
+ protected Long version;
public RESTConditionType() {
}
@@ -73,4 +74,12 @@ public class RESTConditionType {
public void setParameters(List<RESTParameter> parameters) {
this.parameters = parameters;
}
+
+ public Long getVersion() {
+ return version;
+ }
+
+ public void setVersion(Long version) {
+ this.version = version;
+ }
}