package jef.database.jmx; import java.util.Collections; import java.util.IdentityHashMap; import java.util.Map; import jef.database.DbClient; import jef.database.ORMConfig; import jef.database.ORMConfigMBean; import jef.database.jpa.JefEntityManagerFactory; import jef.tools.jmx.JefMonitorRegister; /** * 用于获得JEF的JMX控制Bean。可以收集到JEF的统计信息,以及修改相关配置 * @author jiyi * */ public class JefFacade { /** * ORM配置Bean */ private static ORMConfigMBean ormConfig; /** * 所有DB */ private static final Map<DbClient,DbClientInfo> emfMap=new IdentityHashMap<DbClient, DbClientInfo>(8); /** * 记录所有的db和emf * @param db * @param emf */ public static synchronized void registeEmf(DbClient db,JefEntityManagerFactory emf){ DbClientInfo stat=emfMap.get(db); if(stat==null){ stat=new DbClientInfo(db); stat.setDbClientFactory(emf); emfMap.put(db, stat); if(JefMonitorRegister.isJmxEnable()){ JefMonitorRegister.registe("JefDbClient:key=Db@"+Integer.toHexString(db.hashCode()), stat); } }else{ stat.setDbClientFactory(emf); } initOrmConfig(); } private static void initOrmConfig() { if(ormConfig==null){ ormConfig=ORMConfig.getInstance(); JefMonitorRegister.registe("JefOrmConfig:key=global",ormConfig); } } /** * 注销EMF * @param db */ public static synchronized void unregisteEmf(DbClient db){ DbClientInfo bean=emfMap.remove(db); if(JefMonitorRegister.isJmxEnable()){ JefMonitorRegister.unregiste("JefDbClient:key=Db@"+Integer.toHexString(db.hashCode()), bean); } } /** * 获得所有记录的db和emf * @return */ public static Map<DbClient,DbClientInfo> getAll(){ return Collections.unmodifiableMap(emfMap); } /** * 获得ORM配置 MBean * @return */ public static ORMConfigMBean getOrmConfig() { initOrmConfig(); return ormConfig; } }