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 2012/07/30 14:25:29 UTC
svn commit: r1367065 - in /incubator/syncope/trunk/core/src:
main/java/org/apache/syncope/core/notification/
main/java/org/apache/syncope/core/persistence/beans/
main/java/org/apache/syncope/core/persistence/dao/impl/
main/java/org/apache/syncope/core/...
Author: ilgrosso
Date: Mon Jul 30 12:25:28 2012
New Revision: 1367065
URL: http://svn.apache.org/viewvc?rev=1367065&view=rev
Log:
[SYNCOPE-116] Reverting (part of) what done for SYNCOPE-54 - adding a boolean 'executed' field to NotificationTask for NotificationJob to be able to fetch only non-executed tasks
Modified:
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java
incubator/syncope/trunk/core/src/test/resources/content.xml
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java Mon Jul 30 12:25:28 2012
@@ -259,23 +259,12 @@ public class NotificationManager {
public TaskExec storeExecAndUpdateLatestExecStatus(final TaskExec execution) {
NotificationTask task = taskDAO.find(execution.getTask().getId());
task.addExec(execution);
- task.setLatestExecStatus(execution.getStatus());
+ task.setExecuted(true);
task = taskDAO.save(task);
// NotificationTasks always have a single execution at most
return task.getExecs().get(0);
}
- /**
- * Update latest execution status of a NotificationTask.
- *
- * @param execution task execution
- */
- public void updateLatestExecStatus(final TaskExec execution) {
- NotificationTask task = taskDAO.find(execution.getTask().getId());
- task.setLatestExecStatus(execution.getStatus());
- taskDAO.save(task);
- }
-
public Map<String, String> findAll() {
Map<String, String> syncopeConfMap = new HashMap<String, String>();
for (SyncopeConf conf : confDAO.findAll()) {
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java Mon Jul 30 12:25:28 2012
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persiste
import java.util.HashSet;
import java.util.Set;
+import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
@@ -27,6 +28,8 @@ import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Lob;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import org.apache.syncope.types.TraceLevel;
@@ -56,6 +59,11 @@ public class NotificationTask extends Ta
@Lob
private String htmlBody;
+ @Basic
+ @Min(0)
+ @Max(1)
+ private Integer executed;
+
@Enumerated(EnumType.STRING)
@NotNull
private TraceLevel traceLevel;
@@ -64,6 +72,7 @@ public class NotificationTask extends Ta
super();
recipients = new HashSet<String>();
+ executed = getBooleanAsInteger(false);
}
public Set<String> getRecipients() {
@@ -117,6 +126,14 @@ public class NotificationTask extends Ta
this.htmlBody = htmlBody;
}
+ public boolean isExecuted() {
+ return isBooleanAsInteger(executed);
+ }
+
+ public void setExecuted(boolean executed) {
+ this.executed = getBooleanAsInteger(executed);
+ }
+
public TraceLevel getTraceLevel() {
return traceLevel;
}
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java Mon Jul 30 12:25:28 2012
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persiste
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
-import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.Id;
@@ -41,9 +40,6 @@ public class Task extends AbstractBaseBe
@Id
private Long id;
- @Column(nullable = true)
- private String latestExecStatus;
-
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "task")
private List<TaskExec> executions;
@@ -57,14 +53,6 @@ public class Task extends AbstractBaseBe
return id;
}
- public String getLatestExecStatus() {
- return latestExecStatus;
- }
-
- public void setLatestExecStatus(String latestExecStatus) {
- this.latestExecStatus = latestExecStatus;
- }
-
public boolean addExec(TaskExec exec) {
return exec != null && !executions.contains(exec) && executions.add(exec);
}
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java Mon Jul 30 12:25:28 2012
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;
import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.persistence.beans.NotificationTask;
import org.apache.syncope.core.persistence.beans.PropagationTask;
import org.apache.syncope.core.persistence.beans.SchedTask;
import org.apache.syncope.core.persistence.beans.SyncTask;
@@ -53,14 +54,18 @@ public class TaskDAOImpl extends Abstrac
@Override
public <T extends Task> List<T> findToExec(final Class<T> reference) {
StringBuilder queryString = buildfindAllQuery(reference);
-
+
if (SchedTask.class.equals(reference)) {
queryString.append("AND ");
} else {
queryString.append("WHERE ");
}
-
- queryString.append("e.latestExecStatus IS NULL ");
+
+ if (reference.equals(NotificationTask.class)) {
+ queryString.append("e.executed = 0 ");
+ } else {
+ queryString.append("e.executions IS EMPTY ");
+ }
queryString.append("ORDER BY e.id DESC");
final Query query = entityManager.createQuery(queryString.toString());
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java Mon Jul 30 12:25:28 2012
@@ -20,16 +20,6 @@ package org.apache.syncope.core.rest.dat
import java.util.HashSet;
import java.util.Set;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.stereotype.Component;
-import org.springframework.util.ClassUtils;
import org.apache.syncope.client.report.ReportletConf;
import org.apache.syncope.client.to.ReportExecTO;
import org.apache.syncope.client.to.ReportTO;
@@ -40,6 +30,16 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.dao.ReportExecDAO;
import org.apache.syncope.core.report.Reportlet;
import org.apache.syncope.core.report.ReportletConfClass;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ClassUtils;
@Component
public class ReportDataBinder {
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java Mon Jul 30 12:25:28 2012
@@ -20,16 +20,6 @@ package org.apache.syncope.core.rest.dat
import javassist.NotFoundException;
import org.apache.commons.lang.StringUtils;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.stereotype.Component;
import org.apache.syncope.client.to.AbstractAttributableTO;
import org.apache.syncope.client.to.AttributeTO;
import org.apache.syncope.client.to.MembershipTO;
@@ -49,9 +39,20 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.beans.Task;
import org.apache.syncope.core.persistence.beans.TaskExec;
import org.apache.syncope.core.persistence.dao.ResourceDAO;
+import org.apache.syncope.core.persistence.dao.TaskExecDAO;
import org.apache.syncope.core.util.JexlUtil;
import org.apache.syncope.core.util.TaskUtil;
import org.apache.syncope.types.SyncopeClientExceptionType;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.stereotype.Component;
@Component
public class TaskDataBinder {
@@ -61,7 +62,7 @@ public class TaskDataBinder {
*/
private static final Logger LOG = LoggerFactory.getLogger(TaskDataBinder.class);
- private static final String[] IGNORE_TASK_PROPERTIES = {"executions", "resource", "user"};
+ private static final String[] IGNORE_TASK_PROPERTIES = {"latestExecStatus", "executions", "resource", "user"};
private static final String[] IGNORE_TASK_EXECUTION_PROPERTIES = {"id", "task"};
@@ -69,6 +70,9 @@ public class TaskDataBinder {
private ResourceDAO resourceDAO;
@Autowired
+ private TaskExecDAO taskExecDAO;
+
+ @Autowired
private SchedulerFactoryBean scheduler;
@Autowired
@@ -217,6 +221,11 @@ public class TaskDataBinder {
TaskTO taskTO = taskUtil.newTaskTO();
BeanUtils.copyProperties(task, taskTO, IGNORE_TASK_PROPERTIES);
+ TaskExec latestExec = taskExecDAO.findLatestStarted(task);
+ taskTO.setLatestExecStatus(latestExec == null
+ ? ""
+ : latestExec.getStatus());
+
for (TaskExec execution : task.getExecs()) {
taskTO.addExecution(getTaskExecTO(execution));
}
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java Mon Jul 30 12:25:28 2012
@@ -88,7 +88,6 @@ public abstract class AbstractTaskJob im
@Override
public final void execute(final JobExecutionContext context) throws JobExecutionException {
-
task = taskDAO.find(taskId);
if (task == null) {
throw new JobExecutionException("Task " + taskId + " not found");
@@ -117,7 +116,6 @@ public abstract class AbstractTaskJob im
taskExecDAO.save(execution);
}
- task.setLatestExecStatus(execution.getStatus());
task = taskDAO.save(task);
}
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java Mon Jul 30 12:25:28 2012
@@ -201,8 +201,6 @@ public class NotificationJob implements
if (hasToBeRegistered(execution)) {
execution = notificationManager.storeExecAndUpdateLatestExecStatus(execution);
- } else {
- notificationManager.updateLatestExecStatus(execution);
}
return execution;
Modified: incubator/syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/resources/content.xml?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/resources/content.xml (original)
+++ incubator/syncope/trunk/core/src/test/resources/content.xml Mon Jul 30 12:25:28 2012
@@ -545,7 +545,7 @@ under the License.
mandatoryCondition="false" resource_name="resource-ldap"/>
<Task DTYPE="PropagationTask" id="1" propagationMode="TWO_PHASES" propagationOperation="UPDATE"
- resource_name="ws-target-resource-2" syncopeUser_id="1" latestExecStatus="SUCCESS"
+ resource_name="ws-target-resource-2" syncopeUser_id="1"
xmlAttributes="%3Cset%3E%0A++%3Corg.identityconnectors.framework.common.objects.Name%3E%0A++++%3Cname%3E__NAME__%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3EuserId%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Name%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3E__PASSWORD__%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Corg.identityconnectors.common.security.GuardedString%3E%0A++++++++++%3C__readOnly%3Efalse%3C%2F__readOnly%3E%0A++++++++++%3C__disposed%3Efalse%3C%2F__disposed%3E%0A+++++++++
+%3C__encryptedBytes%3EQTOgwEhIHqtAI%2FYlgDhYc37esEF8VLDMU2IY1ciltrg%3D%3C%2F__encryptedBytes%3E%0A++++++++++%3C__base64SHA1Hash%3EW5%2FrwtdCnI8gAnIUhKcahMEnMMc%3D%3C%2F__base64SHA1Hash%3E%0A++++++++%3C%2Forg.identityconnectors.common.security.GuardedString%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3Etype%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3Etype%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3Eful
lname%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3Efullname%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A%3C%2Fset%3E%0A"/>
<TaskExec id="1" task_id="1" status="SUCCESS"/>
<Task DTYPE="PropagationTask" id="2" propagationMode="ONE_PHASE" propagationOperation="CREATE"