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:30 UTC

[sling-org-apache-sling-installer-factory-packages] branch feature/SLING-6258_package-listener created (now ad164c4)

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

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


      at ad164c4  SLING-6258 trigger new cycle in case of any package installation

This branch includes the following new commits:

     new ad164c4  SLING-6258 trigger new cycle in case of any package installation

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by kw...@apache.org.
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;
+        }
+    }
 }