[SYNCOPE-1212] On PropagationTask execution
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/79f96cdd Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/79f96cdd Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/79f96cdd Branch: refs/heads/master Commit: 79f96cdd0f37580558a89c95d90bd9e83725127c Parents: 678bff9 Author: Francesco Chicchiriccò <[email protected]> Authored: Wed Sep 27 12:43:04 2017 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Wed Sep 27 12:52:44 2017 +0200 ---------------------------------------------------------------------- .../jpa/dao/JPAExternalResourceDAO.java | 18 ++-- .../entity/resource/JPAExternalResource.java | 1 - .../DefaultPropagationTaskCallable.java | 96 ++++++++++++++++++++ .../PriorityPropagationTaskExecutor.java | 2 +- .../PropagationTaskCallableImpl.java | 96 -------------------- 5 files changed, 106 insertions(+), 107 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/79f96cdd/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java index 5822a6e..8e6485f 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java @@ -293,15 +293,15 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem policyDAO().findByResource(resource). forEach(policy -> policy.getResources().remove(resource)); - resource.getProvisions().stream().map(provision -> { - provision.getMapping().getItems().forEach(item -> item.setMapping(null)); - return provision; - }).map(provision -> { - provision.getMapping().getItems().clear(); - provision.setMapping(null); - provision.setResource(null); - return provision; - }).forEachOrdered(provision -> virSchemaDAO().findByProvision(provision). + resource.getProvisions().stream(). + filter(provision -> provision.getMapping() != null). + peek(provision -> provision.getMapping().getItems().forEach(item -> item.setMapping(null))). + peek(provision -> { + provision.getMapping().getItems().clear(); + provision.setMapping(null); + provision.setResource(null); + }). + forEachOrdered(provision -> virSchemaDAO().findByProvision(provision). forEach(schema -> virSchemaDAO().delete(schema.getKey()))); externalResourceHistoryConfDAO().deleteByEntity(resource); http://git-wip-us.apache.org/repos/asf/syncope/blob/79f96cdd/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java index 6c34916..8283df0 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java @@ -89,7 +89,6 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex * The resource type is identified by the associated connector. */ @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE }) - @NotNull private JPAConnInstance connector; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY, mappedBy = "resource") http://git-wip-us.apache.org/repos/asf/syncope/blob/79f96cdd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java new file mode 100644 index 0000000..e13864e --- /dev/null +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationTaskCallable.java @@ -0,0 +1,96 @@ +/* + * 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.syncope.core.provisioning.java.propagation; + +import java.util.Collection; +import org.apache.syncope.core.spring.security.AuthContextUtils; +import org.apache.syncope.core.spring.security.SyncopeAuthenticationDetails; +import org.apache.syncope.core.persistence.api.entity.task.PropagationTask; +import org.apache.syncope.core.persistence.api.entity.task.TaskExec; +import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter; +import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskCallable; +import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.User; +import org.springframework.transaction.annotation.Transactional; + +@Transactional(rollbackFor = { Throwable.class }) +public class DefaultPropagationTaskCallable implements PropagationTaskCallable { + + protected static final Logger LOG = LoggerFactory.getLogger(PropagationTaskCallable.class); + + protected final String domain; + + protected final String username; + + protected final Collection<? extends GrantedAuthority> authorities; + + protected AbstractPropagationTaskExecutor executor; + + protected PropagationTask task; + + protected PropagationReporter reporter; + + public DefaultPropagationTaskCallable() { + SecurityContext ctx = SecurityContextHolder.getContext(); + domain = AuthContextUtils.getDomain(); + username = ctx.getAuthentication().getName(); + authorities = ctx.getAuthentication().getAuthorities(); + } + + @Override + public void setExecutor(final PropagationTaskExecutor executor) { + if (executor instanceof AbstractPropagationTaskExecutor) { + this.executor = (AbstractPropagationTaskExecutor) executor; + } + } + + @Override + public void setTask(final PropagationTask task) { + this.task = task; + } + + @Override + public void setReporter(final PropagationReporter reporter) { + this.reporter = reporter; + } + + @Override + public TaskExec call() throws Exception { + // set security context according to the one gathered at instantiation time from the calling thread + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken( + new User(username, "FAKE_PASSWORD", authorities), "FAKE_PASSWORD", authorities); + auth.setDetails(new SyncopeAuthenticationDetails(domain)); + SecurityContextHolder.getContext().setAuthentication(auth); + + LOG.debug("Execution started for {}", task); + + TaskExec execution = executor.execute(task, reporter); + + LOG.debug("Execution completed for {}, {}", task, execution); + + return execution; + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/79f96cdd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java index 8322635..c7f9ee5 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java @@ -68,7 +68,7 @@ public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExec final PropagationTask task, final PropagationReporter reporter) { PropagationTaskCallable callable = (PropagationTaskCallable) ApplicationContextProvider.getBeanFactory(). - createBean(PropagationTaskCallableImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false); + createBean(DefaultPropagationTaskCallable.class, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false); callable.setExecutor(this); callable.setTask(task); callable.setReporter(reporter); http://git-wip-us.apache.org/repos/asf/syncope/blob/79f96cdd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationTaskCallableImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationTaskCallableImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationTaskCallableImpl.java deleted file mode 100644 index 33adeec..0000000 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationTaskCallableImpl.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.syncope.core.provisioning.java.propagation; - -import java.util.Collection; -import org.apache.syncope.core.spring.security.AuthContextUtils; -import org.apache.syncope.core.spring.security.SyncopeAuthenticationDetails; -import org.apache.syncope.core.persistence.api.entity.task.PropagationTask; -import org.apache.syncope.core.persistence.api.entity.task.TaskExec; -import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter; -import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskCallable; -import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; -import org.springframework.transaction.annotation.Transactional; - -@Transactional(rollbackFor = { Throwable.class }) -public class PropagationTaskCallableImpl implements PropagationTaskCallable { - - private static final Logger LOG = LoggerFactory.getLogger(PropagationTaskCallable.class); - - private final String domain; - - private final String username; - - private final Collection<? extends GrantedAuthority> authorities; - - private AbstractPropagationTaskExecutor executor; - - private PropagationTask task; - - private PropagationReporter reporter; - - public PropagationTaskCallableImpl() { - SecurityContext ctx = SecurityContextHolder.getContext(); - domain = AuthContextUtils.getDomain(); - username = ctx.getAuthentication().getName(); - authorities = ctx.getAuthentication().getAuthorities(); - } - - @Override - public void setExecutor(final PropagationTaskExecutor executor) { - if (executor instanceof AbstractPropagationTaskExecutor) { - this.executor = (AbstractPropagationTaskExecutor) executor; - } - } - - @Override - public void setTask(final PropagationTask task) { - this.task = task; - } - - @Override - public void setReporter(final PropagationReporter reporter) { - this.reporter = reporter; - } - - @Override - public TaskExec call() throws Exception { - // set security context according to the one gathered at instantiation time from the calling thread - UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken( - new User(username, "FAKE_PASSWORD", authorities), "FAKE_PASSWORD", authorities); - auth.setDetails(new SyncopeAuthenticationDetails(domain)); - SecurityContextHolder.getContext().setAuthentication(auth); - - LOG.debug("Execution started for {}", task); - - TaskExec execution = executor.execute(task, reporter); - - LOG.debug("Execution completed for {}, {}", task, execution); - - return execution; - } - -}
