- 浏览: 151361 次
- 性别:
- 来自: 北京
最新评论
-
pandengzhegt:
好牛!正需要!谢谢了!
JPA 2.0 中的动态类型安全查询 -
yanlp:
万分的感谢。
仿google 的输入提示框 -
huangwenji6111:
可谓良师,在此拜谢!受益匪浅!
hibernate lazy -
jwx0925:
不错!mark!
hibernate对象状态 -
leftstick:
大有裨益,谢了!
hibernate lazy
异常一:
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
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
发表评论
-
java实现Tree
2012-07-10 09:59 876/****************************** ... -
Java正则表达式应用总结
2012-05-25 12:23 1096一、概述 正则表达式是Java处理字符串、文本的重要工具。 ... -
JdbcTemplate与事务
2012-05-17 17:42 1122JdbcTemplate与事务 上例中的JdbcTemplat ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-09 17:59 922最近的机器内存又爆满 ... -
jconsole远程监控Java进程
2012-05-07 11:44 1073JDK中的工具jconsole可以很好地监控Java进程及其运 ... -
spring集成quartz
2012-04-16 15:56 2218首先,让spring框架运转起来,可以参看一下:ht ... -
JMX RMI 访问
2011-09-02 10:46 4513RMI(Remote Method Invocation) R ... -
采用开发框架quartz调度管理Job
2011-07-11 10:03 19551.所需要的第三方包:quartz-1.5.2.jarcom ... -
java类型转换
2011-05-20 17:13 912string和int之间的转换? 字符串转换成数据 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2011-05-05 10:47 3778因工作需要在java和c/c++之间进行socket通信,而 ... -
线程安全总结(二)
2010-11-12 10:34 851站内很多人都问我,所谓线程的“工作内存”到底是个什么东西? ... -
java线程安全总结
2010-11-12 10:33 831java线程安全总结(二 ... -
ora-02289问题解决
2010-10-19 12:35 1639<id name="id" type ... -
JDBC的批处理操作三种方式 pstmt.addBatch();
2010-09-25 15:58 8716SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处 ... -
log4j输出多个自定义日志文件
2010-05-12 10:28 1515<转>http://hi.baidu.com/ ... -
spring任务调度
2010-04-28 09:48 1406概述 在JDK 1.3以后的版本中,Java通过java.ut ... -
JDK线程池的使用
2010-04-07 16:35 1454一、简介 线程池类为 j ... -
Java文件操作
2010-02-06 15:29 873本文汇集常用文件操作方法,包括文件的建立/检查与删除,目录的建 ... -
[JMX一步步来] 6、Model Bean
2009-12-21 11:46 1213在上一节是用apache的commons-modeler来 ... -
[JMX一步步来] 5、用Apache的commons-modeler来辅助开发JMX
2009-12-21 11:45 1079一、前言 每一个MBean都要有一个接口,比如前面的Hello ...
相关推荐
通过这种方式,Spring RMI简化了传统Java RMI的许多复杂性,包括异常处理、连接管理以及服务发现等。此外,由于Spring的IoC特性,服务端和客户端的组件可以轻松地替换或扩展,提高了系统的灵活性和可维护性。 总的...
- **异常处理**:接口中的方法抛出的异常通常是`RemoteException`或其子类,这是RMI框架处理网络通信异常的标准方式。例如,`LoadFile`接口展示了如何定义上传和下载文件的方法,并声明了可能抛出的`...
这些方法必须声明为`remote`,并且可能会抛出`java.rmi.RemoteException`或其他网络相关的异常。 2. **远程实现(Remote Implementation)**:实现了远程接口的Java类,实际提供了远程方法的实现。这个类通常通过...
- **案例分析**:通过实际项目或示例,展示如何在Java应用中集成和使用RMI。 学习和掌握RMI,不仅可以提升你的Java编程能力,更是在分布式系统和企业级应用开发中打开新视野的关键。通过实践和理解上述知识点,你将...
通过分析和运行这个Demo,开发者可以学习到RMI的生命周期管理、Ehcache的缓存机制,以及如何将两者结合起来,实现高效、可扩展的分布式系统。同时,这也会涉及到序列化、网络通信、多线程等基础知识,对于提升Java...
这个类需要继承`java.rmi.Remote`,并且任何可能抛出的异常都必须是`java.rmi.RemoteException`或其子类。 ```java public class MyRemoteImpl extends UnicastRemoteObject implements MyRemoteInterface { ...
**RMI实例分析:** 提供的`JAVA_RMI_实例.doc`文档可能包含了一个简单的RMI应用实例,通常包括以下部分: 1. **创建远程接口:**定义一个名为`MyRemoteInterface`的接口,声明如`sayHello()`等远程方法。 2. **...
如果工具成功触发了服务器的异常或者执行了预期之外的操作,可能存在漏洞。 为了增强安全性,开发者应遵循以下最佳实践: - 对所有反序列化的输入进行严格的验证和过滤。 - 使用安全的序列化库,如使用Google的...
2. RMI Lite简化点:分析源代码,找出与标准RMI相比,rmi-lite做了哪些简化和优化。 3. Ant构建工具:熟悉Ant的配置文件结构,学习如何编写和运行Ant任务。 4. 测试实践:通过阅读和运行测试代码,学习单元测试的...
6. **异常处理**:RMI调用可能会抛出`RemoteException`和其他相关异常,因此在客户端和服务端都需要适当的异常处理机制。 7. **运行环境配置**:由于RMI是基于Java的,因此需要确保JRE(Java Runtime Environment)...
如果这个文件包含源代码,那么分析这些代码可以帮助深入理解RMI的工作原理和用法。例如,可能有服务器启动类、客户端调用类、远程接口定义、以及注册表操作等示例。通过学习这些代码,开发者可以更好地掌握如何在...
通过分析和学习这个源码,开发者可以了解如何在Spring环境中设置RMI服务,如何处理异常,以及如何在客户端使用代理进行调用。这对于提升分布式系统的开发能力,理解服务间的通信机制,以及掌握Spring和RMI的整合应用...
开发者可以通过阅读和分析这些代码来学习RMI的使用和聊天应用的构建。 此外,理解RMI的性能和限制也很重要。虽然RMI简化了分布式编程,但其性能受到网络延迟、序列化开销等因素影响。对于大型复杂系统,可能需要...
6. **异常处理**:由于网络通信的不可靠性,RMI应用需要妥善处理各种网络异常,如ConnectException、IOException等。 7. **安全性**:虽然RMI提供了基础的认证和加密机制,但实际应用中可能需要额外的安全措施,如...
Java Remote Method ...通过分析和理解这个项目的代码,你可以深入理解RMI的工作原理,以及如何在实际应用中使用RMI技术来构建分布式系统。同时,这也是对多线程、网络编程和异常处理等Java核心概念的实践应用。
学生成绩管理系统主要负责学生的成绩录入、查询、分析等功能。通过RMI,我们可以将这些功能分布在不同的服务器上,提高系统的可扩展性和容错性。GUI(Graphical User Interface)的引入使得用户可以通过直观的界面与...
6. **异常处理**:RMI调用可能会遇到各种异常,如`java.rmi.RemoteException`,这是所有RMI相关的异常的基类,还有`NotBoundException`(当试图查找未注册的对象时抛出)等。 7. **安全性**:虽然RMI提供了方便的...
接口中的方法声明抛出java.rmi.RemoteException,这是所有RMI特定异常的超类。 2. **远程实现(Remote Implementation)**:实现了远程接口的具体类,包含了远程方法的实现。这个类需要被Java的序列化机制支持,...
通过分析和运行这两个示例,开发者可以深入理解Spring框架与RMI的整合,以及如何在实际项目中应用这一技术。 总结来说,Spring中的RMI集成提供了一种简单且灵活的方式来实现分布式系统中的跨JVM通信。通过学习这个...
- **异常处理**:RMI调用可能会抛出`RemoteException`和其他与网络通信相关的异常,需要适当地捕获和处理。 - **安全性**:由于涉及到网络通信,因此要考虑安全性问题,例如使用SSL/TLS加密通信,或者对远程对象...