/**
* Dianping.com Inc.
* Copyright (c) 2003-2013 All Rights Reserved.
*/
package com.dianping.pigeon.remoting.provider.config.spring;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.dianping.pigeon.remoting.provider.config.PoolConfig;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import com.dianping.pigeon.log.Logger;
import com.dianping.pigeon.config.ConfigManager;
import com.dianping.pigeon.config.ConfigManagerLoader;
import com.dianping.pigeon.log.LoggerLoader;
import com.dianping.pigeon.remoting.ServiceFactory;
import com.dianping.pigeon.remoting.common.util.Constants;
import com.dianping.pigeon.remoting.provider.config.ProviderConfig;
import com.dianping.pigeon.remoting.provider.config.ProviderMethodConfig;
import com.dianping.pigeon.util.ClassUtils;
import com.dianping.pigeon.util.CollectionUtils;
public class SingleServiceBean extends ServiceInitializeListener {
private static final Logger logger = LoggerLoader.getLogger(SingleServiceBean.class);
private String url;
private Object serviceImpl;
private String version;
private String interfaceName;
private ServerBean serverBean;
private PoolConfig poolConfig;
private boolean cancelTimeout = Constants.DEFAULT_TIMEOUT_CANCEL;
private ConfigManager configManager = ConfigManagerLoader.getConfigManager();
private boolean useSharedPool = configManager.getBooleanValue(Constants.KEY_SERVICE_SHARED,
Constants.DEFAULT_SERVICE_SHARED);
private List<ProviderMethodConfig> methods;
private ClassLoader classLoader;
private int actives;
public PoolConfig getPoolConfig() {
return poolConfig;
}
public void setPoolConfig(PoolConfig poolConfig) {
this.poolConfig = poolConfig;
}
public int getActives() {
return actives;
}
public void setActives(int actives) {
this.actives = actives;
}
public ClassLoader getClassLoader() {
return classLoader;
}
public void setClassLoader(ClassLoader classLoader) {
this.classLoader = classLoader;
}
public List<ProviderMethodConfig> getMethods() {
return methods;
}
public void setMethods(List<ProviderMethodConfig> methods) {
this.methods = methods;
}
public boolean isUseSharedPool() {
return useSharedPool;
}
public void setUseSharedPool(boolean useSharedPool) {
this.useSharedPool = useSharedPool;
}
public boolean isCancelTimeout() {
return cancelTimeout;
}
public void setCancelTimeout(boolean cancelTimeout) {
this.cancelTimeout = cancelTimeout;
}
public ServerBean getServerBean() {
return serverBean;
}
public void setServerBean(ServerBean serverBean) {
this.serverBean = serverBean;
}
public String getInterfaceName() {
return interfaceName;
}
public void setInterfaceName(String interfaceName) {
this.interfaceName = interfaceName;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Object getServiceImpl() {
return serviceImpl;
}
public void setServiceImpl(Object serviceImpl) {
this.serviceImpl = serviceImpl;
}
public void init() throws Exception {
if (serviceImpl == null) {
throw new IllegalArgumentException("service not found:" + this);
}
ProviderConfig<?> providerConfig = null;
if (StringUtils.isBlank(interfaceName)) {
providerConfig = new ProviderConfig<Object>(serviceImpl);
} else {
Class<?> cl = ClassUtils.loadClass(interfaceName);
providerConfig = new ProviderConfig(cl, serviceImpl);
}
providerConfig.setVersion(version);
providerConfig.setUrl(url);
providerConfig.setCancelTimeout(cancelTimeout);
providerConfig.setSharedPool(useSharedPool);
if (!CollectionUtils.isEmpty(methods)) {
Map<String, ProviderMethodConfig> methodMap = new HashMap<String, ProviderMethodConfig>();
providerConfig.setMethods(methodMap);
for (ProviderMethodConfig method : methods) {
methodMap.put(method.getName(), method);
}
}
providerConfig.setActives(actives);
providerConfig.setPoolConfig(poolConfig);
if (serverBean != null) {
providerConfig.setServerConfig(serverBean.init());
}
ServiceFactory.addService(providerConfig);
}
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}