`
dengminhui
  • 浏览: 167290 次
  • 来自: ...
社区版块
存档分类
最新评论

JAVA调用ICE接口实践

阅读更多

最近刚开发了一个需求,使用ICE调用服务器端的接口,过程如下:

1 首先是准备环境,通过下载得到安装包,这次我用的是3.1版本(目前最新是3.4)

2 接着使用bin目录下slice2java将得到的ice文件转化为Java类,命令为slice2java    ****.ice

3 将lib目录下Ice.jar引入Java工程内,开始编写客户端代码

 

 

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);

}

 

 

 这是一个虚基类,子类只需覆盖methodAction即可。

 

 

 

 

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

 

 

 

0
0
分享到:
评论
2 楼 dengminhui 2010-10-13  
kellersoon 写道
包名,类名和identID应该改下 呵呵

呵呵,多谢提醒
1 楼 kellersoon 2010-09-10  
包名,类名和identID应该改下 呵呵

相关推荐

    java ice资料

    通过这个过程,读者可以了解ICE的编译器(icecpp)如何将接口定义转换为可执行代码,以及如何使用ICE运行时库连接客户端和服务端。 在Java ICE的学习过程中,以下几个关键知识点不容忽视: 1. **接口定义语言 (IDL...

    icedemo实现对象的传输与返回(java)

    这个"icedemo"示例展示了如何在Java中使用ICE框架进行对象传输。ICE提供了高效的序列化机制和强大的异常处理,同时支持多种编程语言,确保了跨语言、跨平台的互操作性。通过理解并实践这样的示例,开发者可以更好地...

    ice.rar_ICE_ICE 开发_ICE CORBA_corba_ice接口

    使用ICE,开发者可以快速构建可扩展、高可用性的分布式系统,同时享受到其提供的强大调试工具和完善的API文档,从而提高开发效率。 总结来说,ICE是一种强大的分布式计算框架,具有与CORBA类似的接口规范,但更易于...

    Ice通信框架原理与实践

    - **调试与性能优化**:掌握使用Ice提供的工具进行调试,以及如何通过调整参数和设计优化性能。 - **安全性**:理解如何利用Ice的安全特性,如身份验证、授权和加密,确保通信安全。 5. **案例研究** - **PPT...

    Zeroc ICE中间件slice2java的ant脚本

    描述中提到的博文链接,虽然实际内容不可见,但可以推测博主可能分享了一个关于如何使用Ant脚本来调用slice2java工具并自动转换Slice文件为Java代码的过程。这通常涉及到设置Ant任务,配置输入Slice文件路径,指定...

    ICE框架 C++示例程序

    3. **接口定义语言(IDL)**:ICE使用称为“Slice”的接口定义语言来描述服务接口, Slice文件可以被编译成不同语言的客户端和服务器端代码。 4. **自动类型映射**:ICE支持基本数据类型和自定义类型的自动序列化和...

    ICE客户端实现代码

    首先,ICE客户端的核心是通过ICE接口来调用服务端提供的功能。这些接口定义了客户端和服务端之间的通讯协议,包括方法名、参数类型和返回值。在VC++环境下,客户端通常会包含ICE的库文件和头文件,以便使用ICE的API...

    ICE 的聊天demo 含有ICE的配置文档

    这个聊天demo是基于ICE实现的一个实例,它包含了ICE的配置文档和使用指南,帮助开发者了解如何在Visual Studio 2013环境中集成和使用ICE。 1. **ICE中间件**:ICE是由ZeroC公司开发的跨平台通信框架,它提供了多种...

    ice安装包 for windows.zip

    例如,`slice2cpp`是一个将ICE接口定义(slice文件)转换为C++源代码的工具,使得开发者可以轻松地根据接口实现业务逻辑。`icegridadmin`则是用于管理和监控ICE网格服务的工具,可以帮助开发者管理分布式系统的实例...

    Ice-3.5.1.zip

    5. `examples`目录:提供了各种示例程序,展示了如何使用Ice进行基本的通信和复杂的应用场景。 四、深入学习路径 1. 了解IDL:熟悉Ice的接口定义语言,学习如何定义服务接口和数据类型。 2. 编译和运行示例:通过...

    ice教程和ice中文版手册

    ICE支持多种编程语言,包括C++、Java、Python等,为开发者提供了灵活的选择。 ICE教程是学习和掌握这一技术的重要资源。教程通常会从基础知识开始,解释ICE的基本概念,如代理(Proxy)、骨架(Skeleton)、接口...

    ICE3.5开发开发完整示例

    开发者可以学习到如何在C++中使用ICE进行内存管理、错误处理和并发控制,以及如何实现高效的服务器和服务客户端。 6. **Ice-3.5.1-demos目录**:这个目录下的文件可能包括了各种语言的源码示例、编译脚本、配置文件...

    Zero Ice中文教程

    2. **接口与多态(Interfaces and Polymorphism)**: Ice支持接口定义和多态性,允许服务提供者通过实现特定接口来暴露功能,而客户端则通过接口调用服务,实现松耦合。 3. **序列化(Serialization)**: Ice有自己的...

    ice教程&中文版手册

    **ICE(Internet ..."ice教程&中文版手册" 对于想要学习和使用 ICE 的开发者来说,是深入理解 ICE 并进行实践操作的重要参考资料。通过阅读和实践,你可以掌握如何利用 ICE 构建可靠的、跨平台的分布式应用。

    JAVA版的iec61850实例

    Java版的IEC61850实例则为开发者提供了一个实践该标准的平台,尤其对于客户端和服务端的MMS(Manufacturing Message Service,制造报文规范)映射的实现,具有很高的学习价值。 **一、IEC61850基础** 1. **数据...

    ICE通信范例

    在ICE通信中,动态库封装通常是将ICE接口实现封装到一个可分离的库中,这样客户端可以通过导入这个库来调用服务端的功能。动态库的创建需要定义导出函数和类,使用`__declspec(dllexport)`或`__declspec(dllimport)`...

    ICE SERVER服务器

    在JAVA中使用ICE,首先需要安装ICE SDK,并通过ICE编译器将Slice接口转换为JAVA代码。然后,你可以创建ICE服务器端,实现Slice接口定义的服务,注册到ICE运行时环境。服务器启动后,就可以监听来自客户端的请求。 ...

    Test_ice.rar

    【描述】"这是用java开发的ice的helloworld" 暗示了这个压缩包的核心内容是一个Java项目,该项目展示了如何使用Ice库来实现一个基础的“Hello, World!”服务。在Java中,"Hello, World!"程序通常涉及创建一个类,该...

    Ice 经典入门和实例

    在“服务及实例”部分,你将深入学习如何创建和使用Ice服务。这可能包括定义服务接口、实现服务逻辑、启动和管理服务,以及如何通过客户端调用这些服务。实例通常会涵盖各种实际应用场景,例如分布式数据库访问、...

Global site tag (gtag.js) - Google Analytics