/** * Dianping.com Inc. * Copyright (c) 2003-2013 All Rights Reserved. */ package com.dianping.pigeon.remoting.invoker; import com.dianping.pigeon.log.Logger; import com.dianping.pigeon.log.LoggerLoader; import com.dianping.pigeon.monitor.Monitor; import com.dianping.pigeon.monitor.MonitorLoader; import com.dianping.pigeon.remoting.common.codec.SerializerFactory; import com.dianping.pigeon.remoting.invoker.process.InvokerProcessHandlerFactory; import com.dianping.pigeon.remoting.invoker.process.ResponseProcessorFactory; import com.dianping.pigeon.remoting.invoker.route.balance.LoadBalanceManager; import com.dianping.pigeon.remoting.invoker.route.region.RegionPolicyManager; import com.dianping.pigeon.remoting.invoker.service.ServiceInvocationRepository; import com.dianping.pigeon.util.VersionUtils; public final class InvokerBootStrap { private static final Logger logger = LoggerLoader.getLogger(InvokerBootStrap.class); private static volatile boolean isStartup = false; public static boolean isStartup() { return isStartup; } public static void startup() { if (!isStartup) { synchronized (InvokerBootStrap.class) { if (!isStartup) { ServiceInvocationRepository.getInstance().init(); InvokerProcessHandlerFactory.init(); SerializerFactory.init(); LoadBalanceManager.init(); RegionPolicyManager.INSTANCE.init(); Monitor monitor = MonitorLoader.getMonitor(); if (monitor != null) { monitor.init(); } ResponseProcessorFactory.selectProcessor().getResponseProcessThreadPool().prestartAllCoreThreads(); isStartup = true; logger.warn("pigeon client[version:" + VersionUtils.VERSION + "] has been started"); } } } } public static void shutdown() { if (isStartup) { synchronized (InvokerBootStrap.class) { if (isStartup) { try { ClientManager.getInstance().destroy(); } catch (Throwable e) { } try { ServiceInvocationRepository.getInstance().destroy(); } catch (Throwable e) { } try { ResponseProcessorFactory.stop(); } catch (Throwable e) { } try { LoadBalanceManager.destroy(); } catch (Throwable e) { } isStartup = false; if (logger.isInfoEnabled()) { logger.info("pigeon client[version:" + VersionUtils.VERSION + "] has been shutdown"); } } } } } }