- 浏览: 167290 次
- 来自: ...
文章分类
最新评论
-
hellostory:
不知所云………………
如何使用反射访问类的private域和方法 -
xusong_zidingyi:
如果在linux下面的话就没有办法运行了,因为linux没有办 ...
使用tesseract破解checkCode -
javajava22:
Errors accessing files. There m ...
使用tesseract破解checkCode -
suncathay:
qljobs 写道cmd.add("E:/Works ...
使用tesseract破解checkCode -
zuoxu128:
TIFFImageWriteParam ,这个类是哪个包的啊
使用tesseract破解checkCode
最近刚开发了一个需求,使用ICE调用服务器端的接口,过程如下:
1 首先是准备环境,通过下载得到安装包,这次我用的是3.1版本(目前最新是3.4)
2 接着使用bin目录下slice2java将得到的ice文件转化为Java类,命令为slice2java ****.ice
3 将lib目录下Ice.jar引入Java工程内,开始编写客户端代码
这是一个虚基类,子类只需覆盖methodAction即可。
public abstract class AbstractIceAgent {
protected Logger logger = LoggerFactory.getLogger(AbstractIceAgent.class.getName());
private static final int DEFAULT_TIME_OUT = 2000;
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 communicator = Ice.Util.initialize();
Object returnValue = null;
try {
ObjectPrx objPrx = communicator.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 (communicator != null) {
try {
communicator.destroy();
communicator = null;
} catch (Exception e) {
// do nothing
}
}
}
return returnValue;
}
/**
* ice接口方法的定义
*
* @param base
*/
abstract Object methodAction(ObjectPrx base, Object bean);
}
package ****; public interface AIMFriendBO { int[] isFriend(String memberId, String[] friendIds); }
这是本次需要实现的接口。
public class AIMFriendAgent extends AbstractIceAgent implements AIMFriendBO { // private static final String ICE_INTERFACE = "ADPushAgentId:default -h 10.2.225.50 -p 11001"; // 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); // 10000 means ok normally if(result==10000){ 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; } }
这是最后的实现,使用时只需在spring的配置文件中配好需要的参数即可直接使用。
参考文献:http://blog.csdn.net/linkyou/archive/2009/02/02/3858233.aspx
评论
呵呵,多谢提醒
发表评论
-
一些随想
2012-06-01 22:05 0需求 idea 方案 执 ... -
Redis的安装与使用
2011-10-24 20:04 1280今天看了下redis相关的东东,做个备忘。 Re ... -
Redis的安装与使用
2011-10-24 20:00 0Redis 服务端: http://cocos.iteye. ... -
GenericDAO
2011-07-31 14:49 0GenericDAO -
loadfromproperties
2011-07-31 14:48 0loadfromproperties -
resultcode
2011-07-31 14:47 0resultcode -
berkeleydb的使用
2011-10-24 20:05 1874在napoli的代码中发现这个berkeleydb,版本为3. ... -
几种简单的Load Balance方法
2011-07-31 13:44 0以下代码出自napoli (1)定义Selec ... -
参数断言工具
2011-07-31 12:58 945见代码: public final class Argume ... -
如何检测线上代码的运行情况---BTrace使用分享
2011-04-10 17:36 2083(1)你是否有时发现线上的代码运行效率不高,但却无法定位到底具 ... -
napoli和JMS,mq的一些知识
2010-11-26 21:01 01 jms和mq (1)jms activeMQ 应用 h ... -
Taglib基础知识
2010-11-26 12:41 0浅论taglib设计 : http://wenku.bai ... -
java编码问题的一些文章
2010-11-11 17:30 0http://www.iteye.com/topic/8047 ... -
URL在转码的过程中数据丢失
2010-10-25 14:52 0示例代码 import java.io.Unsuppo ... -
遍历大容量map的正确方法
2010-10-08 13:20 11179首先,遍历map有以下方法: import java.uti ... -
B2B-Code Review规范
2010-08-31 10:15 01.目标 凡事知其然还要知其所以然,我们首先需要知道什么 ... -
多线程书写及code review规范
2010-08-31 10:09 14451. 不允许将Calendar用于类的静态成员 ... -
域名白名单检查
2010-08-24 21:05 0首先准备一份白名单名为safe-domain.xml ,如下: ... -
如何使用反射访问类的private域和方法
2010-08-17 21:44 5124如何使用反射访问类的private域和方法?非常简单,由 ... -
FindBugs插件的安装与使用
2010-04-21 10:54 19081 什么是FindBugs FindBugs 是一个静态分析 ...
相关推荐
通过这个过程,读者可以了解ICE的编译器(icecpp)如何将接口定义转换为可执行代码,以及如何使用ICE运行时库连接客户端和服务端。 在Java ICE的学习过程中,以下几个关键知识点不容忽视: 1. **接口定义语言 (IDL...
这个"icedemo"示例展示了如何在Java中使用ICE框架进行对象传输。ICE提供了高效的序列化机制和强大的异常处理,同时支持多种编程语言,确保了跨语言、跨平台的互操作性。通过理解并实践这样的示例,开发者可以更好地...
使用ICE,开发者可以快速构建可扩展、高可用性的分布式系统,同时享受到其提供的强大调试工具和完善的API文档,从而提高开发效率。 总结来说,ICE是一种强大的分布式计算框架,具有与CORBA类似的接口规范,但更易于...
- **调试与性能优化**:掌握使用Ice提供的工具进行调试,以及如何通过调整参数和设计优化性能。 - **安全性**:理解如何利用Ice的安全特性,如身份验证、授权和加密,确保通信安全。 5. **案例研究** - **PPT...
描述中提到的博文链接,虽然实际内容不可见,但可以推测博主可能分享了一个关于如何使用Ant脚本来调用slice2java工具并自动转换Slice文件为Java代码的过程。这通常涉及到设置Ant任务,配置输入Slice文件路径,指定...
3. **接口定义语言(IDL)**:ICE使用称为“Slice”的接口定义语言来描述服务接口, Slice文件可以被编译成不同语言的客户端和服务器端代码。 4. **自动类型映射**:ICE支持基本数据类型和自定义类型的自动序列化和...
首先,ICE客户端的核心是通过ICE接口来调用服务端提供的功能。这些接口定义了客户端和服务端之间的通讯协议,包括方法名、参数类型和返回值。在VC++环境下,客户端通常会包含ICE的库文件和头文件,以便使用ICE的API...
这个聊天demo是基于ICE实现的一个实例,它包含了ICE的配置文档和使用指南,帮助开发者了解如何在Visual Studio 2013环境中集成和使用ICE。 1. **ICE中间件**:ICE是由ZeroC公司开发的跨平台通信框架,它提供了多种...
例如,`slice2cpp`是一个将ICE接口定义(slice文件)转换为C++源代码的工具,使得开发者可以轻松地根据接口实现业务逻辑。`icegridadmin`则是用于管理和监控ICE网格服务的工具,可以帮助开发者管理分布式系统的实例...
5. `examples`目录:提供了各种示例程序,展示了如何使用Ice进行基本的通信和复杂的应用场景。 四、深入学习路径 1. 了解IDL:熟悉Ice的接口定义语言,学习如何定义服务接口和数据类型。 2. 编译和运行示例:通过...
ICE支持多种编程语言,包括C++、Java、Python等,为开发者提供了灵活的选择。 ICE教程是学习和掌握这一技术的重要资源。教程通常会从基础知识开始,解释ICE的基本概念,如代理(Proxy)、骨架(Skeleton)、接口...
开发者可以学习到如何在C++中使用ICE进行内存管理、错误处理和并发控制,以及如何实现高效的服务器和服务客户端。 6. **Ice-3.5.1-demos目录**:这个目录下的文件可能包括了各种语言的源码示例、编译脚本、配置文件...
2. **接口与多态(Interfaces and Polymorphism)**: Ice支持接口定义和多态性,允许服务提供者通过实现特定接口来暴露功能,而客户端则通过接口调用服务,实现松耦合。 3. **序列化(Serialization)**: Ice有自己的...
**ICE(Internet ..."ice教程&中文版手册" 对于想要学习和使用 ICE 的开发者来说,是深入理解 ICE 并进行实践操作的重要参考资料。通过阅读和实践,你可以掌握如何利用 ICE 构建可靠的、跨平台的分布式应用。
Java版的IEC61850实例则为开发者提供了一个实践该标准的平台,尤其对于客户端和服务端的MMS(Manufacturing Message Service,制造报文规范)映射的实现,具有很高的学习价值。 **一、IEC61850基础** 1. **数据...
在ICE通信中,动态库封装通常是将ICE接口实现封装到一个可分离的库中,这样客户端可以通过导入这个库来调用服务端的功能。动态库的创建需要定义导出函数和类,使用`__declspec(dllexport)`或`__declspec(dllimport)`...
在JAVA中使用ICE,首先需要安装ICE SDK,并通过ICE编译器将Slice接口转换为JAVA代码。然后,你可以创建ICE服务器端,实现Slice接口定义的服务,注册到ICE运行时环境。服务器启动后,就可以监听来自客户端的请求。 ...
【描述】"这是用java开发的ice的helloworld" 暗示了这个压缩包的核心内容是一个Java项目,该项目展示了如何使用Ice库来实现一个基础的“Hello, World!”服务。在Java中,"Hello, World!"程序通常涉及创建一个类,该...
在“服务及实例”部分,你将深入学习如何创建和使用Ice服务。这可能包括定义服务接口、实现服务逻辑、启动和管理服务,以及如何通过客户端调用这些服务。实例通常会涵盖各种实际应用场景,例如分布式数据库访问、...