`
zhengxuezhou
  • 浏览: 151352 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RMI异常分析

    博客分类:
  • j2se
阅读更多
异常一:

java.rmi.ServerException: RemoteException occurred in server thread; nested exce
ption is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
        java.lang.ClassNotFoundException: RMITest.RemoteIMP_Stub
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396
)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)

        .......................

解决:

      在执行 start rmiregistry  命令前必须确保 RMITest.RemoteIMP_Stub.class(注意包名) 包含在了   CLASSPATH  配置的路径中

       在执行 start rmiregistry  命令前执行  set CLASSPATH=%CLASSPATH%;D:\J2EETest\testjava\src\;



异常二



1> 起初启动 rmiregistry 时报告Warning;

C:\> rmigistry

Warning: JIT compiler "symcjit" not found. Will use interpreter.

原因:

因为用Ghost还原系统后忘记了将JDK的bin路径设置到系统path环境变量中, 故找不到所需程序而发出警告.

其实在这里使用的是Oracle的 rmiregistry.exe 程序, 在以下的问题中你会发现其他与 rmiregistry.exe 相关

的错误.

解决:

将JDK的bin目录添加到 系统 path 变量中

2> 启动服务器端时报告错误:

错误一:

C:\serv> java -Djava.security.policy=file:.\RMIpolicy1.policy -Djava.rmi.server.codebase=file:.\ UpperImpl

Result errors is:

java.rmi.ServerException: Server RemoteException; nested exception is:

java.rmi.UnmarshalException: error unmarshalling arguments; nested excepti

on is:

......

原因:

Oracle9i把自己的bin路径添加到了系统path的最前端, 因而可以找到 Oracle 的 rmiregistry.exe,

而不是JDK的 rmiregistry.exe; 因而会执行错误,它和JDK的比较如下:

oracle的rmiregistry,大小为:6144字节

jdk1.4的rmiregistry,大小为:28775 字节

解决:

将所有与 Oracle 相关的 path 变量 移动到 path 变量的末尾, 将 JDK的bin路径移动到 path 变量的最前端

(警告: 未测试这样作对 Oracle 系统会带来什么样的影响)

错误二:

C:\serv> java -Djava.security.policy=file:.\RMIpolicy1.policy -Djava.rmi.server.codebase=file:.\ UpperImpl

RMIserver erroraccess denied (java.net.SocketPermission 127.0.0.1:1099 conne

esolve)

java.security.AccessControlException: access denied (java.net.SocketPermissi

27.0.0.1:1099 connect,resolve)

......

原因:

没有设置 classpath, 且文件 RMIpolicy1.policy 的内容不对

原内容为:

grant{

    permission java.security.ALLPermission;

}

这样并不使我得程序运行成功

解决:

更改 RMIpolicy1.policy 内容为:

grant {

permission java.net.SocketPermission "*:1024-65535", "accept,connect,listen,resolve"; //(1.1)

permission java.net.SocketPermission "*:80", "accept,connect,listen,resolve";  //(1.2)

permission java.security.ALLPermission;

};

或者配置你的$JRE_PATH/lib/security/java.policy

其中加入如下两行:

permission java.net.SocketPermission "*:1024-65535", "connect,accept";

permission java.net.SocketPermission "*:80", "connect";

(如果你按照第二种方法改动的话, 恐怕不会遇到下面的错误, 仅仅是猜测而已)

3> 启动客户机时有错误:

C:\client> java UpperClient

RMI exception : access denied (java.net.SocketPermission 127.0.0.1:1099 connect,

resolve)

java.security.AccessControlException: access denied (java.net.SocketPermission 1

27.0.0.1:1099 connect,resolve)

....

原因:

UpperClient.class并不是 applet , 而是 application, 又因为 RMI 有安全限制, 所以需要在客户端

使用 policy 策略文件.

解决:

将服务器目录下的 RMIpolicy1.policy 文件拷贝到 客户端目录并使用如下命令:

C:\client> java -Djava.security.policy=file:.\RMIpolicy1.policy UpperClient

btpka3@163.com

2006-5-16

资料参考:

http://www.itpub.net/142217.html

配置你的$JRE_PATH/lib/security/java.policy

其中加入如下两行:

permission java.net.SocketPermission "*:1024-65535", "connect,accept";

permission java.net.SocketPermission "*:80", "connect";

然后你再试试看,ok?

http://202.102.240.73/java/javaweb/linuxjava/cjdk1_2-doc-zh/jdk1.2/zh/docs/guide/rmi/getstart.doc.html

注册服务程序的缺省运行端口为 1099。要在其它端口上启动注册服务程序,可利用命令行指定端口号。

例如,要在 Windows NT 系统上从端口 2001 启动注册服务程序:

start rmiregistry 2001

如果注册服务程序是在缺省端口以外的端口运行,则需要在名称中指定端口号。当调用注册服务程序时,

该名称将传给 java.rmi.Naming 类基于 URL 的方法。例如在 Hello World 示例中,如果注册服务

程序在端口 2001 上运行,则将 HelloServer 的 URL 绑定到远程对象引用所需的调用为:

Naming.rebind("//myhost:2001/HelloServer", obj);

http://ehot.blogdriver.com/ehot/455591.html

因为rmi有安全限制,所以在客户端必须建立一个策略文件

http://www.javaworld.com.tw/jute/post/print?bid=5&id=23374
分享到:
评论

相关推荐

    spring rmi 源码

    通过这种方式,Spring RMI简化了传统Java RMI的许多复杂性,包括异常处理、连接管理以及服务发现等。此外,由于Spring的IoC特性,服务端和客户端的组件可以轻松地替换或扩展,提高了系统的灵活性和可维护性。 总的...

    一个相当经典的RMI实例源代码及详细说明

    - **异常处理**:接口中的方法抛出的异常通常是`RemoteException`或其子类,这是RMI框架处理网络通信异常的标准方式。例如,`LoadFile`接口展示了如何定义上传和下载文件的方法,并声明了可能抛出的`...

    RMI

    这些方法必须声明为`remote`,并且可能会抛出`java.rmi.RemoteException`或其他网络相关的异常。 2. **远程实现(Remote Implementation)**:实现了远程接口的Java类,实际提供了远程方法的实现。这个类通常通过...

    精通RMI程序代码

    - **案例分析**:通过实际项目或示例,展示如何在Java应用中集成和使用RMI。 学习和掌握RMI,不仅可以提升你的Java编程能力,更是在分布式系统和企业级应用开发中打开新视野的关键。通过实践和理解上述知识点,你将...

    RMI+EHCACHE Demo

    通过分析和运行这个Demo,开发者可以学习到RMI的生命周期管理、Ehcache的缓存机制,以及如何将两者结合起来,实现高效、可扩展的分布式系统。同时,这也会涉及到序列化、网络通信、多线程等基础知识,对于提升Java...

    RMI例子

    这个类需要继承`java.rmi.Remote`,并且任何可能抛出的异常都必须是`java.rmi.RemoteException`或其子类。 ```java public class MyRemoteImpl extends UnicastRemoteObject implements MyRemoteInterface { ...

    RMI 零基础入门与实例

    **RMI实例分析:** 提供的`JAVA_RMI_实例.doc`文档可能包含了一个简单的RMI应用实例,通常包括以下部分: 1. **创建远程接口:**定义一个名为`MyRemoteInterface`的接口,声明如`sayHello()`等远程方法。 2. **...

    javaRMI反序列化漏洞验证工具

    如果工具成功触发了服务器的异常或者执行了预期之外的操作,可能存在漏洞。 为了增强安全性,开发者应遵循以下最佳实践: - 对所有反序列化的输入进行严格的验证和过滤。 - 使用安全的序列化库,如使用Google的...

    rmi-lite 1.0

    2. RMI Lite简化点:分析源代码,找出与标准RMI相比,rmi-lite做了哪些简化和优化。 3. Ant构建工具:熟悉Ant的配置文件结构,学习如何编写和运行Ant任务。 4. 测试实践:通过阅读和运行测试代码,学习单元测试的...

    JAVA RMI测试代码

    6. **异常处理**:RMI调用可能会抛出`RemoteException`和其他相关异常,因此在客户端和服务端都需要适当的异常处理机制。 7. **运行环境配置**:由于RMI是基于Java的,因此需要确保JRE(Java Runtime Environment)...

    java-rmi.zip_RMI java_rmi

    如果这个文件包含源代码,那么分析这些代码可以帮助深入理解RMI的工作原理和用法。例如,可能有服务器启动类、客户端调用类、远程接口定义、以及注册表操作等示例。通过学习这些代码,开发者可以更好地掌握如何在...

    spring和RMI分布式整合源码

    通过分析和学习这个源码,开发者可以了解如何在Spring环境中设置RMI服务,如何处理异常,以及如何在客户端使用代理进行调用。这对于提升分布式系统的开发能力,理解服务间的通信机制,以及掌握Spring和RMI的整合应用...

    RMI.rar_chat rmi_java rmi chat_rmi _rmi 聊天

    开发者可以通过阅读和分析这些代码来学习RMI的使用和聊天应用的构建。 此外,理解RMI的性能和限制也很重要。虽然RMI简化了分布式编程,但其性能受到网络延迟、序列化开销等因素影响。对于大型复杂系统,可能需要...

    RMI聊天室-Java实现

    6. **异常处理**:由于网络通信的不可靠性,RMI应用需要妥善处理各种网络异常,如ConnectException、IOException等。 7. **安全性**:虽然RMI提供了基础的认证和加密机制,但实际应用中可能需要额外的安全措施,如...

    RMI.rar_gui with rmi in ja_rmi _rmi gui_simple rmi with GUI

    Java Remote Method ...通过分析和理解这个项目的代码,你可以深入理解RMI的工作原理,以及如何在实际应用中使用RMI技术来构建分布式系统。同时,这也是对多线程、网络编程和异常处理等Java核心概念的实践应用。

    分布式Java RMI实现的学生成绩管理系统

    学生成绩管理系统主要负责学生的成绩录入、查询、分析等功能。通过RMI,我们可以将这些功能分布在不同的服务器上,提高系统的可扩展性和容错性。GUI(Graphical User Interface)的引入使得用户可以通过直观的界面与...

    RMI协议的应用与研究

    6. **异常处理**:RMI调用可能会遇到各种异常,如`java.rmi.RemoteException`,这是所有RMI相关的异常的基类,还有`NotBoundException`(当试图查找未注册的对象时抛出)等。 7. **安全性**:虽然RMI提供了方便的...

    Java RMI 远程方法调用

    接口中的方法声明抛出java.rmi.RemoteException,这是所有RMI特定异常的超类。 2. **远程实现(Remote Implementation)**:实现了远程接口的具体类,包含了远程方法的实现。这个类需要被Java的序列化机制支持,...

    如何在Spring框架中使用RMI技术.zip

    通过分析和运行这两个示例,开发者可以深入理解Spring框架与RMI的整合,以及如何在实际项目中应用这一技术。 总结来说,Spring中的RMI集成提供了一种简单且灵活的方式来实现分布式系统中的跨JVM通信。通过学习这个...

    Java RMI 可运行实例

    - **异常处理**:RMI调用可能会抛出`RemoteException`和其他与网络通信相关的异常,需要适当地捕获和处理。 - **安全性**:由于涉及到网络通信,因此要考虑安全性问题,例如使用SSL/TLS加密通信,或者对远程对象...

Global site tag (gtag.js) - Google Analytics