You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/09/27 15:09:51 UTC
[1/2] syncope git commit: Fixing problems of DynRealms with
Elasticsearch
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ò <il...@apache.org>
Authored: Wed Sep 27 17:07:51 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
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<DynRealm> 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<DynRealm> 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<DynRealm> implements DynRealmDAO
clearDynMembers(merged);
for (DynRealmMembership memb : merged.getDynMemberships()) {
- List<Any<?>> matching = searchDAO().search(
+ List<Any<?>> 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<DynRealm> 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<UserTO> matchingUsers = userService.search(new AnyQuery.Builder().realm("/").fiql(
SyncopeClient.getUserSearchConditionBuilder().inDynRealms(dynRealm.getKey()).query()).build());
[2/2] syncope git commit: Fixing problems of DynRealms with
Elasticsearch
Posted by il...@apache.org.
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/c23c0d51
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/c23c0d51
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/c23c0d51
Branch: refs/heads/master
Commit: c23c0d513ce05fbec378abcab8c76eb149c8994b
Parents: 4fe8d08
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Sep 27 17:07:51 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Sep 27 17:09:36 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/c23c0d51/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 1c84be5..8e6f59b 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
@@ -32,7 +32,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;
@@ -47,6 +49,8 @@ public class JPADynRealmDAO extends AbstractDAO<DynRealm> implements DynRealmDAO
private AnySearchDAO searchDAO;
+ private AnySearchDAO jpaAnySearchDAO;
+
private AnySearchDAO searchDAO() {
synchronized (this) {
if (searchDAO == null) {
@@ -56,6 +60,20 @@ public class JPADynRealmDAO extends AbstractDAO<DynRealm> 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<DynRealm> implements DynRealmDAO
// refresh dynamic memberships
clearDynMembers(merged);
- merged.getDynMemberships().stream().map(memb -> searchDAO().search(
+ merged.getDynMemberships().stream().map(memb -> jpaAnySearchDAO().search(
SearchCondConverter.convert(memb.getFIQLCond()), memb.getAnyType().getKind())).
forEachOrdered(matching -> {
matching.forEach(any -> {
@@ -122,7 +140,7 @@ public class JPADynRealmDAO extends AbstractDAO<DynRealm> implements DynRealmDAO
delete.setParameter(1, dynRealm.getKey());
delete.setParameter(2, any.getKey());
delete.executeUpdate();
- if (searchDAO().matches(any, SearchCondConverter.convert(memb.get().getFIQLCond()))) {
+ if (jpaAnySearchDAO().matches(any, SearchCondConverter.convert(memb.get().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/c23c0d51/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 2772092..c1348f8 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
@@ -47,6 +47,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 {
@@ -138,6 +139,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<UserTO> matchingUsers = userService.search(new AnyQuery.Builder().realm("/").fiql(
SyncopeClient.getUserSearchConditionBuilder().inDynRealms(dynRealm.getKey()).query()).build());