package org.hivedb.hibernate.simplified.session.configuration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.Configuration; import org.hibernate.shards.cfg.ConfigurationToShardConfigurationAdapter; import org.hibernate.shards.cfg.ShardConfiguration; import org.hivedb.meta.Node; import org.hivedb.util.database.DialectTools; import org.hivedb.util.database.DriverLoader; import java.util.Map; import java.util.Properties; public class NodeConfiguration extends Configuration { private final static Log log = LogFactory.getLog(NodeConfiguration.class); private Node node; private Properties overrides = new Properties(); public NodeConfiguration(Node node){ super(); this.node = node; } public NodeConfiguration(Node node, Properties overrides) { this.node = node; this.overrides = overrides; } @Override public Configuration configure() { super.configure(); setProperty("hibernate.session_factory_name", "factory:"+node.getName()); setProperty("hibernate.dialect", DialectTools.getHibernateDialect(node.getDialect()).getName()); setProperty("hibernate.connection.driver_class", DriverLoader.getDriverClass(node.getDialect())); setProperty("hibernate.connection.url", node.getUri()); setProperty("hibernate.connection.shard_id", node.getId().toString()); setProperty("hibernate.shard.enable_cross_shard_relationship_checks", "true"); for(Map.Entry<Object,Object> prop : overrides.entrySet()) setProperty(prop.getKey().toString(), prop.getValue().toString()); return this; } public ShardConfiguration toShardConfig() { return new ConfigurationToShardConfigurationAdapter(configure()); } public Node getNode() { return node; } }