diff --git a/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/messagebus/InternalMessageBus.java b/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/messagebus/InternalMessageBus.java index 85e1cfceb..43fb6354a 100644 --- a/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/messagebus/InternalMessageBus.java +++ b/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/messagebus/InternalMessageBus.java @@ -17,6 +17,9 @@ */ package de.fraunhofer.iosb.ilt.sta.messagebus; +import de.fraunhofer.iosb.ilt.sta.model.core.Entity; +import de.fraunhofer.iosb.ilt.sta.path.EntityType; +import de.fraunhofer.iosb.ilt.sta.path.NavigationProperty; import de.fraunhofer.iosb.ilt.sta.settings.BusSettings; import de.fraunhofer.iosb.ilt.sta.settings.CoreSettings; import de.fraunhofer.iosb.ilt.sta.settings.Settings; @@ -81,6 +84,17 @@ public void stop() { @Override public void sendMessage(EntityChangedMessage message) { + Entity entity = message.getEntity(); + EntityType entityType = entity.getEntityType(); + // We directly hand the entity on without serialization step. + // The receivers expect the navigation entities to not be exportable. + for (NavigationProperty property : entityType.getNavigationEntities()) { + Object parentObject = entity.getProperty(property); + if (parentObject instanceof Entity) { + Entity parentEntity = (Entity) parentObject; + parentEntity.setExportObject(false); + } + } if (!entityChangedMessageQueue.offer(message)) { LOGGER.error("Failed to add message to queue. Increase the queue size to allow a bigger buffer, or increase the worker pool size to empty the buffer quicker."); } diff --git a/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/model/Datastream.java b/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/model/Datastream.java index a60b6cc55..205afa71c 100644 --- a/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/model/Datastream.java +++ b/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/sta/model/Datastream.java @@ -23,9 +23,9 @@ import de.fraunhofer.iosb.ilt.sta.model.core.AbstractEntity; import de.fraunhofer.iosb.ilt.sta.model.core.EntitySet; import de.fraunhofer.iosb.ilt.sta.model.core.EntitySetImpl; +import de.fraunhofer.iosb.ilt.sta.model.core.Id; import de.fraunhofer.iosb.ilt.sta.model.ext.TimeInterval; import de.fraunhofer.iosb.ilt.sta.model.ext.UnitOfMeasurement; -import de.fraunhofer.iosb.ilt.sta.model.core.Id; import de.fraunhofer.iosb.ilt.sta.path.EntityPathElement; import de.fraunhofer.iosb.ilt.sta.path.EntitySetPathElement; import de.fraunhofer.iosb.ilt.sta.path.EntityType; @@ -74,8 +74,14 @@ public class Datastream extends AbstractEntity { private boolean setProperties; public Datastream() { + this(false); + } + + public Datastream(boolean onlyId) { this.observations = new EntitySetImpl<>(EntityType.Observation); - this.unitOfMeasurement = new UnitOfMeasurement(); + if (!onlyId) { + this.unitOfMeasurement = new UnitOfMeasurement(); + } } public Datastream(Id id, diff --git a/FROST-Server.SQL.PGLong/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/longid/PropertyHelper.java b/FROST-Server.SQL.PGLong/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/longid/PropertyHelper.java index dffa9cf68..19f2642a2 100644 --- a/FROST-Server.SQL.PGLong/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/longid/PropertyHelper.java +++ b/FROST-Server.SQL.PGLong/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/longid/PropertyHelper.java @@ -19,7 +19,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; @@ -714,7 +713,7 @@ private static Datastream datastreamFromId(Long id) { if (id == null) { return null; } - Datastream ds = new Datastream(); + Datastream ds = new Datastream(true); ds.setId(new IdLong(id)); ds.setExportObject(false); return ds; diff --git a/FROST-Server.SQL.PGString/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/stringid/PropertyHelper.java b/FROST-Server.SQL.PGString/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/stringid/PropertyHelper.java index 68c61da73..508fe492d 100644 --- a/FROST-Server.SQL.PGString/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/stringid/PropertyHelper.java +++ b/FROST-Server.SQL.PGString/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/stringid/PropertyHelper.java @@ -19,7 +19,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; @@ -39,11 +38,11 @@ import de.fraunhofer.iosb.ilt.sta.model.core.Entity; import de.fraunhofer.iosb.ilt.sta.model.core.EntitySet; import de.fraunhofer.iosb.ilt.sta.model.core.EntitySetImpl; +import de.fraunhofer.iosb.ilt.sta.model.core.IdString; import de.fraunhofer.iosb.ilt.sta.model.ext.TimeInstant; import de.fraunhofer.iosb.ilt.sta.model.ext.TimeInterval; import de.fraunhofer.iosb.ilt.sta.model.ext.TimeValue; import de.fraunhofer.iosb.ilt.sta.model.ext.UnitOfMeasurement; -import de.fraunhofer.iosb.ilt.sta.model.core.IdString; import de.fraunhofer.iosb.ilt.sta.path.EntityProperty; import de.fraunhofer.iosb.ilt.sta.path.EntityType; import de.fraunhofer.iosb.ilt.sta.path.Property; @@ -714,7 +713,7 @@ private static Datastream datastreamFromId(String id) { if (id == null) { return null; } - Datastream ds = new Datastream(); + Datastream ds = new Datastream(true); ds.setId(new IdString(id)); ds.setExportObject(false); return ds; diff --git a/FROST-Server.SQL.PGUuid/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/uuidid/PropertyHelper.java b/FROST-Server.SQL.PGUuid/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/uuidid/PropertyHelper.java index aa97aeb43..65d80cd3b 100644 --- a/FROST-Server.SQL.PGUuid/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/uuidid/PropertyHelper.java +++ b/FROST-Server.SQL.PGUuid/src/main/java/de/fraunhofer/iosb/ilt/sta/persistence/postgres/uuidid/PropertyHelper.java @@ -19,7 +19,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; @@ -715,7 +714,7 @@ private static Datastream datastreamFromId(UUID id) { if (id == null) { return null; } - Datastream ds = new Datastream(); + Datastream ds = new Datastream(true); ds.setId(new UuidId(id)); ds.setExportObject(false); return ds;