/** * Alipay.com Inc. * Copyright (c) 2004-2012 All Rights Reserved. */ package com.alipay.zdal.datasource.util; import java.util.Map; import org.apache.log4j.Logger; import com.alipay.zdal.datasource.LocalTxDataSourceDO; import com.alipay.zdal.datasource.ZDataSource; import com.alipay.zdal.datasource.ZDataSourceFactory; import com.alipay.zdal.datasource.resource.adapter.jdbc.local.LocalTxDataSource; /** * * * @author liangjie.li * @version $Id: ZDataSourceChanger.java, v 0.1 2012-8-20 ����8:08:03 liangjie.li Exp $ */ public class ZDataSourceChanger { private static final Logger logger = Logger.getLogger(ZDataSourceChanger.class); public static boolean configChange(Map<String, String> properties, ZDataSource zds) { boolean urlChange = ZDataSourceUtil.isChanged(properties, Parameter.JDBC_URL); //url�Ƿ�ı� boolean driverChange = ZDataSourceUtil.isChanged(properties, Parameter.DRIVER_CLASS);//driverclass �Ƿ�ı� //�ȸ���һ��,�������͵���ֵ���� LocalTxDataSourceDO newDO = new LocalTxDataSourceDO(); newDO.setDsName(zds.getDsName()); ZDataSourceUtil.copyDS2DO(zds.getLocalTxDataSource(), newDO); ZDataSourceUtil.replaceValueFromMap(newDO, properties); if (driverChange && !urlChange) {//jboss��Ϊurl����driver logger.error("driverClass�������Ͳ���ʱ��connectionUrlҲ�����ͣ��������ͺ���"); return false; } //connectionproperties�Ƿ�ı� boolean propChange = ZDataSourceUtil.solveConnectionProperties(newDO .getConnectionProperties(), zds.getLocalTxDataSource().getConnectionProperties()); boolean dsFileChange = ZDataSourceUtil.isNeedReCreate(newDO, zds.getLocalTxDataSource(), propChange); if (dsFileChange) { return reCreatePool(newDO, zds); } return true; } /** * �ؽ�����Դ���ӳأ��Ƚ���һ���µ����ӳأ�Ȼ��;ɵĽ�������������ɵ� * * @param newDO * @return */ static boolean reCreatePool(LocalTxDataSourceDO newDO, ZDataSource zds) { try { long t1 = System.currentTimeMillis(); LocalTxDataSource newDs = ZDataSourceFactory.createLocalTxDataSource(newDO, zds); LocalTxDataSource oldDs = zds.getLocalTxDataSource(); zds.setLocalTxDataSource(newDs); oldDs.destroy(); oldDs = null; logger.warn("���ӳ��Ѿ��ؽ�, cost " + (System.currentTimeMillis() - t1) + " ms"); return true; } catch (Exception e) { logger.error("���ӳ��ؽ�ʧ��", e); return false; } } }