RMI Java应用程序未按预期工作

时间:2014-05-10 00:57:29

标签: java rmi

我正在阅读this本书中的网络和java。

问题是我正在尝试做一本本书上列出的示例,它是在第153页至第159页(段落 5.4使用RMI有意义)。

我做了一些更改,主要是他使用旧的Vector我用ArrayList替换它。同样在客户端,我做了一些小改动:

public static void main(String[] args) {
    try {
        // Obtain a reference to the object from the
        // registry and typecast it into the appropriate
        // type...

        String name = "//localhost/Service1";
        Stp temp = (Stp) Naming.lookup(name);

        ArrayList<Account> acc = temp.getAccs();

        System.out.println(acc);

        for (Account cnt : acc) {
            if ("george".equals(cnt.name)) {
                cnt.get(10);
                System.out.println(cnt);
            }
        }

    } catch (ConnectException conEx) {
        System.out.println("Unable to connect to server!");
        System.exit(1);
    } catch (Exception ex) {
        ex.printStackTrace();
        System.exit(1);
    }
}

它工作正常,或几乎没问题。当从客户端调用get(int number)方法时(它应该减少平衡),它实际上完成了它的意图。问题是,如果我从另一个cmd窗口打开另一个客户端,或者即使我再次运行同一个客户端,它也不会进一步降低余额值。如果余额为100且客户端运行get(10),他将看到90.但如果客户端代码再次运行另一个get(10),则余额不会更新并再次保留90.它应该是80岁。

感谢您的任何信息!

1 个答案:

答案 0 :(得分:0)

那是因为ArrayList是可序列化的而不是远程的。您的客户端下载了它的副本,并对其中的一个元素执行了操作,该元素也在您的JVM中。另一位客户做了同样的事情。没有人对服务器JVM中的元素做任何事情,所以它没有改变。您需要在界面中添加远程方法。