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;
+ }
+ }
}