This is an automated email from the ASF dual-hosted git repository.

joerghoh pushed a commit to branch SLING-13042
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-event.git


The following commit(s) were added to refs/heads/SLING-13042 by this push:
     new 135fe05  Revert "SLING-13042 use try-with-resource for the 
ResourceResolver"
135fe05 is described below

commit 135fe05fcf95f6c6678adb316fcafcd8dc28ebb1
Author: Joerg Hoh <[email protected]>
AuthorDate: Tue Dec 23 20:04:31 2025 +0100

    Revert "SLING-13042 use try-with-resource for the ResourceResolver"
    
    This reverts commit b8ebed5035484fda6ea6ff987a7ea36eb281d4b8.
---
 .../impl/jobs/config/JobManagerConfiguration.java  | 186 +++++++++++----------
 1 file changed, 96 insertions(+), 90 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java
 
b/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java
index d21cb34..1cba173 100644
--- 
a/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java
+++ 
b/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java
@@ -65,37 +65,54 @@ import org.slf4j.LoggerFactory;
  * Configuration of the job handling
  *
  */
-@Component(immediate = true, service = JobManagerConfiguration.class, name = 
"org.apache.sling.event.impl.jobs.jcr.PersistenceHandler", property = {
-        Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
-        JobManagerConfiguration.PROPERTY_REPOSITORY_PATH + "=" + 
JobManagerConfiguration.DEFAULT_REPOSITORY_PATH,
-        JobManagerConfiguration.PROPERTY_SCHEDULED_JOBS_PATH + "="
-                + JobManagerConfiguration.DEFAULT_SCHEDULED_JOBS_PATH,
-        JobManagerConfiguration.PROPERTY_BACKGROUND_LOAD_DELAY + ":Long="
-                + JobManagerConfiguration.DEFAULT_BACKGROUND_LOAD_DELAY })
+@Component(
+        immediate = true,
+        service = JobManagerConfiguration.class,
+        name = "org.apache.sling.event.impl.jobs.jcr.PersistenceHandler",
+        property = {
+            Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+            JobManagerConfiguration.PROPERTY_REPOSITORY_PATH + "=" + 
JobManagerConfiguration.DEFAULT_REPOSITORY_PATH,
+            JobManagerConfiguration.PROPERTY_SCHEDULED_JOBS_PATH + "="
+                    + JobManagerConfiguration.DEFAULT_SCHEDULED_JOBS_PATH,
+            JobManagerConfiguration.PROPERTY_BACKGROUND_LOAD_DELAY + ":Long="
+                    + JobManagerConfiguration.DEFAULT_BACKGROUND_LOAD_DELAY
+        })
 @Designate(ocd = JobManagerConfiguration.Config.class)
 public class JobManagerConfiguration {
 
-    @ObjectClassDefinition(name = "Apache Sling Job Manager", description = 
"This is the central service of the job handling.")
+    @ObjectClassDefinition(
+            name = "Apache Sling Job Manager",
+            description = "This is the central service of the job handling.")
     public @interface Config {
 
-        @AttributeDefinition(name = "Disable Distribution", description = "If 
the distribution is disabled, all jobs will be processed on the leader only! "
-                + "Please use this switch with care.")
+        @AttributeDefinition(
+                name = "Disable Distribution",
+                description = "If the distribution is disabled, all jobs will 
be processed on the leader only! "
+                        + "Please use this switch with care.")
         boolean job_consumermanager_disableDistribution() default false;
 
-        @AttributeDefinition(name = "Startup Delay", description = "Specify 
amount in seconds that job manager waits on startup before starting with job 
handling. "
-                + "This can be used to allow enough time to restart a cluster 
before jobs are eventually reassigned.")
+        @AttributeDefinition(
+                name = "Startup Delay",
+                description =
+                        "Specify amount in seconds that job manager waits on 
startup before starting with job handling. "
+                                + "This can be used to allow enough time to 
restart a cluster before jobs are eventually reassigned.")
         long startup_delay() default 30;
 
-        @AttributeDefinition(name = "Clean-up removed jobs period", 
description = "Specify the periodic interval in minutes (default is 48h - use 0 
to disable) after which "
-                + "removed jobs (ERROR or DROPPED) should be cleaned from the 
repository.")
+        @AttributeDefinition(
+                name = "Clean-up removed jobs period",
+                description =
+                        "Specify the periodic interval in minutes (default is 
48h - use 0 to disable) after which "
+                                + "removed jobs (ERROR or DROPPED) should be 
cleaned from the repository.")
         int cleanup_period() default 2880;
 
-        @AttributeDefinition(name = "Progress Log message's max count", 
description = "Max number of log messages that can stored by consumer to add 
information about current state of Job.\n"
-                + "Any attempt to add more information would result into 
purging of the least recent messages."
-                + "Use 0 to discard all the logs. default is -1 (to indicate 
infinite). ")
+        @AttributeDefinition(
+                name = "Progress Log message's max count",
+                description =
+                        "Max number of log messages that can stored by 
consumer to add information about current state of Job.\n"
+                                + "Any attempt to add more information would 
result into purging of the least recent messages."
+                                + "Use 0 to discard all the logs. default is 
-1 (to indicate infinite). ")
         int progresslog_maxCount() default -1;
     }
-
     /** Logger. */
     private final Logger logger = 
LoggerFactory.getLogger("org.apache.sling.event.impl.jobs");
 
@@ -114,17 +131,17 @@ public class JobManagerConfiguration {
     /** The path where all jobs are stored. */
     public static final String PROPERTY_REPOSITORY_PATH = "repository.path";
 
-    /**
-     * The background loader waits this time of seconds after startup before 
loading
-     * events from the repository. (in secs)
-     */
+    /** The background loader waits this time of seconds after startup before 
loading events from the repository. (in secs) */
     public static final String PROPERTY_BACKGROUND_LOAD_DELAY = "load.delay";
 
     /** Configuration property for the scheduled jobs path. */
     public static final String PROPERTY_SCHEDULED_JOBS_PATH = 
"job.scheduled.jobs.path";
 
-    static JobManagerConfiguration newForTest(ResourceResolverFactory 
resourceResolverFactory,
-            QueueConfigurationManager queueConfigurationManager, Map<String, 
Object> activateProps, Config config) {
+    static JobManagerConfiguration newForTest(
+            ResourceResolverFactory resourceResolverFactory,
+            QueueConfigurationManager queueConfigurationManager,
+            Map<String, Object> activateProps,
+            Config config) {
         final JobManagerConfiguration jobMgrConfig = new 
JobManagerConfiguration();
         jobMgrConfig.resourceResolverFactory = resourceResolverFactory;
         jobMgrConfig.queueConfigManager = queueConfigurationManager;
@@ -144,10 +161,7 @@ public class JobManagerConfiguration {
     /** The base path for assigned jobs to the current instance. */
     private String localJobsPath;
 
-    /**
-     * The base path for assigned jobs to the current instance - ending with a
-     * slash.
-     */
+    /** The base path for assigned jobs to the current instance - ending with 
a slash. */
     private String localJobsPathWithSlash;
 
     private String previousVersionAnonPath;
@@ -206,10 +220,13 @@ public class JobManagerConfiguration {
 
     /**
      * Handle binding of the job processing condition.
-     * 
      * @param condition The condition being bound
      */
-    @Reference(target = "(osgi.condition.id=true)", cardinality = 
ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, policyOption = 
ReferencePolicyOption.GREEDY)
+    @Reference(
+            target = "(osgi.condition.id=true)",
+            cardinality = ReferenceCardinality.OPTIONAL,
+            policy = ReferencePolicy.DYNAMIC,
+            policyOption = ReferencePolicyOption.GREEDY)
     protected void bindJobProcessingEnabledCondition(final Condition 
condition) {
         if (this.jobProcessingEnabledCondition != null) {
             logger.warn("Job processing readiness condition already set - 
ignoring new condition");
@@ -225,7 +242,6 @@ public class JobManagerConfiguration {
 
     /**
      * Handle unbinding of the job processing condition.
-     * 
      * @param condition The condition being unbound
      */
     protected void unbindJobProcessingEnabledCondition(final Condition 
condition) {
@@ -239,10 +255,9 @@ public class JobManagerConfiguration {
     }
 
     /**
-     * Check if job processing is enabled. This only affects whether jobs are
-     * processed/executed - jobs can still be assigned, stored, and managed 
through
-     * the API even when processing is disabled.
-     * 
+     * Check if job processing is enabled.
+     * This only affects whether jobs are processed/executed - jobs can still 
be
+     * assigned, stored, and managed through the API even when processing is 
disabled.
      * @return true if job processing is enabled, false otherwise
      */
     public boolean isJobProcessingEnabled() {
@@ -251,16 +266,15 @@ public class JobManagerConfiguration {
 
     /**
      * Activate this component.
-     * 
-     * @param props  Configuration properties
+     * @param props Configuration properties
      * @param config Configuration properties
      * @throws RuntimeException If the default paths can't be created
      */
     @Activate
     protected void activate(final Map<String, Object> props, final Config 
config) {
         this.update(props, config);
-        this.jobsBasePathWithSlash = 
PropertiesUtil.toString(props.get(PROPERTY_REPOSITORY_PATH),
-                DEFAULT_REPOSITORY_PATH) + '/';
+        this.jobsBasePathWithSlash =
+                PropertiesUtil.toString(props.get(PROPERTY_REPOSITORY_PATH), 
DEFAULT_REPOSITORY_PATH) + '/';
 
         // create initial resources
         this.assignedJobsPath = this.jobsBasePathWithSlash + "assigned";
@@ -275,27 +289,30 @@ public class JobManagerConfiguration {
         this.storedCancelledJobsPath = this.jobsBasePathWithSlash + 
"cancelled";
         this.storedSuccessfulJobsPath = this.jobsBasePathWithSlash + 
"finished";
 
-        this.scheduledJobsPath = 
PropertiesUtil.toString(props.get(PROPERTY_SCHEDULED_JOBS_PATH),
-                DEFAULT_SCHEDULED_JOBS_PATH);
+        this.scheduledJobsPath =
+                
PropertiesUtil.toString(props.get(PROPERTY_SCHEDULED_JOBS_PATH), 
DEFAULT_SCHEDULED_JOBS_PATH);
         this.scheduledJobsPathWithSlash = this.scheduledJobsPath + "/";
 
         this.historyCleanUpRemovedJobs = config.cleanup_period();
 
         // create initial resources
-        try (ResourceResolver resolver = this.createResourceResolver()) {
+        final ResourceResolver resolver = this.createResourceResolver();
+        try {
             ResourceHelper.getOrCreateBasePath(resolver, 
this.getLocalJobsPath());
             ResourceHelper.getOrCreateBasePath(resolver, 
this.getUnassignedJobsPath());
         } catch (final PersistenceException pe) {
             logger.error("Unable to create default paths: " + pe.getMessage(), 
pe);
             throw new RuntimeException(pe);
+        } finally {
+            resolver.close();
         }
         this.active.set(true);
 
         // SLING-5560 : use an InitDelayingTopologyEventListener
         if (this.startupDelay > 0) {
             logger.debug("activate: job manager will start in {} sec. ({})", 
this.startupDelay, config.startup_delay());
-            this.startupDelayListener = new 
InitDelayingTopologyEventListener(startupDelay,
-                    new TopologyEventListener() {
+            this.startupDelayListener =
+                    new InitDelayingTopologyEventListener(startupDelay, new 
TopologyEventListener() {
 
                         @Override
                         public void handleTopologyEvent(TopologyEvent event) {
@@ -303,7 +320,9 @@ public class JobManagerConfiguration {
                         }
                     });
         } else {
-            logger.debug("activate: job manager will start without delay. 
({}:{})", config.startup_delay(),
+            logger.debug(
+                    "activate: job manager will start without delay. ({}:{})",
+                    config.startup_delay(),
                     this.startupDelay);
         }
     }
@@ -314,8 +333,8 @@ public class JobManagerConfiguration {
     @Modified
     protected void update(final Map<String, Object> props, final Config 
config) {
         this.disabledDistribution = 
config.job_consumermanager_disableDistribution();
-        this.backgroundLoadDelay = 
PropertiesUtil.toLong(props.get(PROPERTY_BACKGROUND_LOAD_DELAY),
-                DEFAULT_BACKGROUND_LOAD_DELAY);
+        this.backgroundLoadDelay =
+                
PropertiesUtil.toLong(props.get(PROPERTY_BACKGROUND_LOAD_DELAY), 
DEFAULT_BACKGROUND_LOAD_DELAY);
         // SLING-5560: note that currently you can't change the startupDelay 
to have
         // an immediate effect - it will only have an effect on next 
activation.
         // (as 'startup delay runnable' is already scheduled in activate)
@@ -344,10 +363,8 @@ public class JobManagerConfiguration {
     public int getHistoryCleanUpRemovedJobs() {
         return this.historyCleanUpRemovedJobs;
     }
-
     /**
      * Is this component still active?
-     * 
      * @return Active?
      */
     public boolean isActive() {
@@ -355,13 +372,12 @@ public class JobManagerConfiguration {
     }
 
     /**
-     * Create a new resource resolver for reading and writing the resource 
tree. The
-     * resolver needs to be closed by the client. This ResourceResolver 
provides
-     * read and write access to all resources relevant for the event and job
-     * handling.
+     * Create a new resource resolver for reading and writing the resource 
tree.
+     * The resolver needs to be closed by the client.
+     * This ResourceResolver provides read and write access to all resources 
relevant for the event
+     * and job handling.
      *
-     * @return A resource resolver or {@code null} if the component is already
-     *         deactivated.
+     * @return A resource resolver or {@code null} if the component is already 
deactivated.
      * @throws RuntimeException if the resolver can't be created.
      */
     public ResourceResolver createResourceResolver() {
@@ -380,7 +396,6 @@ public class JobManagerConfiguration {
 
     /**
      * Get the current topology capabilities.
-     * 
      * @return The capabilities or {@code null}
      */
     public TopologyCapabilities getTopologyCapabilities() {
@@ -393,7 +408,6 @@ public class JobManagerConfiguration {
 
     /**
      * Get main logger.
-     * 
      * @return The main logger.
      */
     public Logger getMainLogger() {
@@ -402,7 +416,6 @@ public class JobManagerConfiguration {
 
     /**
      * Get the resource path for all assigned jobs.
-     * 
      * @return The path - does not end with a slash.
      */
     public String getAssginedJobsPath() {
@@ -411,7 +424,6 @@ public class JobManagerConfiguration {
 
     /**
      * Get the resource path for all unassigned jobs.
-     * 
      * @return The path - does not end with a slash.
      */
     public String getUnassignedJobsPath() {
@@ -420,7 +432,6 @@ public class JobManagerConfiguration {
 
     /**
      * Get the resource path for all jobs assigned to the current instance
-     * 
      * @return The path - does not end with a slash
      */
     public String getLocalJobsPath() {
@@ -433,8 +444,8 @@ public class JobManagerConfiguration {
     /**
      * Create a unique job path (folder and name) for the job.
      */
-    public String getUniquePath(final String targetId, final String topic, 
final String jobId,
-            final Map<String, Object> jobProperties) {
+    public String getUniquePath(
+            final String targetId, final String topic, final String jobId, 
final Map<String, Object> jobProperties) {
         final String topicName = topic.replace('/', '.');
         final StringBuilder sb = new StringBuilder();
         if (targetId != null) {
@@ -513,9 +524,8 @@ public class JobManagerConfiguration {
 
     /**
      * Get the storage path for finished jobs.
-     * 
-     * @param topic     Topic of the finished job
-     * @param jobId     The job id of the finished job.
+     * @param topic Topic of the finished job
+     * @param jobId The job id of the finished job.
      * @param isSuccess Whether processing was successful or not
      * @return The complete storage path
      */
@@ -544,9 +554,7 @@ public class JobManagerConfiguration {
 
     /**
      * Get the scheduled jobs path
-     * 
-     * @param slash If {@code false} the path is returned, if {@code true} the 
path
-     *              appended with a slash is returned.
+     * @param slash If {@code false} the path is returned, if {@code true} the 
path appended with a slash is returned.
      * @return The path for the scheduled jobs
      */
     public String getScheduledJobsPath(final boolean slash) {
@@ -573,9 +581,8 @@ public class JobManagerConfiguration {
 
     /**
      * Start processing
-     * 
      * @param eventType The event type
-     * @param newCaps   The new capabilities
+     * @param newCaps The new capabilities
      */
     private void startProcessing(final Type eventType, final 
TopologyCapabilities newCaps) {
         logger.debug("Starting job processing...");
@@ -598,20 +605,22 @@ public class JobManagerConfiguration {
             // and run checker again in some seconds (if leader)
             // notify listeners afterwards
             final Timer timer = new Timer();
-            timer.schedule(new TimerTask() {
-
-                @Override
-                public void run() {
-                    if (newCaps == topologyCapabilities && newCaps.isActive()) 
{
-                        // start listeners
-                        notifyListeners();
-                        if (newCaps.isLeader() && newCaps.isActive()) {
-                            final CheckTopologyTask mt = new 
CheckTopologyTask(JobManagerConfiguration.this);
-                            mt.fullRun();
+            timer.schedule(
+                    new TimerTask() {
+
+                        @Override
+                        public void run() {
+                            if (newCaps == topologyCapabilities && 
newCaps.isActive()) {
+                                // start listeners
+                                notifyListeners();
+                                if (newCaps.isLeader() && newCaps.isActive()) {
+                                    final CheckTopologyTask mt = new 
CheckTopologyTask(JobManagerConfiguration.this);
+                                    mt.fullRun();
+                                }
+                            }
                         }
-                    }
-                }
-            }, this.backgroundLoadDelay * 1000);
+                    },
+                    this.backgroundLoadDelay * 1000);
         }
         logger.debug("Job processing started");
     }
@@ -629,9 +638,8 @@ public class JobManagerConfiguration {
     }
 
     /**
-     * This method is invoked asynchronously from the TopologyHandler. 
Therefore
-     * this method can't be invoked concurrently
-     * 
+     * This method is invoked asynchronously from the TopologyHandler.
+     * Therefore this method can't be invoked concurrently
      * @see 
org.apache.sling.discovery.TopologyEventListener#handleTopologyEvent(org.apache.sling.discovery.TopologyEvent)
      */
     public void handleTopologyEvent(TopologyEvent event) {
@@ -663,7 +671,8 @@ public class JobManagerConfiguration {
         if (eventType == Type.TOPOLOGY_CHANGING) {
             this.stopProcessing();
 
-        } else if (eventType == Type.TOPOLOGY_INIT || event.getType() == 
Type.TOPOLOGY_CHANGED
+        } else if (eventType == Type.TOPOLOGY_INIT
+                || event.getType() == Type.TOPOLOGY_CHANGED
                 || event.getType() == Type.PROPERTIES_CHANGED) {
 
             if (stopProcessing) {
@@ -676,7 +685,6 @@ public class JobManagerConfiguration {
 
     /**
      * Add a topology aware listener
-     * 
      * @param service Listener to notify about changes.
      */
     public void addListener(final ConfigurationChangeListener service) {
@@ -688,7 +696,6 @@ public class JobManagerConfiguration {
 
     /**
      * Remove a topology aware listener
-     * 
      * @param service Listener to notify about changes.
      */
     public void removeListener(final ConfigurationChangeListener service) {
@@ -728,7 +735,6 @@ public class JobManagerConfiguration {
 
     /**
      * The audit logger is logging actions for auditing.
-     * 
      * @return The logger
      */
     public Logger getAuditLogger() {

Reply via email to