You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2018/06/21 00:50:49 UTC
svn commit: r1833967 - in /jackrabbit/commons/filevault/trunk/vault-core/src:
main/java/org/apache/jackrabbit/vault/packaging/
main/java/org/apache/jackrabbit/vault/packaging/impl/
test/java/org/apache/jackrabbit/vault/packaging/integration/ test/resou...
Author: tripod
Date: Thu Jun 21 00:50:49 2018
New Revision: 1833967
URL: http://svn.apache.org/viewvc?rev=1833967&view=rev
Log:
JCRVLT-289 InstallHooks: Propagate exceptions also for phase INSTALL (closes #26)
Added:
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/InstallHook.java Thu Jun 21 00:50:49 2018
@@ -31,9 +31,9 @@ import org.osgi.annotation.versioning.Co
* and are executed in alphabetical sequence for each installation phase.
* A hook can throw a {@link PackageException} to abort the current phase,
* but this has currently only an effect in the
- * {@link InstallContext.Phase#PREPARE} phase. If a hook fails, the current
- * phase is aborted and all hooks (also the failing one) are called again with
- * the respective "fail" phase.
+ * {@link InstallContext.Phase#PREPARE} and {@link InstallContext.Phase#INSTALLED}
+ * phase. If a hook fails, the current phase is aborted and all hooks
+ * (also the failing one) are called again with the respective "fail" phase.
*/
@ConsumerType
public interface InstallHook {
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java Thu Jun 21 00:50:49 2018
@@ -34,6 +34,7 @@ import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.packaging.InstallContext;
+import org.apache.jackrabbit.vault.packaging.InstallContext.Phase;
import org.apache.jackrabbit.vault.packaging.InstallHook;
import org.apache.jackrabbit.vault.packaging.InstallHookProcessor;
import org.apache.jackrabbit.vault.packaging.PackageException;
@@ -147,9 +148,9 @@ public class InstallHookProcessorImpl im
try {
hook.getHook().execute(context);
} catch (PackageException e) {
- // abort processing only for prepare phase
- if (context.getPhase() == InstallContext.Phase.PREPARE) {
- log.warn("Hook " + hook.name +" threw package exception. Prepare aborted.", e);
+ // abort processing only for prepare and installed phase
+ if (context.getPhase() == InstallContext.Phase.PREPARE || context.getPhase() == InstallContext.Phase.INSTALLED) {
+ log.warn("Hook " + hook.name +" threw package exception. {} aborted.", context.getPhase(), e);
return false;
}
log.warn("Hook " + hook.name +" threw package exception. Ignored", e);
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/ZipVaultPackage.java Thu Jun 21 00:50:49 2018
@@ -227,7 +227,7 @@ public class ZipVaultPackage extends Pac
if (!hooks.execute(ctx)) {
ctx.setPhase(InstallContext.Phase.PREPARE_FAILED);
hooks.execute(ctx);
- throw new PackageException("Import aborted during prepare phase.");
+ throw new PackageException("Error while executing an install hook during prepare phase.");
}
try {
importer.run(archive, ctx.getSession(), ctx.getImportRootPath());
@@ -238,7 +238,11 @@ public class ZipVaultPackage extends Pac
throw new PackageException(e);
}
ctx.setPhase(InstallContext.Phase.INSTALLED);
- hooks.execute(ctx);
+ if (!hooks.execute(ctx)) {
+ ctx.setPhase(InstallContext.Phase.INSTALL_FAILED);
+ hooks.execute(ctx);
+ throw new PackageException("Error while executing an install hook during installed phase.");
+ }
if (importer.hasErrors() && ctx.getOptions().isStrict()) {
ctx.setPhase(InstallContext.Phase.INSTALL_FAILED);
hooks.execute(ctx);
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ExternalTestHookFailingInPhaseInstalled.java Thu Jun 21 00:50:49 2018
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.vault.packaging.integration;
+
+import org.apache.jackrabbit.vault.packaging.InstallContext;
+import org.apache.jackrabbit.vault.packaging.InstallContext.Phase;
+import org.apache.jackrabbit.vault.packaging.InstallHook;
+import org.apache.jackrabbit.vault.packaging.PackageException;
+
+/**
+ * Test hook which is used in an IT
+ */
+public class ExternalTestHookFailingInPhaseInstalled implements InstallHook {
+
+ public void execute(InstallContext context) throws PackageException {
+ if (context.getPhase() == Phase.INSTALLED) {
+ throw new PackageException("Some explicitly triggered exception!");
+ }
+ }
+}
\ No newline at end of file
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java?rev=1833967&r1=1833966&r2=1833967&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageInstall.java Thu Jun 21 00:50:49 2018
@@ -276,6 +276,21 @@ public class TestPackageInstall extends
}
/**
+ * Installs a package with an external hook which throws an exception in the INSTALLED phase
+ */
+ @Test
+ public void testExternalHookFailsInInstalledPhase() throws RepositoryException, IOException, PackageException {
+ try {
+ extractVaultPackage("testpackages/external_hook_failing_in_installed_phase.zip");
+ fail("Package install should fail due to installhook exception.");
+ } catch (PackageException e) {
+ // ok
+ }
+ // although there was some exception, this has only been triggered after the package has been extracted!
+ assertNodeExists("/testroot");
+ }
+
+ /**
* Installs a package with no properties
*/
@Test
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/filter.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspaceFilter version="1.0">
+ <filter root="/testroot" mode="merge"/>
+</workspaceFilter>
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/nodetypes.cnd Thu Jun 21 00:50:49 2018
@@ -0,0 +1,8 @@
+<'sling'='http://sling.apache.org/jcr/sling/1.0'>
+<'nt'='http://www.jcp.org/jcr/nt/1.0'>
+
+[sling:Folder] > nt:folder
+ - * (undefined)
+ - * (undefined) multiple
+ + * (nt:base) = sling:Folder version
+
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/META-INF/vault/properties.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<comment>FileVault Package Properties</comment>
+<entry key="createdBy">admin</entry>
+<entry key="name">tmp</entry>
+<entry key="lastModified">2011-06-07T14:31:49.179-07:00</entry>
+<entry key="lastModifiedBy">admin</entry>
+<entry key="created">2011-06-07T14:31:49.418-07:00</entry>
+<entry key="buildCount">1</entry>
+<entry key="version"/>
+<entry key="dependencies"/>
+<entry key="packageFormatVersion">2</entry>
+<entry key="description"/>
+<entry key="group">my_packages</entry>
+<entry key="lastWrapped">2011-06-07T14:31:49.179-07:00</entry>
+<entry key="lastWrappedBy">admin</entry>
+<entry key="path">/etc/packages/my_packages/tmp</entry>
+<entry key="installhook.test1.class">org.apache.jackrabbit.vault.packaging.integration.ExternalTestHookFailingInPhaseInstalled</entry>
+</properties>
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/.content.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+ jcr:mixinTypes="[rep:AccessControllable]"
+ jcr:primaryType="rep:root"
+ sling:resourceType="sling:redirect"
+ sling:target="/index.html">
+ <rep:policy/>
+ <jcr:system/>
+ <var/>
+ <libs/>
+ <etc/>
+ <apps/>
+ <content/>
+ <tmp/>
+ <home/>
+ <testroot/>
+</jcr:root>
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml?rev=1833967&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/external_hook_failing_in_installed_phase.zip/jcr_root/testroot/.content.xml Thu Jun 21 00:50:49 2018
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="nt:folder">
+</jcr:root>