【问题标题】:Encapsulate Java RMI remote methods封装 Java RMI 远程方法
【发布时间】:2014-08-15 09:12:10
【问题描述】:

我想做一项服务,在执行这些任务的多个服务器之间分配任务。 为此,我使用了 Java RMI 技术,一切正常,但它是一团糟。我有一堂大课,就是 与服务器调用以发布消息和客户端方法的远程方法混合 将任务调度到客户端调用的服务。

我现在正试图找到一个合适的解决方案来封装业务方法中的远程方法,但由于它们紧密耦合,因此遇到了困难。消息实现(参见示例类图)与私有业务方法紧密交互。 这可能还包括调用 Client 类的事件 订阅。我的第一个想法是使用消息处理程序的方法。但是消息处理程序如何仍然与服务器的私有方法交互并调用服务上的事件。

我想问你是否对我的问题有任何想法。如何从非远程方法中封装远程接口及其方法?

【问题讨论】:

  • 您的TaskServiceEngine 是调度程序,我是否正确?你应该将doBusiness() 类型的方法提取到单独的类中。你的TaskServiceEngine 应该有很少的公共方法:(客户端接口)subscribe(Listener [, List<Job>])submitJob(Job [, List<Listener>]) 和(服务器接口)submitJob(Job)updateJobStatus(Job)
  • 是的,也许 doBusiness 方法是一个不好的例子,应该与您建议的 submitMethod 交换。在我的真实示例中,我有一个名为 queue(Job job) 的公共方法。实际上我想出了一个新的想法。我很快就会发布图表。
  • 我的想法如下(我认为这不需要图表):我有一个模型类,它封装了“业务”数据,并且除了 addMyEventListener 方法之外还提供公共 fireMyEvent 方法。我现在有几个消息处理程序,我将这个模型的一个实例传递给它们。然后,它们可能会根据其特定的消息处理调用事件并操纵数据。但我不确定这些公共 fireMyEvent 方法是否是个好主意?

标签: java architecture interface rmi


【解决方案1】:

如果我正确理解了这个问题,你有一个包含三种方法的大类:-

  1. 供客户端使用但不供服务器使用的远程方法;
  2. 供服务器使用但不供客户端使用的远程方法;和
  3. 本地方法根本不适合远程。

在我看来,创建两个远程接口(一个用于客户端,一个用于服务器)并在大类中实现它们将满足您的需求。客户端只会看到一个接口和其中的方法;任务服务器也是如此。

这样的封装就够了吗?还是你的意思更多?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2011-09-25
    相关资源
    最近更新 更多