如何通过接口调用实现方法 JAVA调用ICE接口实践
JAVA调用ICE接口实践

最近刚开发了一个需求 使用ICE调用服务器端的接口 过程如下
首先是准备环境 通过下载得到安装包 这次我用的是 版本(目前最新是 )
接着使用bin目录下slice java将得到的ice文件转化为Java类 命令为slice java **** ice
将lib目录下Ice jar引入Java工程内 开始编写客户端代码
Java代码
public abstract class AbstractIceAgent {
protected Logger logger = LoggerFactory getLogger(AbstractIceAgent class getName());
private static final int DEFAULT_TIME_OUT = ;
String identId;
public AbstractIceAgent(){
}
public AbstractIceAgent(String identId){
this identId = identId;
}
public String getIdentId() {
return identId;
}
public void setIdentId(String identId) {
this identId = identId;
}
public Object executeProxy(Object bean) {
Communicator municator = Ice Util initialize();
Object returnValue = null;
try {
ObjectPrx objPrx = municator stringToProxy(identId);
objPrx ice_timeout(DEFAULT_TIME_OUT);
returnValue = methodAction(objPrx bean);
} catch (Exception e) {
logger error( execute proxy cause error: + e);
throw new RuntimeException(e);
} finally {
if (municator != null) {
try {
municator destroy();
municator = null;
} catch (Exception e) {
// do nothing
}
}
}
return returnValue;
}
/**
* ice接口方法的定义
*
* @param base
*/
abstract Object methodAction(ObjectPrx base Object bean);
}
这是一个虚基类 子类只需覆蓋methodAction即可
Java代码
package alibaba china brmms remind;
public interface AIMFriendBO {
int[] isFriend(String memberId String[] friendIds);
}
这是本次需要实现的接口
Java代码
public class AIMFriendAgent extends AbstractIceAgent implements AIMFriendBO {
// private static final String ICE_INTERFACE = ADPushAgentId:default h p ;
// private static BrmmsRemindAgent brmmsIceAgent = new BrmmsRemindAgent(ICE_INTERFACE);
protected Logger logger = LoggerFactory getLogger(AIMFriendAgent class getName());
private String strCaller;
private String strServiceType;
public void setStrCaller(String strCaller) {
this strCaller = strCaller;
}
public void setStrServiceType(String strServiceType) {
this strServiceType = strServiceType;
}
public AIMFriendAgent(){
};
public AIMFriendAgent(String identId){
super(identId);
}
@Override
Object methodAction(ObjectPrx base Object bean) {
WWContactInterfacePrx ctWebInterfacePrx = WWContactInterfacePrxHelper checkedCast(base);
AliIMContact contact = (AliIMContact) bean;
IntSeqHolder isFriendSeq=new IntSeqHolder();
StringHolder retMsgHolder=new StringHolder();
int result = ctWebInterfacePrx IsFriend(strCaller strServiceType contact getMemberId() contact getContactIds() isFriendSeq retMsgHolder);
// means ok normally
if(result== ){
return isFriendSeq value;
}else{
logger error( check contact error in AIMFriendAgent cause : + retMsgHolder value);
return null;
}
}
public int[] isFriend(String memberId String[] friendIds) {
if (memberId == null||friendIds==null) {
throw new RuntimeException( ice contact relation check parameters are empty );
}
int[] returnValue=(int[]) this executeProxy(new AliIMContact(memberId friendIds));
return returnValue;
}
}
lishixinzhi/Article/program/Java/hx/201311/26695