From 7bc1913f56e95425ee45373b5a2eab4bc114263a Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 27 Jan 2020 10:26:13 +0100 Subject: [PATCH] Improve logical backup. --- org.argeo.maintenance/bnd.bnd | 1 + .../maintenance/backup/LogicalBackup.java | 34 ++++++++++++++----- .../argeo/maintenance/internal/Activator.java | 14 +++----- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/org.argeo.maintenance/bnd.bnd b/org.argeo.maintenance/bnd.bnd index e69de29bb..f0c70aa45 100644 --- a/org.argeo.maintenance/bnd.bnd +++ b/org.argeo.maintenance/bnd.bnd @@ -0,0 +1 @@ +Bundle-Activator: org.argeo.maintenance.internal.Activator diff --git a/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalBackup.java b/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalBackup.java index d1b31b3ec..6d1016a06 100644 --- a/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalBackup.java +++ b/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalBackup.java @@ -37,7 +37,13 @@ import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.xml.sax.SAXException; -public class LogicalBackup { +/** + * Performs a backup of the data based only on programmatic interfaces. Useful + * for migration or live backup. Physical backups of the underlying file + * systems, databases, LDAP servers, etc. should be performed for disaster + * recovery. + */ +public class LogicalBackup implements Runnable { private final static Log log = LogFactory.getLog(LogicalBackup.class); public final static String WORKSPACES_BASE = "workspaces/"; @@ -48,13 +54,6 @@ public class LogicalBackup { private final ZipOutputStream zout; private final Path basePath; - public LogicalBackup(BundleContext bundleContext, Repository repository, ZipOutputStream zout) { - this.repository = repository; - this.zout = zout; - this.basePath = null; - this.bundleContext = bundleContext; - } - public LogicalBackup(BundleContext bundleContext, Repository repository, Path basePath) { this.repository = repository; this.zout = null; @@ -62,6 +61,25 @@ public class LogicalBackup { this.bundleContext = bundleContext; } +// public LogicalBackup(BundleContext bundleContext, Repository repository, ZipOutputStream zout) { +// this.repository = repository; +// this.zout = zout; +// this.basePath = null; +// this.bundleContext = bundleContext; +//} + + @Override + public void run() { + try { + log.info("Start logical backup to " + basePath); + perform(); + } catch (Exception e) { + e.printStackTrace(); + throw new IllegalStateException("Logical backup failed", e); + } + + } + public void perform() throws RepositoryException, IOException { for (Bundle bundle : bundleContext.getBundles()) { String relativePath = OSGI_BASE + "boot/" + bundle.getSymbolicName() + ".jar"; diff --git a/org.argeo.maintenance/src/org/argeo/maintenance/internal/Activator.java b/org.argeo.maintenance/src/org/argeo/maintenance/internal/Activator.java index 92534b250..ef40ab3a3 100644 --- a/org.argeo.maintenance/src/org/argeo/maintenance/internal/Activator.java +++ b/org.argeo.maintenance/src/org/argeo/maintenance/internal/Activator.java @@ -13,15 +13,11 @@ public class Activator implements BundleActivator { @Override public void start(BundleContext context) throws Exception { - try { - Repository repository = context.getService(context.getServiceReference(Repository.class)); - Path basePath = Paths.get(System.getProperty("user.dir"), "backup"); - LogicalBackup backup = new LogicalBackup(context, repository, basePath); - backup.perform(); - } catch (Exception e) { - e.printStackTrace(); - } - + // Start backup + Repository repository = context.getService(context.getServiceReference(Repository.class)); + Path basePath = Paths.get(System.getProperty("user.dir"), "backup"); + LogicalBackup backup = new LogicalBackup(context, repository, basePath); + backup.run(); } @Override -- 2.30.2