X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2FAcornDriver.java;h=536c35c74552b345d73b38a3c68e066212bd9af8;hp=99ec490621edb30449380b7bf42e909fe90da7a9;hb=d9a9d77c7024260e3e3b3a8558ddc84b2a8b99b3;hpb=0144ba232323a0e4f7ec8fe0681a150faafd7caf diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java index 99ec49062..536c35c74 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java @@ -2,8 +2,11 @@ package org.simantics.acorn; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; +import org.simantics.db.Database; import org.simantics.db.DatabaseUserAgent; import org.simantics.db.Driver; import org.simantics.db.ServerI; @@ -16,6 +19,9 @@ public class AcornDriver implements Driver { public static final String AcornDriverName = "acorn"; + private Map servers = new HashMap<>(); + private Map managements = new HashMap<>(); + @Override public String getName() { return AcornDriverName; @@ -23,14 +29,12 @@ public class AcornDriver implements Driver { @Override public DatabaseUserAgent getDatabaseUserAgent(String address) throws DatabaseException { - Path dbFolder = Paths.get(address); - return AcornDatabaseManager.getDatabase(dbFolder).getUserAgent(); + return AcornDatabaseManager.getDatabase(Paths.get(address)).getUserAgent(); } @Override public void setDatabaseUserAgent(String address, DatabaseUserAgent dbUserAgent) throws DatabaseException { - Path dbFolder = Paths.get(address); - AcornDatabaseManager.getDatabase(dbFolder).setUserAgent(dbUserAgent); + AcornDatabaseManager.getDatabase(Paths.get(address)).setUserAgent(dbUserAgent); } @Override @@ -55,7 +59,7 @@ public class AcornDriver implements Driver { } }, null); if (!properties.containsKey("clientId")) - properties.put("clientId", dbFolder.toFile().getAbsolutePath()); + properties.put("clientId", dbFolder.toAbsolutePath().toString()); session.registerService(Properties.class, properties); Session s = session.peekService(Session.class); if (null == s) @@ -65,36 +69,47 @@ public class AcornDriver implements Driver { @Override public ServerI getServer(String address, Properties properties) throws DatabaseException { - return new AcornServerI(address); + ServerI server = servers.get(address); + if (server == null) { + server = new AcornServerI(AcornDatabaseManager.getDatabase(Paths.get(address)), address); + servers.put(address, server); + } + return server; } @Override public Management getManagement(String address, Properties properties) throws DatabaseException { - Path dbFolder = Paths.get(address); - return new AcornManagement(dbFolder, properties); + Management mgmt = managements.get(address); + if (mgmt == null) { + mgmt = new AcornManagement(AcornDatabaseManager.getDatabase(Paths.get(address)), properties); + managements.put(address, mgmt); + } + return mgmt; } private static class AcornServerI implements ServerI { + private Database database; private String address; - public AcornServerI(String address) { + public AcornServerI(Database db, String address) { + this.database = db; this.address = address; } @Override public void stop() throws DatabaseException { - AcornDatabaseManager.getDatabase(Paths.get(address)).tryToStop(); + database.tryToStop(); } @Override public void start() throws DatabaseException { - AcornDatabaseManager.getDatabase(Paths.get(address)).start(); + database.start(); } @Override public boolean isActive() throws DatabaseException { - return AcornDatabaseManager.getDatabase(Paths.get(address)).isRunning(); + return database.isRunning(); } @Override