使用java和CORBA实现分布应用编程

因为课程的需要,学习了下用java和CORBA来实现分布应用编程,具体的CORBA是什么以及它的框架结构我就不多说了,这里我是给出一个比较完整的例子来展示下代码要怎么写。

应用背景:

使用java和CORBA构建一个关于制订to-do-list的分布式应用。不同的客户端可以通过连接到服务器来管理自己的to-do-list,比如有add list items、query list items、delete list items、clear to-do lists、show total list等功能。同时服务器可以管理用户,比如有登录和注册功能。每个to-do list的内容有该做的事、开始时间、结束时间。

具体实现

一、编写IDL接口定义文件
使用IDL语言为远程对象定义接口,根据题目要求,定义IDL文件如下:
(1)在文件creator.idl中:

module CreatorModule{
    interface Creator{
        boolean login(in string name,in string password);
        boolean register(in string name,in string password);
    };
};

这是用来管理用户的,提供了注册和登陆接口。
(2)在文件user.idl中:

mmodule UserModule{
    interface User{
        boolean add(in string startTime,in string endTime,in string label);
        string query(in string startTime,in string endTime);
        boolean delete(in string key);
        boolean clear();
        string show();
    };
};

add()、query()、delete()、clear()、show()分别为客户端对to-do-list中的item进行增查删清的操作。

二、将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根
定义好IDL接口文件后,使用idlj编译器生成Java语言的stub和skeleton源文件。idlj编译器缺省只生成客户端的binding代码。如果同时需要客户端的bindings和服务器端的skeletons,必须加上-fall选项。
所以在shell中先后输入命令

idlj -fall /home/huxijie/IntelliJIDEAProjects/ToDoListApp/src/creator.idl

和命令

idlj -fall /home/huxijie/IntelliJIDEAProjects/ToDoListApp/src/user.idl 

后会生成目录CreatorModule和UserModule。两个目录的文件如下:
这里写图片描述
对CreatorModule目录下的六个文件说明如下:
(1) Creator.java:此接口包含IDL接口的Java版本。它继承自org.omg.CORBA.Object,提供标准的CORBA对象功能。
(2)CreatorHelper.java : 此类提供辅助功能,Helper类负责读写数据类型到CORBA流,以及插入和提取数据类型。
(3)CreatorHolder.java : 此类是一个终态类,其中含有Creator类型的公有数据成员。
(4)CreatorOperations.java : 这是一个接口类,其中含有在creator.idl文件中编写的接口方法。
(5)CreatorPOA.java : 此抽象类是基于流的服务器Skeleton,为服务器提供基本的CORBA功能。它继承org.omg.PortableServer.Servant, 实现了InvokeHandler接口和CreatorOperations接口。以后编写的服务器类要继承CreatorPOA。
(6)_CreatorStub.java : 此类是客户端stub,为客户端提供CORBA功能。它继承org.omg.CORBA.Object,提供标准CORBA对象功能。还扩展了 CreatorOperations接口和org.omg.CORBA.portable.IDLEntity接口。
UserModule目录下的文件意义和上面类似。
三、编写对象类
根据题意,需要编写Person类来抽象化用户以及Item类来抽象化to-do-list中的事项。因为我是将用户列表和事项列表存在本地文件中,所以需要让Person类和Item类实现Serializable序列化。

/**
 * Created by huxijie on 17-5-3.
 * 用户类
 */
public class Person implements Serializable{
   
    private String name;
    private String password;

    public Person(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getPassword() {
        return password;
    }
}
/**
 * Created by huxijie on 17-5-3.
 * 事项类
 */
public class Item implements Serializable{
   
    private Date startTime;
    private Date endTime;
    private String label;

    public Item(Date startTime, Date endTime, String label) {
        this.startTime = startTime;
        this.endTime = endTime;
        this.label = label;
    }

    public Date getStartTime() {
        return startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public String getLabel() {
        return label;
    }
}

四、接口实现
(一)实现creator.idl中定义的接口

/**
 * Created by huxijie on 17-5-3.
 * 实现用户管理creator.idl中定义的接口
 */
public class CreatorImpl extends CreatorPOA {
   
    private Map<String, Person> personsMap;
    private String name = null;
    private ORB orb;
    private ToDoListServer toDoListServer;
    private UserImpl userImpl;

    public CreatorImpl() {
        init();
    }

    //初始化
    private void init() {
        //从文件中读取用户列表,转化为HashMap
        try {
            FileInputStream fin = new FileInputStream("person.file");
            ObjectInputStream oin = new ObjectInputStream(fin);
            try {
                Object object = oin.readObject();
                personsMap = (HashMap<String, Person>) object;
            } catch (ClassNotFoundException e) {
                System.out.println("object cast error");
                personsMap = new HashMap<String, Person>();
            }
            oin.close();
            fin.close();
        } catch (Exception e) {
            personsMap = new HashMap<String, Person>();
        }
    }

    //将用户表保存到本地文件中
    private 
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值