You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2019/09/04 11:42:31 UTC

[sling-org-apache-sling-installer-factory-packages] 01/01: SLING-6258 trigger new cycle in case of any package installation

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

kwin pushed a commit to branch feature/SLING-6258_package-listener
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-packages.git

commit ad164c4a6cac067e7f0157c1bb3303459514ead6
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Wed Sep 4 13:42:16 2019 +0200

    SLING-6258 trigger new cycle in case of any package installation
---
 pom.xml                                            |  2 +-
 .../factory/packages/impl/PackageTransformer.java  | 40 +++++++++++++---------
 2 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2f1486d..3aadefc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>org.apache.jackrabbit.vault</artifactId>
-            <version>3.1.40</version>
+            <version>3.2.8</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
diff --git a/src/main/java/org/apache/sling/installer/factory/packages/impl/PackageTransformer.java b/src/main/java/org/apache/sling/installer/factory/packages/impl/PackageTransformer.java
index 8fe3481..899e36f 100644
--- a/src/main/java/org/apache/sling/installer/factory/packages/impl/PackageTransformer.java
+++ b/src/main/java/org/apache/sling/installer/factory/packages/impl/PackageTransformer.java
@@ -40,6 +40,8 @@ import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
 import org.apache.jackrabbit.vault.packaging.PackageException;
 import org.apache.jackrabbit.vault.packaging.PackageId;
 import org.apache.jackrabbit.vault.packaging.Packaging;
+import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
+import org.apache.jackrabbit.vault.packaging.events.PackageEventListener;
 import org.apache.sling.installer.api.InstallableResource;
 import org.apache.sling.installer.api.tasks.ChangeStateTask;
 import org.apache.sling.installer.api.tasks.InstallTask;
@@ -67,9 +69,9 @@ import org.slf4j.LoggerFactory;
  * <li>and creates tasks for installing / removing of content packages
  * </ul>
 */
-@Component(service = { ResourceTransformer.class, InstallTaskFactory.class })
+@Component(service = { ResourceTransformer.class, InstallTaskFactory.class, PackageEventListener.class })
 @Designate(ocd=PackageTransformerConfiguration.class)
-public class PackageTransformer implements ResourceTransformer, InstallTaskFactory {
+public class PackageTransformer implements ResourceTransformer, InstallTaskFactory, PackageEventListener {
 
     /** The attribute holding the package id. */
     private static final String ATTR_PCK_ID = "package-id";
@@ -289,8 +291,7 @@ public class PackageTransformer implements ResourceTransformer, InstallTaskFacto
                 throws RepositoryException, PackageException, IOException {
 
             // open package
-            JcrPackage pkg = pkgMgr.open(pkgId);
-            try {
+            try (JcrPackage pkg = pkgMgr.open(pkgId))  {
                 if (pkg == null) {
                     String message = MessageFormat.format("Error during installation of {0}: Package {1} missing.", resource, pkgId);
                     logger.error(message);
@@ -330,13 +331,7 @@ public class PackageTransformer implements ResourceTransformer, InstallTaskFacto
 
                 setFinishedState(ResourceState.INSTALLED);
 
-                // notify retry handler to install dependent packages.
-                retryHandler.scheduleRetry();
-
-            } finally {
-                if (pkg != null) {
-                    pkg.close();
-                }
+                // notify retry handler to install dependent packages happens in the onPackageEvent
             }
         }
 
@@ -397,17 +392,13 @@ public class PackageTransformer implements ResourceTransformer, InstallTaskFacto
         @Override
         protected void doExecute(InstallationContext ctx, JcrPackageManager pkgMgr, TaskResource resource)
                 throws RepositoryException, PackageException, IOException {
-            JcrPackage pkg = pkgMgr.open(this.pkgId);
-            try {
+            
+            try (JcrPackage pkg = pkgMgr.open(this.pkgId)) {
                 if (pkg != null) {
                     final ImportOptions opts = new ImportOptions();
                     opts.setDependencyHandling(configuration.dependencyHandling());
                     pkg.uninstall(opts);
                 }
-            } finally {
-                if (pkg != null) {
-                    pkg.close();
-                }
             }
             ctx.log("Uninstalled content package {}", getResource());
             setFinishedState(ResourceState.UNINSTALLED);
@@ -478,4 +469,19 @@ public class PackageTransformer implements ResourceTransformer, InstallTaskFacto
             }
         }
     }
+
+    @Override
+    public void onPackageEvent(PackageEvent event) {
+        switch (event.getType()) {
+            case INSTALL:
+            case EXTRACT:
+                // this might even be triggered by this transformer itself
+                logger.debug("Package installation of package {} captured, triggering new OSGI installer cycle.", event.getId());
+                // notify retry handler to install dependent packages.
+                retryHandler.scheduleRetry();
+                break;
+            default:
+                break;
+        }
+    }
 }