Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 2193D200D0B for ; Wed, 27 Sep 2017 17:09:55 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 2016F1609EB; Wed, 27 Sep 2017 15:09:55 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3C1E61609BC for ; Wed, 27 Sep 2017 17:09:54 +0200 (CEST) Received: (qmail 15445 invoked by uid 500); 27 Sep 2017 15:09:53 -0000 Mailing-List: contact commits-help@syncope.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@syncope.apache.org Delivered-To: mailing list commits@syncope.apache.org Received: (qmail 15436 invoked by uid 99); 27 Sep 2017 15:09:53 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 27 Sep 2017 15:09:53 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 1DFB4F5AFB; Wed, 27 Sep 2017 15:09:51 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: ilgrosso@apache.org To: commits@syncope.apache.org Date: Wed, 27 Sep 2017 15:09:51 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/2] syncope git commit: Fixing problems of DynRealms with Elasticsearch archived-at: Wed, 27 Sep 2017 15:09:55 -0000 Repository: syncope Updated Branches: refs/heads/2_0_X af71cbbe6 -> ee7ddd4b9 refs/heads/master 4fe8d084a -> c23c0d513 Fixing problems of DynRealms with Elasticsearch Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/ee7ddd4b Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/ee7ddd4b Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/ee7ddd4b Branch: refs/heads/2_0_X Commit: ee7ddd4b925dd72f183a313edd4918f01138a87f Parents: af71cbb Author: Francesco Chicchiriccò Authored: Wed Sep 27 17:07:51 2017 +0200 Committer: Francesco Chicchiriccò Committed: Wed Sep 27 17:07:51 2017 +0200 ---------------------------------------------------------------------- .../persistence/jpa/dao/JPADynRealmDAO.java | 22 ++++++++++++++++++-- .../apache/syncope/fit/core/DynRealmITCase.java | 9 ++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/ee7ddd4b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java index dfb3d34..0ef29e6 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java @@ -31,7 +31,9 @@ import org.apache.syncope.core.persistence.jpa.entity.JPADynRealm; import org.apache.syncope.core.provisioning.api.event.AnyCreatedUpdatedEvent; import org.apache.syncope.core.spring.ApplicationContextProvider; import org.apache.syncope.core.spring.security.AuthContextUtils; +import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -46,6 +48,8 @@ public class JPADynRealmDAO extends AbstractDAO implements DynRealmDAO private AnySearchDAO searchDAO; + private AnySearchDAO jpaAnySearchDAO; + private AnySearchDAO searchDAO() { synchronized (this) { if (searchDAO == null) { @@ -55,6 +59,20 @@ public class JPADynRealmDAO extends AbstractDAO implements DynRealmDAO return searchDAO; } + private AnySearchDAO jpaAnySearchDAO() { + synchronized (this) { + if (jpaAnySearchDAO == null) { + if (AopUtils.getTargetClass(searchDAO()).equals(JPAAnySearchDAO.class)) { + jpaAnySearchDAO = searchDAO(); + } else { + jpaAnySearchDAO = (AnySearchDAO) ApplicationContextProvider.getBeanFactory(). + createBean(JPAAnySearchDAO.class, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true); + } + } + } + return jpaAnySearchDAO; + } + @Override public DynRealm find(final String key) { return entityManager().find(JPADynRealm.class, key); @@ -75,7 +93,7 @@ public class JPADynRealmDAO extends AbstractDAO implements DynRealmDAO clearDynMembers(merged); for (DynRealmMembership memb : merged.getDynMemberships()) { - List> matching = searchDAO().search( + List> matching = jpaAnySearchDAO().search( SearchCondConverter.convert(memb.getFIQLCond()), memb.getAnyType().getKind()); for (Any any : matching) { Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)"); @@ -121,7 +139,7 @@ public class JPADynRealmDAO extends AbstractDAO implements DynRealmDAO delete.setParameter(2, any.getKey()); delete.executeUpdate(); - if (searchDAO().matches(any, SearchCondConverter.convert(memb.getFIQLCond()))) { + if (jpaAnySearchDAO().matches(any, SearchCondConverter.convert(memb.getFIQLCond()))) { Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)"); insert.setParameter(1, any.getKey()); insert.setParameter(2, dynRealm.getKey()); http://git-wip-us.apache.org/repos/asf/syncope/blob/ee7ddd4b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java index 91ac3c5..ee6be00 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java @@ -49,6 +49,7 @@ import org.apache.syncope.common.rest.api.service.DynRealmService; import org.apache.syncope.common.rest.api.service.GroupService; import org.apache.syncope.common.rest.api.service.UserService; import org.apache.syncope.fit.AbstractITCase; +import org.apache.syncope.fit.ElasticsearchDetector; import org.junit.Test; public class DynRealmITCase extends AbstractITCase { @@ -140,6 +141,14 @@ public class DynRealmITCase extends AbstractITCase { assertNotNull(group); final String groupKey = group.getKey(); + if (ElasticsearchDetector.isElasticSearchEnabled(syncopeService)) { + try { + Thread.sleep(2000); + } catch (InterruptedException ex) { + // ignore + } + } + // 5. verify that the new user and group are found when searching by dynamic realm PagedResult matchingUsers = userService.search(new AnyQuery.Builder().realm("/").fiql( SyncopeClient.getUserSearchConditionBuilder().inDynRealms(dynRealm.getKey()).query()).build());