diff --git a/changelog/src/changelog/entries/2025/10/8506.SUP-19037.bugfix b/changelog/src/changelog/entries/2025/10/8506.SUP-19037.bugfix new file mode 100644 index 00000000000..e2b41f861c4 --- /dev/null +++ b/changelog/src/changelog/entries/2025/10/8506.SUP-19037.bugfix @@ -0,0 +1 @@ +Core: Avoid slowdowns or deadlocks by reducing the number of scroll SQL queries usage wherever possible. \ No newline at end of file diff --git a/common/src/main/java/com/gentics/mesh/verticle/BinaryCheckVerticle.java b/common/src/main/java/com/gentics/mesh/verticle/BinaryCheckVerticle.java index 20a7097f6a4..14af0eee898 100644 --- a/common/src/main/java/com/gentics/mesh/verticle/BinaryCheckVerticle.java +++ b/common/src/main/java/com/gentics/mesh/verticle/BinaryCheckVerticle.java @@ -119,7 +119,7 @@ private void performBinaryCheck(Long id) { ContentDao contentDao = tx.contentDao(); tx.binaryDao().findByCheckStatus(BinaryCheckStatus.POSTPONED).runInExistingTx(tx).forEach(binary -> { - Optional field = tx.binaryDao().findFields(binary).stream().findFirst(); + Optional field = tx.binaryDao().findFields(binary).stream().findAny(); if (field.isEmpty()) { return; diff --git a/core/src/main/java/com/gentics/mesh/changelog/highlevel/HighLevelChangelogSystemImpl.java b/core/src/main/java/com/gentics/mesh/changelog/highlevel/HighLevelChangelogSystemImpl.java index f6cb5250463..413c9123a67 100644 --- a/core/src/main/java/com/gentics/mesh/changelog/highlevel/HighLevelChangelogSystemImpl.java +++ b/core/src/main/java/com/gentics/mesh/changelog/highlevel/HighLevelChangelogSystemImpl.java @@ -92,7 +92,7 @@ public boolean requiresChanges(ChangelogDao dao, Predicate !isApplied(dao, change)).findFirst().isPresent(); + return stream.filter(change -> !isApplied(dao, change)).findAny().isPresent(); }); } diff --git a/core/src/main/java/com/gentics/mesh/core/data/service/AbstractWebRootService.java b/core/src/main/java/com/gentics/mesh/core/data/service/AbstractWebRootService.java index 77be22b56da..f252c6b6bb7 100644 --- a/core/src/main/java/com/gentics/mesh/core/data/service/AbstractWebRootService.java +++ b/core/src/main/java/com/gentics/mesh/core/data/service/AbstractWebRootService.java @@ -76,7 +76,7 @@ public Path findByProjectPath(InternalActionContext ac, String path, ContainerTy // Handle path to project root (baseNode) if ("/".equals(strippedPath) || strippedPath.isEmpty()) { - Optional container = contentDao.getFieldContainers(baseNode, branch, type).stream().findFirst(); + Optional container = contentDao.getFieldContainers(baseNode, branch, type).stream().findAny(); if (container.isPresent()) { nodePath.addSegment(new PathSegmentImpl(container.get(), null, null, "/")); stack.push("/"); diff --git a/distributed-coordinator/src/main/java/com/gentics/mesh/distributed/coordinator/MasterElector.java b/distributed-coordinator/src/main/java/com/gentics/mesh/distributed/coordinator/MasterElector.java index 0fa50d810c4..972921b76bd 100644 --- a/distributed-coordinator/src/main/java/com/gentics/mesh/distributed/coordinator/MasterElector.java +++ b/distributed-coordinator/src/main/java/com/gentics/mesh/distributed/coordinator/MasterElector.java @@ -162,7 +162,7 @@ private void electMaster() { log.info("Locked for master election"); Optional foundMaster = cluster.getMembers().stream() .filter(m -> isMaster(m)) - .findFirst(); + .findAny(); boolean hasMaster = foundMaster.isPresent(); boolean isElectible = isElectable(localMember()); if (!hasMaster && isElectible) { @@ -206,7 +206,7 @@ private boolean isElectable(Member member) { } ClusterConfigResponse config = database.loadClusterConfig(); - Optional databaseServer = config.getServers().stream().filter(s -> s.getName().equals(name)).findFirst(); + Optional databaseServer = config.getServers().stream().filter(s -> s.getName().equals(name)).findAny(); if (databaseServer.isPresent()) { // Replicas are not eligible for master election ServerRole role = databaseServer.get().getRole(); @@ -281,7 +281,7 @@ protected void findCurrentMaster() { Cluster cluster = hazelcast.get().getCluster(); Optional master = cluster.getMembers().stream() .filter(m -> isMaster(m)) - .findFirst(); + .findAny(); if (master.isPresent()) { masterMember = master.get(); log.info("Updated master member {" + masterMember.getUuid() + "}"); diff --git a/elasticsearch/src/main/java/com/gentics/mesh/search/index/node/NodeIndexHandlerImpl.java b/elasticsearch/src/main/java/com/gentics/mesh/search/index/node/NodeIndexHandlerImpl.java index f8cefef9469..f1483937be7 100644 --- a/elasticsearch/src/main/java/com/gentics/mesh/search/index/node/NodeIndexHandlerImpl.java +++ b/elasticsearch/src/main/java/com/gentics/mesh/search/index/node/NodeIndexHandlerImpl.java @@ -408,7 +408,7 @@ protected void processHits(JsonArray hits, Map versions) { private Flowable diffAndSync(HibProject project, HibBranch branch, HibSchemaVersion version, ContainerType type, Optional indexPattern) { // if an index pattern is given, check whether any index matches the pattern if (indexPattern.isPresent() && !getIndexNames(project, branch, version, type).stream() - .filter(indexName -> indexPattern.orElse(MATCH_ALL).matcher(indexName).matches()).findFirst() + .filter(indexName -> indexPattern.orElse(MATCH_ALL).matcher(indexName).matches()).findAny() .isPresent()) { return Flowable.empty(); } diff --git a/mdm/common/src/main/java/com/gentics/mesh/core/data/dao/PersistingNodeDao.java b/mdm/common/src/main/java/com/gentics/mesh/core/data/dao/PersistingNodeDao.java index 7e88368e68a..37f3642d091 100644 --- a/mdm/common/src/main/java/com/gentics/mesh/core/data/dao/PersistingNodeDao.java +++ b/mdm/common/src/main/java/com/gentics/mesh/core/data/dao/PersistingNodeDao.java @@ -1218,7 +1218,7 @@ default Map getPaths(Collection sourceNodes, InternalA @Override default Map getPaths(Collection sourceNodes, String branchUuid, InternalActionContext ac, ContainerType type, String... languageTags) { BranchDao branchDao = Tx.get().branchDao(); - HibBranch branch = sourceNodes.stream().map(node -> branchDao.findByUuid(node.getProject(), branchUuid)).findFirst().orElse(null); + HibBranch branch = sourceNodes.stream().map(node -> branchDao.findByUuid(node.getProject(), branchUuid)).findAny().orElse(null); return getPaths(sourceNodes, branch, ac, type, languageTags); } @@ -1269,7 +1269,7 @@ default Map getPaths(Collection sourceNodes, HibBranch String fallbackPath = null; if (containerForUrlFieldValues != null) { fallbackPath = contentDao.getUrlFieldValues(containerForUrlFieldValues) - .findFirst() + .findAny() .map(path -> getWithSanitizedPathPrefix(branch, builder -> builder.append(path))) .orElse(null); } @@ -1398,7 +1398,7 @@ private String getUrlFieldPath(HibNode node, HibBranch branch, ContainerType typ return Stream.of(languages) .flatMap(language -> Stream.ofNullable(contentDao.getFieldContainer(node, language, branch != null ? branch.getUuid() : null, type))) .flatMap(contentDao::getUrlFieldValues) - .findFirst() + .findAny() .map(path -> getWithSanitizedPathPrefix(branch, builder -> builder.append(path))) .orElse(null); } diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/binary/impl/HibBinariesImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/binary/impl/HibBinariesImpl.java index 5cf6145158c..ffbc1d7c52a 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/binary/impl/HibBinariesImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/binary/impl/HibBinariesImpl.java @@ -13,6 +13,7 @@ import com.gentics.mesh.database.HibernateDatabase; import com.gentics.mesh.database.HibernateTx; import com.gentics.mesh.hibernate.data.domain.HibBinaryImpl; +import com.gentics.mesh.hibernate.util.HibernateUtil; import com.gentics.mesh.util.UUIDUtil; /** @@ -33,13 +34,10 @@ public HibBinariesImpl(HibernateDatabase database) { @Override public Transactional findByUuid(String uuid) { - return database.transactional((tx) -> tx.unwrap() + return database.transactional((tx) -> HibernateUtil.firstOrNull(tx.unwrap() .entityManager() .createNamedQuery("binary.findByUuids", HibBinary.class) - .setParameter("uuids", Set.of(UUIDUtil.toJavaUuid(uuid))) - .getResultStream() - .findAny() - .orElse(null)); + .setParameter("uuids", Set.of(UUIDUtil.toJavaUuid(uuid))))); } @Override @@ -47,11 +45,8 @@ public Transactional findByHash(String SHA512Sum) { return database.transactional((tx) -> { HibernateTx hibTx = (HibernateTx) tx; - return hibTx.entityManager().createNamedQuery("binary.findBySHA", HibBinaryImpl.class) - .setParameter("SHA512Sum", SHA512Sum) - .getResultStream() - .findFirst() - .orElse(null); + return HibernateUtil.firstOrNull(hibTx.entityManager().createNamedQuery("binary.findBySHA", HibBinaryImpl.class) + .setParameter("SHA512Sum", SHA512Sum)); }); } diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/AbstractHibContainerDao.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/AbstractHibContainerDao.java index 2249a6dd645..131bbe56ffa 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/AbstractHibContainerDao.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/AbstractHibContainerDao.java @@ -4,14 +4,13 @@ import static com.gentics.mesh.hibernate.util.HibernateUtil.firstOrNull; import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST; +import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.function.Predicate; import java.util.stream.Stream; import java.util.stream.StreamSupport; -import jakarta.persistence.EntityManager; - import com.gentics.graphqlfilter.filter.operation.FilterOperation; import com.gentics.mesh.context.InternalActionContext; import com.gentics.mesh.core.data.branch.HibBranch; @@ -43,12 +42,13 @@ import com.gentics.mesh.hibernate.data.domain.HibUpdateSchemaChangeImpl; import com.gentics.mesh.hibernate.data.permission.HibPermissionRoots; import com.gentics.mesh.hibernate.event.EventFactory; +import com.gentics.mesh.hibernate.util.HibernateUtil; import com.gentics.mesh.parameter.PagingParameters; -import com.gentics.mesh.util.StreamUtil; import com.gentics.mesh.util.UUIDUtil; import dagger.Lazy; import io.vertx.core.Vertx; +import jakarta.persistence.EntityManager; /** * Partial implementation of common parts for entity container DAOs. @@ -114,17 +114,17 @@ public HibSchemaChange createPersistedChange(SCV version, SchemaChangeOperati return schemaChange; } + @SuppressWarnings("unchecked") @Override public Iterable findAllVersions(SC schema) { EntityManager em = currentTransaction.getEntityManager(); - return StreamUtil.toIterable( - em.createQuery("select v" + + return (List) em.createQuery("select v" + " from " + getVersionFieldLabel() + "version v " + " join v." + getVersionFieldLabel() + " s" + " where s = :schema", getVersionPersistenceClass()) .setParameter("schema", schema) - .getResultStream()); + .getResultList(); } @Override @@ -137,24 +137,20 @@ public Result findActiveSchemaVersions(HibBranch branch) { " and e.active = true", getVersionPersistenceClass()) .setParameter("branch", branch) - .getResultStream()); + .getResultList()); } @Override public SCV findVersionByRev(SC schema, String version) { EntityManager em = currentTransaction.getEntityManager(); - return em.createQuery("select v" + + return HibernateUtil.firstOrNull(em.createQuery("select v" + " from " + getVersionFieldLabel() + "version v" + " join v." + getVersionFieldLabel() + " s" + " where s = :schema" + " and v.version = :version", getVersionPersistenceClass()) .setParameter("schema", schema) - .setParameter("version", version) - .setMaxResults(1) - .getResultStream() - .findAny() - .orElse(null); + .setParameter("version", version)); } @Override @@ -229,7 +225,7 @@ public Result getBranches(SCV version) { " where e.version = :version", HibBranchImpl.class) .setParameter("version", version) - .getResultStream()); + .getResultList()); } /** @@ -252,18 +248,14 @@ public SC findByUuid(HibProject root, UUID uuid) { */ public SCV findVersionByUuid(SC schema, UUID versionUuid) { EntityManager em = currentTransaction.getEntityManager(); - return em.createQuery("select v" + + return HibernateUtil.firstOrNull(em.createQuery("select v" + " from " + getVersionTableLabel() + " v" + " join v." + getVersionFieldLabel() + " s" + " where s = :schema" + " and v.dbUuid = :uuid", getVersionPersistenceClass()) .setParameter("schema", schema) - .setParameter("uuid", versionUuid) - .setMaxResults(1) - .getResultStream() - .findAny() - .orElse(null); + .setParameter("uuid", versionUuid)); } /** diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BinaryDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BinaryDaoImpl.java index fa8b223e840..00397f3f3fb 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BinaryDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BinaryDaoImpl.java @@ -102,12 +102,9 @@ public Binaries binaries() { * @return entity or null */ public HibBinaryField getField(UUID contentUuid, String key) { - return em().createNamedQuery("binaryfieldref.findByContentAndKey", HibBinaryFieldImpl.class) + return HibernateUtil.firstOrNull(em().createNamedQuery("binaryfieldref.findByContentAndKey", HibBinaryFieldImpl.class) .setParameter("contentUuid", contentUuid) - .setParameter("key", key) - .getResultStream() - .findFirst() - .orElse(null); + .setParameter("key", key)); } /** diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BranchDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BranchDaoImpl.java index 5489b0406ac..662cd8a3d30 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BranchDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/BranchDaoImpl.java @@ -91,18 +91,16 @@ public void onRootDeleted(HibProject root) { public void deletePersisted(HibProject root, HibBranch entity) { em().createQuery("select j from job j where j.branch = :branch", HibJobImpl.class) .setParameter("branch", entity) - .getResultStream() + .getResultList() .forEach(job -> job.setBranch(null)); em().remove(entity); } @Override public Result findAll(HibProject project) { - Stream branches = em().createNamedQuery("branch.findFromProject", HibBranchImpl.class) + return new TraversalResult<>(em().createNamedQuery("branch.findFromProject", HibBranchImpl.class) .setParameter("project", project) - .getResultStream(); - - return new TraversalResult<>(branches.iterator()); + .getResultList()); } @Override @@ -216,7 +214,7 @@ public HibBranchSchemaVersion findBranchSchemaEdge(HibBranch branch, HibSchemaVe .setParameter("branch", branch) .setParameter("schemaVersionDbUuid", UUIDUtil.toJavaUuid(schemaVersion.getUuid())); - return firstOrNull(query.getResultStream()); + return firstOrNull(query); } @Override @@ -228,7 +226,7 @@ public HibBranchMicroschemaVersion findBranchMicroschemaEdge(HibBranch branch, H .setParameter("branch", branch) .setParameter("microSchemaVersionDbUuid", UUIDUtil.toJavaUuid(microschemaVersion.getUuid())); - return firstOrNull(query.getResultStream()); + return firstOrNull(query); } @Override diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/ContentDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/ContentDaoImpl.java index e4fece8a703..511a975979d 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/ContentDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/ContentDaoImpl.java @@ -338,7 +338,7 @@ public HibNodeFieldContainerEdge getEdge(HibNode node, String languageTag, Strin if (contentEdgesInitialized(node)) { return impl.getContentEdges().stream() .filter(e -> e.getLanguageTag().equals(languageTag) && e.getBranchUuid().equals(branchUuid) && e.getType().equals(type)) - .findFirst() + .findAny() .orElse(null); } @@ -1016,7 +1016,6 @@ public Stream getContainerEdges(HibNodeFiel HibNodeImpl impl = (HibNodeImpl) container.getNode(); return impl.getContentEdges().stream().filter(edge -> edge.getContentUuid().equals(container.getId())); } - return em.createNamedQuery("contentEdge.findByContent", HibNodeFieldContainerEdgeImpl.class) .setParameter("contentUuid", container.getId()) .getResultStream(); @@ -1089,12 +1088,9 @@ public void setVersion(HibNodeFieldContainer content, VersionNumber version) { @Override public boolean hasNextVersion(HibNodeFieldContainer content) { - return currentTransaction.getEntityManager().createNamedQuery("containerversions.findNextEdgeByVersion", HibNodeFieldContainerVersionsEdgeImpl.class) + return HibernateUtil.isNotEmpty(currentTransaction.getEntityManager().createNamedQuery("containerversions.findNextEdgeByVersion", HibNodeFieldContainerVersionsEdgeImpl.class) .setParameter("contentUuid", content.getId()) - .setParameter("version", getSchemaContainerVersion(content)) - .getResultStream() - .findAny() - .isPresent(); + .setParameter("version", getSchemaContainerVersion(content))); } @Override @@ -1119,23 +1115,20 @@ public void setNextVersion(HibNodeFieldContainer current, HibNodeFieldContainer @Override public boolean hasPreviousVersion(HibNodeFieldContainer content) { - return currentTransaction.getEntityManager().createNamedQuery("containerversions.findPreviousEdgeByVersion", HibNodeFieldContainerVersionsEdgeImpl.class) + return HibernateUtil.isNotEmpty(currentTransaction.getEntityManager().createNamedQuery("containerversions.findPreviousEdgeByVersion", HibNodeFieldContainerVersionsEdgeImpl.class) .setParameter("contentUuid", content.getId()) - .setParameter("version", getSchemaContainerVersion(content)) - .getResultStream() - .findAny() - .isPresent(); + .setParameter("version", getSchemaContainerVersion(content))); } @Override public HibNodeFieldContainer getPreviousVersion(HibNodeFieldContainer content) { - return currentTransaction.getEntityManager().createNamedQuery("containerversions.findPreviousEdgeByVersion", HibNodeFieldContainerVersionsEdgeImpl.class) + HibNodeFieldContainerVersionsEdgeImpl edge = HibernateUtil.firstOrNull(currentTransaction.getEntityManager().createNamedQuery("containerversions.findPreviousEdgeByVersion", HibNodeFieldContainerVersionsEdgeImpl.class) .setParameter("contentUuid", content.getId()) - .setParameter("version", getSchemaContainerVersion(content)) - .getResultStream() - .map(edge -> getFieldContainer(edge.getThisVersion(), edge.getThisContentUuid())) - .findAny() - .orElse(null); + .setParameter("version", getSchemaContainerVersion(content))); + if (edge == null) { + return null; + } + return getFieldContainer(edge.getThisVersion(), edge.getThisContentUuid()); } @Override @@ -1155,13 +1148,10 @@ public boolean isType(HibNodeFieldContainer content, ContainerType type) { return impl.getContentEdges().stream().anyMatch(edge -> edge.getContentUuid().equals(content.getId()) && edge.getType().equals(type)); } - return em.createNamedQuery("contentEdge.findByContentAndTypes", HibNodeFieldContainerEdgeImpl.class) + return HibernateUtil.isNotEmpty(em.createNamedQuery("contentEdge.findByContentAndTypes", HibNodeFieldContainerEdgeImpl.class) .setParameter("contentUuid", content.getId()) .setParameter("types", Collections.singletonList(type)) - .setMaxResults(1) - .setHint(AvailableHints.HINT_CACHEABLE, true) - .getResultList() - .size() > 0; + .setHint(AvailableHints.HINT_CACHEABLE, true)); } @Override @@ -1172,13 +1162,11 @@ public boolean isType(HibNodeFieldContainer content, ContainerType type, String return impl.getContentEdges().stream().anyMatch(edge -> edge.getContentUuid().equals(content.getId()) && edge.getType().equals(type) && edge.getBranchUuid().equals(branchUuid)); } - return em.createNamedQuery("contentEdge.findByContentTypeAndBranch", HibNodeFieldContainerEdgeImpl.class) + return HibernateUtil.isNotEmpty(em.createNamedQuery("contentEdge.findByContentTypeAndBranch", HibNodeFieldContainerEdgeImpl.class) .setParameter("contentUuid", content.getId()) .setParameter("type", type) .setParameter("branchUuid", UUIDUtil.toJavaUuid(branchUuid)) - .setMaxResults(1) - .setHint(AvailableHints.HINT_CACHEABLE, true) - .getResultList().size() > 0; + .setHint(AvailableHints.HINT_CACHEABLE, true)); } @Override @@ -1261,26 +1249,22 @@ public Iterator getContainerEdges(HibNodeFi public HibNodeFieldContainerEdge getConflictingEdgeOfWebrootPath(HibNodeFieldContainer content, String segmentInfo, String branchUuid, ContainerType type, HibNodeFieldContainerEdge edge) { //TODO do we need to check contentUuid? EntityManager em = currentTransaction.getEntityManager(); - return em.createNamedQuery("contentEdge.findByBranchTypeAndWebroot", HibNodeFieldContainerEdgeImpl.class) + return HibernateUtil.firstOrNull(em.createNamedQuery("contentEdge.findByBranchTypeAndWebroot", HibNodeFieldContainerEdgeImpl.class) .setParameter("webrootPath", segmentInfo) .setParameter("branchUuid", UUIDUtil.toJavaUuid(branchUuid)) .setParameter("type", type) - .setParameter("edgeUuid", ((HibNodeFieldContainerEdgeImpl ) edge).getElement()) - .getResultStream() - .findAny().orElse(null); + .setParameter("edgeUuid", ((HibNodeFieldContainerEdgeImpl ) edge).getElement())); } @Override public HibNodeFieldContainerEdge getConflictingEdgeOfWebrootField(HibNodeFieldContainer content, HibNodeFieldContainerEdge edge, String urlFieldValue, String branchUuid, ContainerType type) { //TODO do we need to check contentUuid? EntityManager em = currentTransaction.getEntityManager(); - return em.createNamedQuery("contentEdge.findByBranchTypeAndUrlField", HibNodeFieldContainerEdgeImpl.class) + return HibernateUtil.firstOrNull(em.createNamedQuery("contentEdge.findByBranchTypeAndUrlField", HibNodeFieldContainerEdgeImpl.class) .setParameter("branchUuid", UUIDUtil.toJavaUuid(branchUuid)) .setParameter("type", type) .setParameter("field", urlFieldValue) - .setParameter("edgeUuid", ((HibNodeFieldContainerEdgeImpl ) edge).getElement()) - .getResultStream() - .findAny().orElse(null); + .setParameter("edgeUuid", ((HibNodeFieldContainerEdgeImpl ) edge).getElement())); } @Override @@ -1294,13 +1278,11 @@ public HibNodeFieldContainerEdge getConflictingEdgeOfWebrootField(HibNodeFieldCo // split the set of field values into slices, and - as long as we did not find a conflicting edge - keep searching for each slice SplittingUtils.splitAndConsume(urlFieldValues, HibernateUtil.inQueriesLimitForSplitting(3), slice -> { if (foundConflictingEdge.get() == null) { - foundConflictingEdge.set(em.createNamedQuery("contentEdge.findByBranchTypeAndUrlFieldValues", HibNodeFieldContainerEdgeImpl.class) + foundConflictingEdge.set(HibernateUtil.firstOrNull(em.createNamedQuery("contentEdge.findByBranchTypeAndUrlFieldValues", HibNodeFieldContainerEdgeImpl.class) .setParameter("branchUuid", UUIDUtil.toJavaUuid(branchUuid)) .setParameter("type", type) .setParameter("field", slice) - .setParameter("edgeUuid", edgeUuid) - .getResultStream() - .findAny().orElse(null)); + .setParameter("edgeUuid", edgeUuid))); } }); return foundConflictingEdge.get(); @@ -1660,17 +1642,17 @@ public Set getReferencedMicroFieldContainers(Collection micronodeUui EntityManager em = HibernateTx.get().entityManager(); return SplittingUtils.splitAndMergeInSet(micronodeUuids, HibernateUtil.inQueriesLimitForSplitting(2), slice -> { - List referencedByEdges = em.createNamedQuery("micronodefieldref.findByMicrocontainerUuids", HibMicronodeFieldEdgeImpl.class) - .setParameter("micronodeUuids", slice) - .getResultStream() - .map(HibMicronodeFieldEdgeImpl::getValueOrUuid) - .collect(Collectors.toList()); - - List referencedInLists = em.createNamedQuery("micronodelistitem.findByMicronodeUuids", HibMicronodeListFieldEdgeImpl.class) - .setParameter("micronodeUuids", slice) - .getResultStream() - .map(HibMicronodeListFieldEdgeImpl::getValueOrUuid) - .collect(Collectors.toList()); + List referencedByEdges = em.createNamedQuery("micronodefieldref.findByMicrocontainerUuids", HibMicronodeFieldEdgeImpl.class) + .setParameter("micronodeUuids", slice) + .getResultStream() + .map(HibMicronodeFieldEdgeImpl::getValueOrUuid) + .collect(Collectors.toList()); + + List referencedInLists = em.createNamedQuery("micronodelistitem.findByMicronodeUuids", HibMicronodeListFieldEdgeImpl.class) + .setParameter("micronodeUuids", slice) + .getResultStream() + .map(HibMicronodeListFieldEdgeImpl::getValueOrUuid) + .collect(Collectors.toList()); return Stream.of(referencedByEdges, referencedInLists).flatMap(Collection::stream).collect(Collectors.toSet()); }); diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/DaoHelper.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/DaoHelper.java index 58f6fa7aa77..282eff23bd2 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/DaoHelper.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/DaoHelper.java @@ -124,6 +124,7 @@ import com.gentics.mesh.hibernate.data.domain.HibUserImpl; import com.gentics.mesh.hibernate.event.EventFactory; import com.gentics.mesh.hibernate.util.HibernateFilter; +import com.gentics.mesh.hibernate.util.HibernateUtil; import com.gentics.mesh.hibernate.util.JpaUtil; import com.gentics.mesh.hibernate.util.TypeInfoUtil; import com.gentics.mesh.hibernate.util.UuidGenerator; @@ -1957,7 +1958,7 @@ public T findByName(String name) { CriteriaQuery query = cb().createQuery(domainClass); Root root = query.from(domainClass); query.where(cb().equal(root.get("name"), name)); - return firstOrNull(em().createQuery(query).setHint(AvailableHints.HINT_CACHEABLE, true).setMaxResults(1)); + return firstOrNull(em().createQuery(query).setHint(AvailableHints.HINT_CACHEABLE, true)); } /** @@ -2037,16 +2038,14 @@ public void fillCommonRestFields(T element, InternalActionContext ac, FieldsSet * @return */ public Optional getPermissionForUser(HibUser user) { - return em().createQuery("select p" + + return Optional.ofNullable(HibernateUtil.firstOrNull(em().createQuery("select p" + " from permission p" + " join p.role r" + " join r.groups g" + " join g.users u" + " where u = :user", HibPermissionImpl.class - ).setParameter("user", user) - .getResultStream() - .findAny(); + ).setParameter("user", user))); } EntityManager em() { diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/GroupDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/GroupDaoImpl.java index ac78b450f63..bbd00fa2770 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/GroupDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/GroupDaoImpl.java @@ -89,7 +89,7 @@ public Result getRoles(HibGroup group) { return new TraversalResult<>( em().createQuery("select r from group g inner join g.roles r where g.dbUuid = :groupUuid", HibRoleImpl.class) .setParameter("groupUuid", group.getId()) - .getResultStream()); + .getResultList()); } @Override @@ -112,11 +112,9 @@ public Map> getRoles(Collection findAllGlobal() { - return em().createQuery("select n from node n", HibNodeImpl.class).getResultStream(); + CriteriaQuery query = cb().createQuery(daoHelper.getDomainClass()); + query.from(daoHelper.getDomainClass()); + return em().createQuery(query).getResultStream(); } @Override diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/S3BinaryDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/S3BinaryDaoImpl.java index ad5b62a7dd9..4344fd85499 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/S3BinaryDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/S3BinaryDaoImpl.java @@ -47,12 +47,9 @@ public S3Binaries getS3HibBinaries() { } public S3HibBinaryField getField(UUID contentUuid, String fieldKey) { - return em().createNamedQuery("s3binaryfieldref.getByContentAndFieldKey", HibS3BinaryFieldImpl.class) + return HibernateUtil.firstOrNull(em().createNamedQuery("s3binaryfieldref.getByContentAndFieldKey", HibS3BinaryFieldImpl.class) .setParameter("contentUuid", contentUuid) - .setParameter("fieldKey", fieldKey) - .getResultStream() - .findFirst() - .orElse(null); + .setParameter("fieldKey", fieldKey)); } public void removeField(HibField field) { diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/TagDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/TagDaoImpl.java index 93eba5586fb..b299de2fa0a 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/TagDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/TagDaoImpl.java @@ -12,8 +12,6 @@ import javax.inject.Inject; import javax.inject.Singleton; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Root; import org.apache.commons.collections4.IteratorUtils; import org.hibernate.Hibernate; @@ -53,6 +51,8 @@ import dagger.Lazy; import io.vertx.core.Vertx; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Root; /** * Tag DAO implementation for Gentics Mesh. @@ -198,13 +198,10 @@ public Page getTags(HibNode node, HibUser user, PagingParamete @Override public boolean hasTag(HibNode node, HibTag tag, HibBranch branch) { - return em().createQuery("select t from node_tag t where t.id.nodeUUID = :nodeuuid and t.id.tagUUID = :taguuid and t.id.branchUUID = :branchuuid") + return HibernateUtil.isNotEmpty(em().createQuery("select t from node_tag t where t.id.nodeUUID = :nodeuuid and t.id.tagUUID = :taguuid and t.id.branchUUID = :branchuuid") .setParameter("nodeuuid", node.getId()) .setParameter("taguuid", tag.getId()) - .setParameter("branchuuid", branch.getId()) - .getResultStream() - .findFirst() - .isPresent(); + .setParameter("branchuuid", branch.getId())); } @Override diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/UserDaoImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/UserDaoImpl.java index 1ad8f05c4aa..c4d15dce880 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/UserDaoImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/dao/UserDaoImpl.java @@ -11,14 +11,8 @@ import javax.inject.Inject; import javax.inject.Singleton; -import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Join; -import jakarta.persistence.criteria.Root; -import jakarta.persistence.metamodel.EntityType; -import jakarta.persistence.metamodel.Metamodel; -import org.hibernate.annotations.QueryHints; +import org.hibernate.jpa.HibernateHints; import com.gentics.mesh.cache.PermissionCache; import com.gentics.mesh.core.data.HibBaseElement; @@ -52,6 +46,12 @@ import dagger.Lazy; import io.vertx.core.Vertx; +import jakarta.persistence.EntityManager; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Join; +import jakarta.persistence.criteria.Root; +import jakarta.persistence.metamodel.EntityType; +import jakarta.persistence.metamodel.Metamodel; /** * User DAO implementation for Gentics Mesh. @@ -119,9 +119,9 @@ public HibUser inheritRolePermissions(HibUser user, HibBaseElement source, Colle @Override public HibUser findByUsername(String username) { return HibernateTx.get().data().mesh().userNameCache().get(username, name -> { - return firstOrNull(currentTransaction.getEntityManager().createQuery("from user where name = :name", HibUserImpl.class).setHint(QueryHints.CACHEABLE, true) - .setParameter("name", username) - .setHint(QueryHints.CACHEABLE, true)); + return firstOrNull(currentTransaction.getEntityManager().createQuery("from user where name = :name", HibUserImpl.class) + .setHint(HibernateHints.HINT_CACHEABLE, true) + .setParameter("name", username)); }); } @@ -151,7 +151,7 @@ public Iterable getRoles(HibUser user) { " where u = :user", HibRoleImpl.class) .setParameter("user", user) - .setHint(QueryHints.CACHEABLE, true) + .setHint(HibernateHints.HINT_CACHEABLE, true) .getResultList(); } @@ -165,7 +165,8 @@ public Result getGroups(HibUser user) { " where u = :user", HibGroupImpl.class) .setParameter("user", user) - .getResultStream()); + .setHint(HibernateHints.HINT_CACHEABLE, true) + .getResultList()); } @Override @@ -216,7 +217,7 @@ public EnumSet getPermissionsForElementId(HibUser user, Obje currentTransaction.getEntityManager().createQuery( "select p from permission p join p.role r join r.groups g join g.users u where u = :user and p.element = :element", HibPermissionImpl.class).setParameter("user", user).setParameter("element", elementId) - .getResultStream().forEach(hibPerm -> { + .getResultList().forEach(hibPerm -> { for(InternalPermission p : InternalPermission.values()) { if(hibPerm.hasPermission(p)) { permissions.add(p); @@ -238,7 +239,7 @@ public void preparePermissionsForElementIds(HibUser user, Collection ele .createQuery( "select p from permission p join p.role r join r.groups g join g.users u where u = :user and p.element in :element", HibPermissionImpl.class).setParameter("user", user).setParameter("element", slice) - .getResultStream().forEach(hibPerm -> { + .getResultList().forEach(hibPerm -> { EnumSet permSet = permissionCache.get(user.getId(), hibPerm.getElement()); if (permSet == null) { permSet = EnumSet.noneOf(InternalPermission.class); diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/AbstractHibListFieldEdgeImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/AbstractHibListFieldEdgeImpl.java index db93313b71b..b77d1e19b47 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/AbstractHibListFieldEdgeImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/AbstractHibListFieldEdgeImpl.java @@ -161,12 +161,11 @@ public static long countItems( public static > Optional getItem( HibernateTx tx, Class classOfI, UUID containerUuid, ReferenceType containerType, String listFieldKey, int index) { - return tx.entityManager().createQuery(String.format(QUERY_ITEM_BY_KEY_CONTENT_TYPE_INDEX, getEntityTableName(classOfI)), classOfI) + return Optional.ofNullable(HibernateUtil.firstOrNull(tx.entityManager().createQuery(String.format(QUERY_ITEM_BY_KEY_CONTENT_TYPE_INDEX, getEntityTableName(classOfI)), classOfI) .setParameter("fieldKey", listFieldKey) .setParameter("containerUuid", containerUuid) .setParameter("containerType", containerType) - .setParameter("index", index) - .getResultStream().findAny(); + .setParameter("index", index))); } public static int deleteItems( diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibBranchImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibBranchImpl.java index 71f74004b37..2f47f4d6bef 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibBranchImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibBranchImpl.java @@ -314,7 +314,7 @@ public HibSchemaVersion findLatestSchemaVersion(HibSchema schemaContainer) { .filter(v -> schemaContainer.getUuid().equals(v.getVersion().getSchemaContainer().getUuid())) .sorted((v1, v2) -> VersionUtil.compareVersions(v2.getVersion().getVersion(), v1.getVersion().getVersion())) .map(AbstractHibBranchSchemaVersion::getVersion) - .findFirst() + .findAny() .orElse(null); } @@ -324,7 +324,7 @@ public HibMicroschemaVersion findLatestMicroschemaVersion(HibMicroschema microsc .filter(v -> microschemaContainer.getUuid().equals(v.getVersion().getSchemaContainer().getUuid())) .sorted((v1, v2) -> VersionUtil.compareVersions(v2.getVersion().getVersion(), v1.getVersion().getVersion())) .map(AbstractHibBranchSchemaVersion::getVersion) - .findFirst() + .findAny() .orElse(null); } @@ -361,7 +361,7 @@ public boolean hasTag(HibTag tag) { @Override public HibTag findTagByUuid(String uuid) { - return tags.stream().filter(t -> t.getUuid().equals(uuid)).findFirst().orElse(null); + return tags.stream().filter(t -> t.getUuid().equals(uuid)).findAny().orElse(null); } @Override diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibNodeImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibNodeImpl.java index 4ac3771965b..a6b31513817 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibNodeImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/domain/HibNodeImpl.java @@ -303,7 +303,7 @@ public void addTag(HibTag tag, HibBranch branch) { public void removeTag(HibTag tag, HibBranch branch) { Optional tagToRemove = tags.stream() .filter(t -> t.getId().getTagUUID().equals(UUIDUtil.toJavaUuid(tag.getUuid())) && t.getId().getBranchUUID().equals(UUIDUtil.toJavaUuid(branch.getUuid()))) - .findFirst(); + .findAny(); tagToRemove.ifPresent(tags::remove); } diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/permission/HibPermissionRoots.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/permission/HibPermissionRoots.java index 2af97c2302a..cc13fd99247 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/permission/HibPermissionRoots.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/permission/HibPermissionRoots.java @@ -87,8 +87,10 @@ public HibBaseElement buildPermissionRootWithParent(HibProject parent, Permissio .createQuery("from permissionroot where type = :type and parent = :parent", HibPermissionRootImpl.class) .setParameter("type", permissionType) .setParameter("parent", parent) - .getResultStream() - .findFirst() + .setMaxResults(1) + .getResultList() + .stream() + .findAny() .orElseGet(() -> createPermissionRoot(parent, permissionType)); } @@ -110,8 +112,10 @@ private HibPermissionRootImpl lazyGet(HibPermissionRootImpl permission, Permissi return currentTransaction.getEntityManager() .createQuery("from permissionroot where type = :type and parent is null", HibPermissionRootImpl.class) .setParameter("type", elementType) - .getResultStream() - .findFirst() + .setMaxResults(1) + .getResultList() + .stream() + .findAny() .orElseGet(() -> { HibernateTx hibTx = HibernateTx.get(); HibPermissionRootImpl newPermission = hibTx.create(HibPermissionRootImpl.class); diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/s3binary/impl/S3HibBinariesImpl.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/s3binary/impl/S3HibBinariesImpl.java index 779daa7d763..b49d86beb63 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/s3binary/impl/S3HibBinariesImpl.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/data/s3binary/impl/S3HibBinariesImpl.java @@ -13,6 +13,7 @@ import com.gentics.mesh.database.HibernateDatabase; import com.gentics.mesh.database.HibernateTx; import com.gentics.mesh.hibernate.data.domain.HibS3BinaryImpl; +import com.gentics.mesh.hibernate.util.HibernateUtil; import com.gentics.mesh.util.UUIDUtil; /** @@ -33,13 +34,10 @@ public S3HibBinariesImpl(HibernateDatabase database) { @Override public Transactional findByUuid(String uuid) { - return database.transactional((tx) -> tx.unwrap() + return database.transactional((tx) -> HibernateUtil.firstOrNull(tx.unwrap() .entityManager() .createNamedQuery("s3binary.findByUuids", S3HibBinary.class) - .setParameter("uuids", Set.of(UUIDUtil.toJavaUuid(uuid))) - .getResultStream() - .findAny() - .orElse(null)); + .setParameter("uuids", Set.of(UUIDUtil.toJavaUuid(uuid))))); } @Override @@ -47,11 +45,8 @@ public Transactional findByS3ObjectKey(String s3ObjectKey) { return database.transactional(tx -> { HibernateTx hibTx = (HibernateTx) tx; - return hibTx.entityManager().createNamedQuery("s3Binary.findByS3ObjectKey", HibS3BinaryImpl.class) - .setParameter("s3ObjectKey", s3ObjectKey) - .getResultStream() - .findFirst() - .orElse(null); + return HibernateUtil.firstOrNull(hibTx.entityManager().createNamedQuery("s3Binary.findByS3ObjectKey", HibS3BinaryImpl.class) + .setParameter("s3ObjectKey", s3ObjectKey)); }); } diff --git a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/util/HibernateUtil.java b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/util/HibernateUtil.java index 66a7162d5b5..5c748ea9e6c 100644 --- a/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/util/HibernateUtil.java +++ b/mdm/hibernate-core/src/main/java/com/gentics/mesh/hibernate/util/HibernateUtil.java @@ -50,6 +50,7 @@ import com.gentics.mesh.util.UUIDUtil; import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; import jakarta.persistence.TypedQuery; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; @@ -66,6 +67,18 @@ public final class HibernateUtil { private HibernateUtil() { } + /** + * Check, if query has items.. + * + * @param + * @param query + * @return + */ + public static boolean isNotEmpty(Query query) { + List resultList = query.setMaxResults(1).getResultList(); + return resultList.size() > 0; + } + /** * Get a first result item of a query, or null. * diff --git a/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/FieldSchemaContainer.java b/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/FieldSchemaContainer.java index 60db5ac69de..7cac4d47101 100644 --- a/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/FieldSchemaContainer.java +++ b/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/FieldSchemaContainer.java @@ -79,7 +79,7 @@ public interface FieldSchemaContainer extends RestModel { * @return */ default FieldSchema getField(String fieldName) { - return getFields().stream().filter(f -> f.getName().equals(fieldName)).findFirst().orElse(null); + return getFields().stream().filter(f -> f.getName().equals(fieldName)).findAny().orElse(null); } /** @@ -90,7 +90,7 @@ default FieldSchema getField(String fieldName) { * @return */ default T getField(String fieldName, Class classOfT) { - return classOfT.cast(getFields().stream().filter(f -> f.getName().equals(fieldName)).findFirst().orElse(null)); + return classOfT.cast(getFields().stream().filter(f -> f.getName().equals(fieldName)).findAny().orElse(null)); } /** diff --git a/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/LanguageOverrideUtil.java b/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/LanguageOverrideUtil.java index e1b91e9e6c6..0fbc409904a 100644 --- a/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/LanguageOverrideUtil.java +++ b/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/LanguageOverrideUtil.java @@ -32,7 +32,7 @@ private LanguageOverrideUtil() { public static void validateLanguageOverrides(JsonObject settings) { findLanguages(settings) .filter(unique().negate()) - .findFirst() + .findAny() .ifPresent(duplicateLanguage -> { throw error(BAD_REQUEST, "error_language_duplicate_override", duplicateLanguage); }); diff --git a/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/MicroschemaModel.java b/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/MicroschemaModel.java index b79859ba176..67b65d1f922 100644 --- a/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/MicroschemaModel.java +++ b/rest-model/src/main/java/com/gentics/mesh/core/rest/schema/MicroschemaModel.java @@ -29,7 +29,7 @@ default void validate() { } } return false; - }).findFirst(); + }).findAny(); if (firstDisallowed.isPresent()) { FieldSchema field = firstDisallowed.get(); String typeInfo = field.getType(); diff --git a/services/jwt-auth/src/main/java/com/gentics/mesh/auth/util/MappingHelper.java b/services/jwt-auth/src/main/java/com/gentics/mesh/auth/util/MappingHelper.java index 2a0f9587e15..a54a2780e18 100644 --- a/services/jwt-auth/src/main/java/com/gentics/mesh/auth/util/MappingHelper.java +++ b/services/jwt-auth/src/main/java/com/gentics/mesh/auth/util/MappingHelper.java @@ -186,7 +186,7 @@ public void load() { */ public boolean areMappedEntitiesMissing() { return entitiesByName.entrySet().stream().filter(entry -> mappedNames.contains(entry.getKey())) - .filter(entry -> entry.getValue() == null).findFirst().isPresent(); + .anyMatch(entry -> entry.getValue() == null); } /** diff --git a/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/AbstractTypeProvider.java b/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/AbstractTypeProvider.java index 60dbb82e139..d4925ab55d2 100644 --- a/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/AbstractTypeProvider.java +++ b/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/AbstractTypeProvider.java @@ -422,8 +422,8 @@ protected HibBaseElement handleBranchSchema(DataFetchingEnvironment env) { return handleUuidNameArgsNoPerm(env, uuid -> schemas.filter(schema -> { HibSchema container = schema.getSchemaContainer(); return container.getUuid().equals(uuid) && userDao.hasPermission(gc.getUser(), container, READ_PERM); - }).findFirst().get(), name -> schemas.filter(schema -> schema.getName().equals(name) && userDao.hasPermission(gc.getUser(), schema - .getSchemaContainer(), READ_PERM)).findFirst().get()); + }).findAny().get(), name -> schemas.filter(schema -> schema.getName().equals(name) && userDao.hasPermission(gc.getUser(), schema + .getSchemaContainer(), READ_PERM)).findAny().get()); } protected Page handleBranchSchemas(DataFetchingEnvironment env) { diff --git a/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/NodeTypeProvider.java b/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/NodeTypeProvider.java index 2ff1064165c..f011ef703a1 100644 --- a/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/NodeTypeProvider.java +++ b/verticles/graphql/src/main/java/com/gentics/mesh/graphql/type/NodeTypeProvider.java @@ -607,7 +607,7 @@ public Versioned> createNodeInterfaceFields(GraphQL return contentDao.getFieldContainers(node, tx.getBranch(gc), DRAFT).stream().filter(c -> { String lang = c.getLanguageTag(); return lang.equals(languageTag); - }).findFirst().map(contentDao::versions).orElse(null); + }).findAny().map(contentDao::versions).orElse(null); }).build(), // .language