|
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; |
|
|
import lombok.Getter; |
|
|
import lombok.Getter; |
|
|
import lombok.NoArgsConstructor; |
|
|
import lombok.NoArgsConstructor; |
|
|
import lombok.Setter; |
|
|
import lombok.Setter; |
|
|
|
|
|
import org.cobbzilla.util.collection.SingletonSet; |
|
|
import org.cobbzilla.wizard.model.shard.ShardMap; |
|
|
import org.cobbzilla.wizard.model.shard.ShardMap; |
|
|
import org.cobbzilla.wizard.model.shard.Shardable; |
|
|
import org.cobbzilla.wizard.model.shard.Shardable; |
|
|
|
|
|
|
|
@@ -11,12 +12,10 @@ import java.sql.Connection; |
|
|
import java.sql.DriverManager; |
|
|
import java.sql.DriverManager; |
|
|
import java.sql.SQLException; |
|
|
import java.sql.SQLException; |
|
|
import java.util.ArrayList; |
|
|
import java.util.ArrayList; |
|
|
import java.util.HashSet; |
|
|
|
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
import java.util.Set; |
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
import static org.cobbzilla.util.daemon.ZillaRuntime.die; |
|
|
import static org.cobbzilla.util.daemon.ZillaRuntime.die; |
|
|
import static org.cobbzilla.util.daemon.ZillaRuntime.empty; |
|
|
|
|
|
import static org.cobbzilla.util.reflect.ReflectionUtil.copy; |
|
|
import static org.cobbzilla.util.reflect.ReflectionUtil.copy; |
|
|
|
|
|
|
|
|
@NoArgsConstructor |
|
|
@NoArgsConstructor |
|
@@ -24,23 +23,23 @@ public class DatabaseConfiguration { |
|
|
|
|
|
|
|
|
public DatabaseConfiguration(DatabaseConfiguration other) { copy(this, other); } |
|
|
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<Runnable> postDataSourceSetupHandlers = new ArrayList<>(); |
|
|
|
|
|
|
|
|
protected final List<Runnable> postDataSourceSetupHandlers = new ArrayList<>(); |
|
|
public void addPostDataSourceSetupHandler (Runnable handler) { postDataSourceSetupHandlers.add(handler); } |
|
|
public void addPostDataSourceSetupHandler (Runnable handler) { postDataSourceSetupHandlers.add(handler); } |
|
|
public void runPostDataSourceSetupHandlers () { |
|
|
public void runPostDataSourceSetupHandlers () { |
|
|
for (Runnable r : postDataSourceSetupHandlers) r.run(); |
|
|
for (Runnable r : postDataSourceSetupHandlers) r.run(); |
|
@@ -52,53 +51,17 @@ public class DatabaseConfiguration { |
|
|
return DriverManager.getConnection(url, user, password); |
|
|
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<String> shardSetNames = initShardSetNames(); |
|
|
@Getter(lazy=true) private final Set<String> shardSetNames = initShardSetNames(); |
|
|
|
|
|
|
|
|
protected Set<String> initShardSetNames() { |
|
|
|
|
|
final Set<String> 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<String> 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 <E extends Shardable> String getShardSetName(Class<E> entityClass) { |
|
|
|
|
|
if (empty(shard)) return null; |
|
|
|
|
|
for (ShardSetConfiguration config : shard) { |
|
|
|
|
|
if (config.getEntity().equals(entityClass.getName())) return config.getName(); |
|
|
|
|
|
} |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public <E extends Shardable> String getShardSetName(Class<E> entityClass) { return DEFAULT_SHARD; } |
|
|
|
|
|
|
|
|
public void setDatabaseName(String dbName) { |
|
|
public void setDatabaseName(String dbName) { |
|
|
final String url = getUrl(); |
|
|
final String url = getUrl(); |
|
|