diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseConfiguration.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseConfiguration.java index 4d0f2da..0514da0 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseConfiguration.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseConfiguration.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.cobbzilla.util.collection.SingletonSet; import org.cobbzilla.wizard.model.shard.ShardMap; import org.cobbzilla.wizard.model.shard.Shardable; @@ -11,12 +12,10 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Set; import static org.cobbzilla.util.daemon.ZillaRuntime.die; -import static org.cobbzilla.util.daemon.ZillaRuntime.empty; import static org.cobbzilla.util.reflect.ReflectionUtil.copy; @NoArgsConstructor @@ -24,23 +23,23 @@ public class DatabaseConfiguration { public DatabaseConfiguration(DatabaseConfiguration other) { copy(this, other); } - @Getter @Setter private String driver; - @Getter @Setter private String url; - @Getter @Setter private String user; - @JsonIgnore @Getter @Setter private String password; + @Getter @Setter protected String driver; + @Getter @Setter protected String url; + @Getter @Setter protected String user; + @JsonIgnore @Getter @Setter protected String password; - @Getter @Setter private DatabaseConnectionPoolConfiguration pool = new DatabaseConnectionPoolConfiguration(); + @Getter @Setter protected DatabaseConnectionPoolConfiguration pool = new DatabaseConnectionPoolConfiguration(); - @Getter @Setter private boolean encryptionEnabled = false; - @JsonIgnore @Getter @Setter private String encryptionKey; - @Getter @Setter private int encryptorPoolSize = 5; + @Getter @Setter protected boolean encryptionEnabled = false; + @JsonIgnore @Getter @Setter protected String encryptionKey; + @Getter @Setter protected int encryptorPoolSize = 5; - @Getter @Setter private HibernateConfiguration hibernate; + @Getter @Setter protected HibernateConfiguration hibernate; - @Getter @Setter private boolean migrationEnabled = true; - @Getter @Setter private boolean migrationBaselineOnly = false; + @Getter @Setter protected boolean migrationEnabled = true; + @Getter @Setter protected boolean migrationBaselineOnly = false; - private final List postDataSourceSetupHandlers = new ArrayList<>(); + protected final List postDataSourceSetupHandlers = new ArrayList<>(); public void addPostDataSourceSetupHandler (Runnable handler) { postDataSourceSetupHandlers.add(handler); } public void runPostDataSourceSetupHandlers () { for (Runnable r : postDataSourceSetupHandlers) r.run(); @@ -52,53 +51,17 @@ public class DatabaseConfiguration { return DriverManager.getConnection(url, user, password); } - @Getter @Setter private volatile ShardSetConfiguration[] shard; + public DatabaseConfiguration getShardDatabaseConfiguration(ShardMap map) { return this; } - public ShardSetConfiguration getShard (String shardSet) { - if (shard != null) { - for (ShardSetConfiguration c : shard) { - if (c.getName().equals(shardSet)) return c; - } - } - return null; - } - - public DatabaseConfiguration getShardDatabaseConfiguration(ShardMap map) { - final DatabaseConfiguration config = new DatabaseConfiguration(); - config.setDriver(driver); - config.setUrl(map.getUrl()); - config.setUser(user); - config.setPassword(password); - config.setEncryptionEnabled(encryptionEnabled); - config.setEncryptionKey(encryptionKey); - config.setEncryptorPoolSize(encryptorPoolSize); - config.setHibernate(new HibernateConfiguration(hibernate)); - config.getHibernate().setValidationMode("validate"); - return config; - } + public boolean hasShards() { return false; } @Getter(lazy=true) private final Set shardSetNames = initShardSetNames(); - protected Set initShardSetNames() { - final Set names = new HashSet<>(); - if (shard != null) for (ShardSetConfiguration config : shard) names.add(config.getName()); - return names; - } + public static final String DEFAULT_SHARD = "getShardSetName:default"; - public boolean hasShards() { return !getShardSetNames().isEmpty(); } + protected Set initShardSetNames() { return new SingletonSet<>(DEFAULT_SHARD); } - public int getLogicalShardCount(String shardSet) { - for (ShardSetConfiguration config : shard) if (config.getName().equals(shardSet)) return config.getLogicalShards(); - return ShardSetConfiguration.DEFAULT_LOGICAL_SHARDS; - } - - public String getShardSetName(Class entityClass) { - if (empty(shard)) return null; - for (ShardSetConfiguration config : shard) { - if (config.getEntity().equals(entityClass.getName())) return config.getName(); - } - return null; - } + public String getShardSetName(Class entityClass) { return DEFAULT_SHARD; } public void setDatabaseName(String dbName) { final String url = getUrl(); diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseShardConfiguration.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseShardConfiguration.java new file mode 100644 index 0000000..416ab00 --- /dev/null +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseShardConfiguration.java @@ -0,0 +1,62 @@ +package org.cobbzilla.wizard.server.config; + +import lombok.Getter; +import lombok.Setter; +import org.cobbzilla.wizard.model.shard.ShardMap; +import org.cobbzilla.wizard.model.shard.Shardable; + +import java.util.HashSet; +import java.util.Set; + +import static org.cobbzilla.util.daemon.ZillaRuntime.empty; + +public class DatabaseShardConfiguration extends DatabaseConfiguration { + + @Getter @Setter private volatile ShardSetConfiguration[] shard; + + public ShardSetConfiguration getShard (String shardSet) { + if (shard != null) { + for (ShardSetConfiguration c : shard) { + if (c.getName().equals(shardSet)) return c; + } + } + return null; + } + + @Override public DatabaseConfiguration getShardDatabaseConfiguration(ShardMap map) { + final DatabaseConfiguration config = new DatabaseConfiguration(); + config.setDriver(driver); + config.setUrl(map.getUrl()); + config.setUser(user); + config.setPassword(password); + config.setEncryptionEnabled(encryptionEnabled); + config.setEncryptionKey(encryptionKey); + config.setEncryptorPoolSize(encryptorPoolSize); + config.setHibernate(new HibernateConfiguration(hibernate)); + config.getHibernate().setValidationMode("validate"); + return config; + } + + @Getter(lazy=true) private final Set shardSetNames = initShardSetNames(); + + protected Set initShardSetNames() { + final Set names = new HashSet<>(); + if (shard != null) for (ShardSetConfiguration config : shard) names.add(config.getName()); + return names; + } + + @Override public boolean hasShards() { return !getShardSetNames().isEmpty(); } + + public int getLogicalShardCount(String shardSet) { + for (ShardSetConfiguration config : shard) if (config.getName().equals(shardSet)) return config.getLogicalShards(); + return ShardSetConfiguration.DEFAULT_LOGICAL_SHARDS; + } + + @Override public String getShardSetName(Class entityClass) { + if (empty(shard)) return null; + for (ShardSetConfiguration config : shard) { + if (config.getEntity().equals(entityClass.getName())) return config.getName(); + } + return null; + } +}