Repository: syncope Updated Branches: refs/heads/2_0_X 59aa00ff0 -> 522e16749 refs/heads/master 678bff96d -> 79f96cdd0
[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/522e1674 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/522e1674 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/522e1674 Branch: refs/heads/2_0_X Commit: 522e16749265d36c5061242d0ac581433f9f19fc Parents: 59aa00f Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Wed Sep 27 12:43:04 2017 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Wed Sep 27 12:43:04 2017 +0200 ---------------------------------------------------------------------- .../jpa/dao/JPAExternalResourceDAO.java | 10 +- .../entity/resource/JPAExternalResource.java | 1 - .../DefaultPropagationTaskCallable.java | 96 ++++++++++++++++++++ .../PriorityPropagationTaskExecutor.java | 2 +- .../PropagationTaskCallableImpl.java | 96 -------------------- 5 files changed, 103 insertions(+), 102 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/522e1674/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 43b36d5..f63eff0 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 @@ -326,11 +326,13 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem } for (Provision provision : resource.getProvisions()) { - for (MappingItem item : provision.getMapping().getItems()) { - item.setMapping(null); + if (provision.getMapping() != null) { + for (MappingItem item : provision.getMapping().getItems()) { + item.setMapping(null); + } + provision.getMapping().getItems().clear(); + provision.setMapping(null); } - provision.getMapping().getItems().clear(); - provision.setMapping(null); provision.setResource(null); for (VirSchema schema : virSchemaDAO().findByProvision(provision)) { http://git-wip-us.apache.org/repos/asf/syncope/blob/522e1674/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 30462ce..4fdf42f 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/522e1674/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/522e1674/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 5fc32e1..8fe6cf5 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 @@ -70,7 +70,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/522e1674/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; - } - -}