// Path: ourea-core/src/main/java/com/taocoder/ourea/core/common/OureaConnCreateException.java
// public class OureaConnCreateException extends RuntimeException {
// 
//     public OureaConnCreateException(String message) {
//         super(message);
//     }
// }
// 
// Path: ourea-core/src/main/java/com/taocoder/ourea/core/common/OureaException.java
// public class OureaException extends RuntimeException {
// 
//     public OureaException(String message) {
//         super(message);
//     }
// }
// 
// Path: ourea-core/src/main/java/com/taocoder/ourea/core/model/ProviderInfo.java
// public class ProviderInfo implements Serializable {
// 
//     private static final long serialVersionUID = 733316025823163238L;
// 
//     private String ip;
//     private int port;
//     private int weight;
// 
//     /**
//      * 是否对外提供服务
//      */
//     private boolean status = true;
// 
//     public ProviderInfo() {
//     }
// 
//     public ProviderInfo(String ip) {
//         this.ip = ip;
//     }
// 
//     public String getIp() {
//         return ip;
//     }
// 
//     public void setIp(String ip) {
//         this.ip = ip;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public int getWeight() {
//         return weight;
//     }
// 
//     public void setWeight(int weight) {
//         this.weight = weight;
//     }
// 
//     public boolean isStatus() {
//         return status;
//     }
// 
//     public void setStatus(boolean status) {
//         this.status = status;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
// 
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         ProviderInfo that = (ProviderInfo) o;
// 
//         return new EqualsBuilder().append(port, that.port).append(ip, that.ip).isEquals();
//     }
// 
//     @Override
//     public int hashCode() {
//         return new HashCodeBuilder(17, 37).append(ip).append(port).toHashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }


import com.taocoder.ourea.core.common.OureaConnCreateException;
import com.taocoder.ourea.core.common.OureaException;
import com.taocoder.ourea.core.model.ProviderInfo;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
     */
    @Override
    public PooledObject<TTransport> makeObject() throws Exception {
        TTransport transport = null;
        Exception ex = null;
        int retryConn = 1;
        do {
            try {
                transport = new TSocket(providerInfo.getIp(), providerInfo.getPort(), timeout);
                transport.open();
                ((TSocket) transport).setTimeout(timeout);
                return new DefaultPooledObject<TTransport>(transport);
            } catch (Exception e) {
                ex = e;
            }
        } while (retryConn-- > 0);
        LOGGER.error("make transport object fail.e:", ex);
        throw new OureaConnCreateException("make transport object fail." + ex.getMessage());
    }

    @Override
    public void destroyObject(PooledObject<TTransport> p) throws Exception {

        try {
            TTransport transport = p.getObject();
            if (transport.isOpen()) {
                transport.close();
            }
        } catch (Exception e) {
            LOGGER.error("destroy transport object fail.maybe exist memory leek.e:", e);
// Path: ourea-core/src/main/java/com/taocoder/ourea/core/common/OureaConnCreateException.java
// public class OureaConnCreateException extends RuntimeException {
// 
//     public OureaConnCreateException(String message) {
//         super(message);
//     }
// }
// 
// Path: ourea-core/src/main/java/com/taocoder/ourea/core/common/OureaException.java
// public class OureaException extends RuntimeException {
// 
//     public OureaException(String message) {
//         super(message);
//     }
// }
// 
// Path: ourea-core/src/main/java/com/taocoder/ourea/core/model/ProviderInfo.java
// public class ProviderInfo implements Serializable {
// 
//     private static final long serialVersionUID = 733316025823163238L;
// 
//     private String ip;
//     private int port;
//     private int weight;
// 
//     /**
//      * 是否对外提供服务
//      */
//     private boolean status = true;
// 
//     public ProviderInfo() {
//     }
// 
//     public ProviderInfo(String ip) {
//         this.ip = ip;
//     }
// 
//     public String getIp() {
//         return ip;
//     }
// 
//     public void setIp(String ip) {
//         this.ip = ip;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public int getWeight() {
//         return weight;
//     }
// 
//     public void setWeight(int weight) {
//         this.weight = weight;
//     }
// 
//     public boolean isStatus() {
//         return status;
//     }
// 
//     public void setStatus(boolean status) {
//         this.status = status;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
// 
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         ProviderInfo that = (ProviderInfo) o;
// 
//         return new EqualsBuilder().append(port, that.port).append(ip, that.ip).isEquals();
//     }
// 
//     @Override
//     public int hashCode() {
//         return new HashCodeBuilder(17, 37).append(ip).append(port).toHashCode();
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }


// Path: ourea-core/src/main/java/com/taocoder/ourea/core/consumer/ConsumerPoolFactory.java
import com.taocoder.ourea.core.common.OureaConnCreateException;
import com.taocoder.ourea.core.common.OureaException;
import com.taocoder.ourea.core.model.ProviderInfo;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

     */
    @Override
    public PooledObject<TTransport> makeObject() throws Exception {
        TTransport transport = null;
        Exception ex = null;
        int retryConn = 1;
        do {
            try {
                transport = new TSocket(providerInfo.getIp(), providerInfo.getPort(), timeout);
                transport.open();
                ((TSocket) transport).setTimeout(timeout);
                return new DefaultPooledObject<TTransport>(transport);
            } catch (Exception e) {
                ex = e;
            }
        } while (retryConn-- > 0);
        LOGGER.error("make transport object fail.e:", ex);
        throw new OureaConnCreateException("make transport object fail." + ex.getMessage());
    }

    @Override
    public void destroyObject(PooledObject<TTransport> p) throws Exception {

        try {
            TTransport transport = p.getObject();
            if (transport.isOpen()) {
                transport.close();
            }
        } catch (Exception e) {
            LOGGER.error("destroy transport object fail.maybe exist memory leek.e:", e);
            throw new OureaException("destroy transport object fail" + e.getMessage());