All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.hasor.rsf.domain.ServiceDomain Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2008-2009 the original author or authors.
 *
 * 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" BASIS,
 * 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 net.hasor.rsf.domain;
import net.hasor.core.info.MetaDataAdapter;
import net.hasor.rsf.RsfBindInfo;
import net.hasor.rsf.RsfMessage;
import net.hasor.utils.StringUtils;

import java.util.*;

/**
 * 服务的描述信息,包括了服务的发布和订阅信息。
 * @version : 2014年9月12日
 * @author 赵永春 ([email protected])
 */
public class ServiceDomain extends MetaDataAdapter implements RsfBindInfo {
    private String              bindID             = null;      // 服务ID
    private String              bindName           = null;      // 服务名
    private String              bindGroup          = "default"; // 服务分组
    private String              bindVersion        = "1.0.0";   // 服务版本
    private Map aliasNameMap       = null;      // 别名
    private Class            bindType           = null;      // 服务类型
    private boolean             asMessage          = false;     // 是否为消息接口
    private boolean             asShadow           = false;     // 是否为消息接口
    private boolean             isSharedThreadPool = true;      // 是否共享调用线程池(提供者)
    private int                 clientTimeout      = 6000;      // 调用超时(毫秒)
    private String              serializeType      = null;      // 传输序列化类型
    private RsfServiceType      serviceType        = null;      // 服务类型(提供者 or 消费者)
    private Set         bindProtocols      = null;      // 服务特殊置顶的协议类型

    public ServiceDomain(Class bindType) {
        this.bindType = bindType;
        this.asMessage = bindType.isAnnotationPresent(RsfMessage.class);
        this.aliasNameMap = new HashMap<>();
        this.bindProtocols = new HashSet<>();
    }

    public String getBindID() {
        if (bindID == null) {
            this.bindID = String.format("[%s]%s-%s", this.bindGroup, this.bindName, this.bindVersion);
        }
        return this.bindID;
    }

    /**获取发布服务的名称。*/
    public String getBindName() {
        return this.bindName;
    }

    @Override
    public Set getAliasTypes() {
        return Collections.unmodifiableSet(this.aliasNameMap.keySet());
    }

    /**设置发布服务的名称。*/
    public void setBindName(String bindName) {
        this.bindName = bindName;
    }

    /**获取发布服务的分组名称(默认是:default)。*/
    public String getBindGroup() {
        return this.bindGroup;
    }

    /**设置发布服务的分组名称(默认是:default)。*/
    public void setBindGroup(String bindGroup) {
        this.bindGroup = bindGroup;
    }

    /**获取发布服务的版本号。*/
    public String getBindVersion() {
        return this.bindVersion;
    }

    /**设置发布服务的版本号。*/
    public void setBindVersion(String bindVersion) {
        this.bindVersion = bindVersion;
    }

    /** @return 别名 */
    public String getAliasName(String aliasType) {
        return this.aliasNameMap.get(aliasType);
    }

    /**设置服务别名*/
    public void putAliasName(String aliasType, String aliasName) {
        aliasType = Objects.requireNonNull(aliasType, "aliasType is null.");
        aliasName = Objects.requireNonNull(aliasName, "aliasName is null.");
        this.aliasNameMap.put(aliasType, aliasName);
    }

    /**服务类型*/
    public Class getBindType() {
        return this.bindType;
    }

    /**是否为消息接口。*/
    public boolean isMessage() {
        return this.asMessage || this.bindType.isAnnotationPresent(RsfMessage.class);
    }

    /** 设置接口的工作状态,如果接口标记了@RsfMessage,那么无论设置什么值 isMessage 都会返回true。 */
    public void setMessage(boolean asMessage) {
        this.asMessage = asMessage;
    }

    /** 接口是否要求工作在隐藏模式下。*/
    public boolean isShadow() {
        return asShadow;
    }

    public void setShadow(boolean asShadow) {
        this.asShadow = asShadow;
    }

    /**获取客户端调用服务超时时间。*/
    public int getClientTimeout() {
        return this.clientTimeout;
    }

    /**设置客户端调用服务超时时间。*/
    public void setClientTimeout(int clientTimeout) {
        this.clientTimeout = clientTimeout;
    }

    /**获取客户端使用的对象序列化格式。*/
    public String getSerializeType() {
        return this.serializeType;
    }

    @Override
    public boolean isSharedThreadPool() {
        return this.isSharedThreadPool;
    }

    public void setSharedThreadPool(boolean sharedThreadPool) {
        this.isSharedThreadPool = sharedThreadPool;
    }

    /**设置客户端使用的对象序列化格式。*/
    public void setSerializeType(String serializeType) {
        this.serializeType = serializeType;
    }

    /**获取服务类型,消费者还是提供者*/
    public RsfServiceType getServiceType() {
        return serviceType;
    }

    /**设置服务类型,消费者还是提供者*/
    public void setServiceType(RsfServiceType serviceType) {
        this.serviceType = serviceType;
    }

    @Override
    public Set getBindProtocols() {
        return this.bindProtocols;
    }

    public void addBindProtocol(String bindProtocol) {
        if (StringUtils.isBlank(bindProtocol)) {
            return;
        }
        this.bindProtocols.add(bindProtocol);
    }

    @Override
    public String toString() {
        return "ServiceDomain{" + "bindID='" + bindID + '\'' +//
                ", bindName='" + bindName + '\'' + //
                ", bindGroup='" + bindGroup + '\'' +//
                ", bindVersion='" + bindVersion + '\'' + //
                ", bindType=" + bindType + //
                '}';
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy