• RMI JDK6比JDK5强的地方 - [自写]

    2008-01-03

    在我们的项目中,RMI应用比较多,RMI远程调用也比较多,我挺喜欢RMI这种RPC方式:)

    前几天在做项目的升级改造,测试的时候在RMI Server报出类似以下的异常:

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    .....
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)

    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)

    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)

    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

    at java.lang.Thread.run(Thread.java:619)
    ......
    at javaapplication3.RmiHelloClient.main(RmiHelloClient.java:28)

    当时很奇怪怎么会有 java.util.concurrent这个包中的类被用到,想了一下认为在JDK6中应该是用到了线程池,不过没有确认。

    今天和同事讨论了一会儿RMI方面的问题,弄得我对这个问题很好奇,想弄明白 了

     下载了jdk6和jdk5的源代码中,在6中使用了concurrent中的线程池来执行请求,而jdk5中还是每个请求由一个新的线程来完成请求。

    jdk6的RMI在这方面做得比jdk5要好,不过要是能支持“长连接“就更好了,我看源代码中的实现好像没有实现长连接,留待今后再学习。

     


    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我