/*
* Copyright 2008 biaoping.yin
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" bboss persistent,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.frameworkset.common.poolman.management;
import java.util.HashMap;
import java.util.Map;
import javax.management.MBeanServer;
import org.apache.log4j.Logger;
import com.frameworkset.common.poolman.PoolManConstants;
import com.frameworkset.common.poolman.util.SQLUtil;
import com.frameworkset.orm.adapter.DBFactory;
/**
* If SQLManager is invoked (which happens when DataSources, Drivers, etc. are requested)
* and not yet instantiated, it will make a call to this class to bootstrap the config
* and pool deployment process. This class creates a PoolManConfiguration object, which
* contains data from the poolman.xml file, and then passes that config object to
* the appropriate deployer depending on whether the config shows that JMX will be used
* or whether simple local metadata will be used to deploy and manage pools.
*/
//public class PoolManBootstrap extends NotificationBroadcasterSupport implements PoolManBootstrapMBean,javax.management.MBeanRegistration{
public class PoolManBootstrap implements java.io.Serializable{
private static Logger log = Logger.getLogger(PoolManBootstrap.class);
private String configFile = PoolManConstants.XML_CONFIG_FILE;
private static Map<String,Boolean> startedFile = new HashMap<String,Boolean>();
public static void main(String[] args) throws Exception {
if ((args == null) || (args.length == 0)) {
PoolManBootstrap inc = new PoolManBootstrap();
inc.start();
}
else if (args.length == 1) {
new PoolManBootstrap(args[0]).start();
}
else {
System.out.println("SYNTAX: java -Djava.security.policy=" + "[your policy file] com.frameworkset.common.poolman.management." + "PoolManBootstrap [optional: config file name]");
System.exit(1);
}
}
public PoolManBootstrap()
{
log.debug("construct poolmanbootstrap");
//this(PoolManConstants.XML_CONFIG_FILE);
}
/**
*
* @param configFile String
* @param startFromAppServer boolean
* @throws Exception
*/
public PoolManBootstrap(String configFile) {
this.configFile = configFile;
}
//
// public void postDeregister() {
// }
//
// public void postRegister(Boolean registedSuccess) {
// }
//
// public void preDeregister() throws Exception {
// }
//
// public ObjectName preRegister(MBeanServer mBeanServer,
// ObjectName objectName) throws Exception {
// this.mBeanServer = mBeanServer;
// return null;
// }
public void reStart(String configFile) throws Exception{
}
public void start() {
try
{
start(configFile);
}
catch(Exception e)
{
log.error(e.getMessage(),e);
}
}
public static void startFromTemplte(Map<String,String> values) {
log.debug("PoolManBootstrap(configFile): " + PoolManConstants.XML_CONFIG_FILE_TEMPLATE);
PoolManConfiguration config = new PoolManConfiguration(PoolManConstants.XML_CONFIG_FILE_TEMPLATE,null);
try {
config.loadConfiguration(values);
} catch (Exception ex) {
log.error("Start(configFile) loadConfiguration error: " + ex.getMessage());
//throw ex;
}
PoolManDeployer deployer;
if (config.isUsingJMX()) {
deployer = new JMXPoolDeployer((MBeanServer)null);
try {
deployer.deployConfiguration(config);
} catch (Exception ex1) {
log.error("Start(configFile) deployConfiguration error: " + ex1.getMessage());
//throw ex1;
}
}
else {
DBFactory.addDBAdaptors(config.getAdaptors());
deployer = new LocalPoolDeployer();
try {
// deployer.deployConfiguration(config, values);
deployer.deployConfiguration(config, (Map<String,String>)null);
} catch (Exception ex2) {
log.error("LocalPoolDeployer deployConfiguration error: " + ex2.getMessage(),ex2);
//throw ex2;
}
}
//初始化主键生成机制
if(deployer != null)
{
try
{
((BaseTableManager)deployer).initTableInfo(values.get("dbname"));
}
catch(Exception e)
{
log.error("InitTableInfo: " + e.getMessage(),e);
log.debug("Initial tableinfo failed!");
//throw e;
}
}
com.frameworkset.common.poolman.sql.PoolMan.STARTED = true;
}
public void start(String configFile) {
log.debug("PoolManBootstrap(configFile): " + configFile);
PoolManConfiguration config = new PoolManConfiguration(configFile,null);
try {
config.loadConfiguration(null);
} catch (Exception ex) {
log.error("Start(configFile) loadConfiguration error: " + ex.getMessage(),ex);
//throw ex;
}
PoolManDeployer deployer;
if (config.isUsingJMX()) {
deployer = new JMXPoolDeployer((MBeanServer)null);
try {
deployer.deployConfiguration(config);
} catch (Exception ex1) {
log.error("Start(configFile) deployConfiguration error: " + ex1.getMessage(),ex1);
//throw ex1;
}
}
else {
DBFactory.addDBAdaptors(config.getAdaptors());
deployer = new LocalPoolDeployer();
try {
deployer.deployConfiguration(config);
} catch (Exception ex2) {
log.error("LocalPoolDeployer deployConfiguration error: " + ex2.getMessage(),ex2);
//throw ex2;
}
}
//初始化主键生成机制
if(deployer != null)
{
try
{
((BaseTableManager)deployer).initTableInfo();
}
catch(Exception e)
{
log.error("InitTableInfo: " + e.getMessage(),e);
log.debug("Initial tableinfo failed!");
//throw e;
}
}
// SET STATUS
com.frameworkset.common.poolman.sql.PoolMan.STARTED = true;
}
/**
* 直接从配置文件启动数据库连接池,指定每个库的dbnamespace,用来避免数据库名称的冲突
* 一旦指定的了dbnamespace,那么原来configfile中指定的dbname就回自动在前面追加dbnamespace.前缀
* 例如:
*
* @param configFile
* @param dbnamespace
*/
public static void startDBSFromConf(String configFile,String dbnamespace,String[] startdbnames) {
log.debug("PoolManBootstrap(configFile): " + configFile);
PoolManConfiguration config = new PoolManConfiguration(configFile,dbnamespace,startdbnames);
try {
config.loadConfiguration(null);
} catch (Exception ex) {
log.error("Start(configFile) loadConfiguration error: " + ex.getMessage(),ex);
//throw ex;
}
PoolManDeployer deployer;
if (config.isUsingJMX()) {
deployer = new JMXPoolDeployer((MBeanServer)null);
try {
deployer.deployConfiguration(config);
} catch (Exception ex1) {
log.error("Start(configFile) deployConfiguration error: " + ex1.getMessage(),ex1);
//throw ex1;
}
}
else {
DBFactory.addDBAdaptors(config.getAdaptors());
deployer = new LocalPoolDeployer();
try {
deployer.deployConfiguration(config);
} catch (Exception ex2) {
log.error("LocalPoolDeployer deployConfiguration error: " + ex2.getMessage(),ex2);
//throw ex2;
}
}
//初始化主键生成机制
if(deployer != null)
{
try
{
((BaseTableManager)deployer).initTableInfo();
}
catch(Exception e)
{
log.error("InitTableInfo: " + e.getMessage(),e);
log.debug("Initial tableinfo failed!");
//throw e;
}
}
// SET STATUS
com.frameworkset.common.poolman.sql.PoolMan.STARTED = true;
}
/**
* 读取配置文件启动特定的数据库
* @param configFile
* @param dbname
* @throws Exception
*/
public void startDB(String dbname) throws Exception {
log.debug("PoolManBootstrap(configFile): " + configFile);
if(dbname == null || dbname.equals(""))
dbname = SQLUtil.getSQLManager().getDefaultDBName();
PoolManConfiguration config = new PoolManConfiguration(configFile,dbname);
try {
config.loadConfiguration(null);
} catch (Exception ex) {
// log.error("Start(configFile) loadConfiguration error: " + ex.getMessage());
throw ex;
}
PoolManDeployer deployer = new LocalPoolDeployer();
try {
deployer.deployConfiguration(config,dbname);
} catch (Exception ex2) {
// log.error("LocalPoolDeployer deployConfiguration error: " + ex2.getMessage(),ex2);
throw ex2;
}
//初始化主键生成机制
if(deployer != null)
{
try
{
((BaseTableManager)deployer).initTableInfo(dbname);
}
catch(Exception e)
{
log.error("InitTableInfo: " + e.getMessage(),e);
log.debug("Initial tableinfo failed!");
throw e;
}
}
}
public void stop() {
}
}