Index: brokenlinks/repository/src/main/java/org/onehippo/cms7/brokenlinks/BrokenLinksCheckerDaemonModule.java
===================================================================
--- brokenlinks/repository/src/main/java/org/onehippo/cms7/brokenlinks/BrokenLinksCheckerDaemonModule.java (revision 40431)
+++ brokenlinks/repository/src/main/java/org/onehippo/cms7/brokenlinks/BrokenLinksCheckerDaemonModule.java (working copy)
@@ -23,15 +23,11 @@
import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.observation.Event;
import org.apache.commons.lang.StringUtils;
-import org.apache.jackrabbit.api.observation.JackrabbitEvent;
import org.hippoecm.repository.api.HippoNodeType;
import org.hippoecm.repository.util.JcrUtils;
-import org.onehippo.cms7.services.HippoServiceRegistry;
-import org.onehippo.repository.modules.AbstractReconfigurableDaemonModule;
+import org.onehippo.repository.modules.AbstractReconfigurableSchedulingDaemonModule;
import org.onehippo.repository.modules.RequiresService;
import org.onehippo.repository.scheduling.RepositoryJobCronTrigger;
import org.onehippo.repository.scheduling.RepositoryJobInfo;
@@ -51,13 +47,10 @@
*
*/
@RequiresService(types = { RepositoryScheduler.class })
-public class BrokenLinksCheckerDaemonModule extends AbstractReconfigurableDaemonModule {
+public class BrokenLinksCheckerDaemonModule extends AbstractReconfigurableSchedulingDaemonModule {
private static Logger log = LoggerFactory.getLogger(BrokenLinksCheckerDaemonModule.class);
- private static final String CONFIG_LOCK_ISDEEP_PROPERTY = "jcr:lockIsDeep";
- private static final String CONFIG_LOCK_OWNER = "jcr:lockOwner";
-
/**
* Flag property name whether or not the scheduled job should be enabled.
*/
@@ -76,131 +69,45 @@
/**
* Cron job group. If not specified, the default group is "default".
*/
- private static final String CRON_JOB_GROUP_PARAM_PROP = "cronJobName";
+ private static final String CRON_JOB_GROUP_PARAM_PROP = "cronJobGroup";
- private RepositoryJobInfo brokenLinksCheckingJobInfo;
-
- private boolean enabled;
- private String cronExpression;
- private String cronJobName;
- private String cronJobGroup;
-
- public boolean isEnabled() {
- return enabled;
+ @Override
+ protected boolean isSchedulerEnabled(Node moduleConfig) throws RepositoryException {
+ final Node moduleConfigNode = getNonHandleModuleConfigurationNode(moduleConfig);
+ return JcrUtils.getBooleanProperty(moduleConfigNode, ENABLED_PARAM_PROP, Boolean.FALSE);
}
- public String getCronExpression() {
- return cronExpression;
- }
-
- public String getCronJobName() {
- return cronJobName;
- }
-
- public String getCronJobGroup() {
- return cronJobGroup;
- }
-
@Override
- protected void doConfigure(Node moduleConfig) throws RepositoryException {
+ protected RepositoryJobInfo getRepositoryJobInfo(Node moduleConfig) throws RepositoryException {
final Node moduleConfigNode = getNonHandleModuleConfigurationNode(moduleConfig);
- enabled = JcrUtils.getBooleanProperty(moduleConfigNode, ENABLED_PARAM_PROP, Boolean.FALSE);
- cronExpression = JcrUtils.getStringProperty(moduleConfigNode, CRON_EXPRESSION_PARAM_PROP, null);
+ String jobName = JcrUtils.getStringProperty(moduleConfigNode, CRON_JOB_NAME_PARAM_PROP, BrokenLinksCheckingJob.class.getName());
+ String jobGroup = JcrUtils.getStringProperty(moduleConfigNode, CRON_JOB_GROUP_PARAM_PROP, DEFAULT_GROUP);
- cronJobName = JcrUtils.getStringProperty(moduleConfigNode, CRON_JOB_NAME_PARAM_PROP, null);
+ RepositoryJobInfo jobInfo = new RepositoryJobInfo(jobName, jobGroup, BrokenLinksCheckingJob.class);
- if (StringUtils.isBlank(cronJobName)) {
- cronJobName = BrokenLinksCheckingJob.class.getName();
+ for (Map.Entry entry : getModuleConfigurationParametersMap(moduleConfigNode).entrySet()) {
+ jobInfo.setAttribute(entry.getKey(), entry.getValue());
}
- cronJobGroup = JcrUtils.getStringProperty(moduleConfigNode, CRON_JOB_GROUP_PARAM_PROP, null);
-
- if (StringUtils.isBlank(cronJobGroup)) {
- cronJobGroup = "default";
- }
+ return jobInfo;
}
@Override
- protected void doInitialize(Session session) throws RepositoryException {
- final Node moduleConfig = JcrUtils.getNodeIfExists(moduleConfigPath, session);
- scheduleJob(moduleConfig);
- }
+ protected RepositoryJobTrigger getRepositoryJobTrigger(Node moduleConfig, RepositoryJobInfo jobInfo) throws RepositoryException {
+ final Node moduleConfigNode = getNonHandleModuleConfigurationNode(moduleConfig);
+ String cronExpr = JcrUtils.getStringProperty(moduleConfigNode, CRON_EXPRESSION_PARAM_PROP, null);
- @Override
- protected boolean isReconfigureEvent(Event event) throws RepositoryException {
- String eventPath = event.getPath();
- return !((JackrabbitEvent) event).isExternal() && !eventPath.endsWith(CONFIG_LOCK_ISDEEP_PROPERTY) && !eventPath.endsWith(CONFIG_LOCK_OWNER);
- }
-
- @Override
- protected void onConfigurationChange(final Node moduleConfig) throws RepositoryException {
- try {
- synchronized (this) {
- super.onConfigurationChange(moduleConfig);
- deleteScheduledJob();
- scheduleJob(moduleConfig);
- }
- } catch (RepositoryException e) {
- log.error("Failed to reconfigure broken links checker.", e);
+ if (StringUtils.isNotBlank(cronExpr)) {
+ final RepositoryJobTrigger jobTrigger =
+ new RepositoryJobCronTrigger(jobInfo.getGroup() + "-" + jobInfo.getName() + "-trigger", cronExpr);
+ return jobTrigger;
}
- }
- @Override
- protected void doShutdown() {
+ return null;
}
- private void deleteScheduledJob() {
- if (brokenLinksCheckingJobInfo == null) {
- return;
- }
-
- try {
- final RepositoryScheduler repositoryScheduler = HippoServiceRegistry.getService(RepositoryScheduler.class);
- repositoryScheduler.deleteJob(brokenLinksCheckingJobInfo.getName(), brokenLinksCheckingJobInfo.getGroup());
- log.info("Deleted the scheduled job: '{}'.", brokenLinksCheckingJobInfo.getName());
- } catch (RepositoryException e) {
- log.error("Failed to delete job: " + brokenLinksCheckingJobInfo, e);
- }
-
- brokenLinksCheckingJobInfo = null;
- }
-
- private void scheduleJob(Node moduleConfig) {
- if (!isEnabled()) {
- log.info("The broken links checker is not enabled in the module configuration. Skipping broken links checker job scheduling.");
- return;
- }
-
- if (StringUtils.isBlank(getCronExpression())) {
- log.warn("The cron expression for broken links checker module is blank: '{}'. Skipping broken links checker job scheduling.", getCronExpression());
- return;
- }
-
- try {
- final RepositoryScheduler repositoryScheduler = HippoServiceRegistry.getService(RepositoryScheduler.class);
-
- if (repositoryScheduler.checkExists(getCronJobName(), getCronJobGroup())) {
- return;
- }
-
- RepositoryJobInfo tempJobInfo = new RepositoryJobInfo(getCronJobName(), getCronJobGroup(), BrokenLinksCheckingJob.class);
-
- for (Map.Entry entry : getModuleConfigurationParametersMap(moduleConfig).entrySet()) {
- tempJobInfo.setAttribute(entry.getKey(), entry.getValue());
- }
-
- final RepositoryJobTrigger brokenLinksCheckingJobTrigger =
- new RepositoryJobCronTrigger(tempJobInfo.getGroup() + "-" + tempJobInfo.getName() + "-trigger", getCronExpression());
- repositoryScheduler.scheduleJob(tempJobInfo, brokenLinksCheckingJobTrigger);
- brokenLinksCheckingJobInfo = tempJobInfo;
- log.info("Scheduled a job: '{}:{}'.", tempJobInfo.getGroup(), tempJobInfo.getName());
- } catch (RepositoryException e) {
- log.error("Failed to scheudle a job.", e);
- }
- }
-
/**
- * Returns the default module configuration node unless the node is type of hippo:handle.
+ * Returns the _Broken_Link_Checker_Specific_ default module configuration node unless the node is type of hippo:handle.
* If it is hippo:handle, returns the child node having the same node name for backward compatibilty.
* @return
* @throws RepositoryException
@@ -238,4 +145,5 @@
return params;
}
+
}
Index: brokenlinks/repository/src/main/java/org/onehippo/cms7/brokenlinks/BrokenLinksCheckingJob.java
===================================================================
--- brokenlinks/repository/src/main/java/org/onehippo/cms7/brokenlinks/BrokenLinksCheckingJob.java (revision 40431)
+++ brokenlinks/repository/src/main/java/org/onehippo/cms7/brokenlinks/BrokenLinksCheckingJob.java (working copy)
@@ -31,7 +31,6 @@
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
import javax.jcr.query.QueryResult;
import org.apache.commons.lang.StringUtils;
@@ -65,7 +64,7 @@
Session session = null;
try {
- session = context.getSession(new SimpleCredentials("system", new char[] {}));
+ session = context.getSystemSession();
Map params = new HashMap();
Index: brokenlinks/repository/pom.xml
===================================================================
--- brokenlinks/repository/pom.xml (revision 40431)
+++ brokenlinks/repository/pom.xml (working copy)
@@ -53,13 +53,6 @@
- org.apache.jackrabbit
- jackrabbit-api
- ${jackrabbit.version}
- provided
-
-
-
commons-lang
commons-lang
provided