初碰J2EE:RMI灰头灰脑篇

原创 2004年06月24日 14:29:00

RMI概念:为通过网络执行其他机器上的代码,传统的方法不仅难以学习,而且易出错。解决这个问题的最佳方法是:某些对象正好位于另一台机器,我们可以发送一条消息,并获得返回结果,就像位于自己的本机器一样。java远程方法调用(rmi)特性使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使java编程人员能够在网络环境中分布操作。

       接触java有一段时间了,平时就只是写点jsp+servlet+bean.某天突然心血来潮,决定去碰碰j2ee中的其他技术,先是javamail,这个简单(嘿嘿,其实就只是写几个例子而已),没碰到什么让我头疼的问题.接下来EJB,对实现EJB需要两个接口一个类的做法感到非常的厌烦(不过好像听说EJB3.0就不需要了,还接触过,有机会看看资料).然后就是RMI了.照着书上依样画葫芦,代码如下:

package rmi;
import java.rmi.*;
public interface PerfectTimeI extends Remote {
  long getPerfectTime()throws RemoteException;
}

package rmi;
import java.net.*;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {
   public PerfectTime()throws RemoteException{
      super();
 }
  public long getPerfectTime()throws RemoteException{
    return System.currentTimeMillis();
   }
   public static void main(String[] args)throws Exception{
   System.setSecurityManager(new RMISecurityManager());
    java.rmi.registry.LocateRegistry.createRegistry(2005);
    try{
          PerfectTime pt=new PerfectTime();
          Naming.rebind("//localhost:2005/PerfectTime",pt);
          System.out.println("Ready to do Time");
     }catch(Exception e){
         e.printStackTrace();
    }
  }
}

package rmi;
import java.rmi.*;
import java.rmi.*;

public class DisplayPerfectTime {
   public DisplayPerfectTime(){
      super();
  }
  public static void main(String[] args){
    System.setSecurityManager(new RMISecurityManager());
    try{
         PerfectTimeI t=(PerfectTimeI)Naming.lookup("//localhost:2005/PerfectTime");
         for(int i=0;i<10;i++){
            System.out.println("PerfectTime:"+t.getPerfectTime());
      }
    }catch(Exception e){
       e.printStackTrace();
   }
 }
}

然后运行在JBX里点击run??? 结果$#$%#!!%$#
java.rmi.StubNotFoundException: Stub class not found: rmi.PerfectTime_Stub;
晕,遇到第一个问题.忘记生成Stub和Skel了.在JBX里找了半天也没找到可以生成这两个文件的命令或者选项......郁闷!!看来只会回到原始社会用命令行模式了.
运行cmd.exe
d:/rmi/classes>rmic PerfectTime? 回车
error:Class test.PerfectTime not found.
1 error

...........
MyGod.我都看见这个class了你这个RMIC竟然没看见,难道比我近视.
记起刚接触java的时候执行头一个class的时候也发生过这样的问题,当初是怎么解决的呢,
@_@晕,原来还要加classpath.赶紧把d:/rmi/classes/加进了classpath中(中间要感谢水人对我的提醒).在运行cmd.exe
d:/rmi/classes>rmic PerfectTime? 回车
d:/rmi/classes>

回到rmi目录下一看.哈哈真的生成了PerfectTime_Skel.class和PerfectTime_Stub.class这两个文件了.Y

好,回到JBX继续run我的程序.这次抛出了
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:2005 connect,resolve)
好像没有权限去执行这个服务端程序.???!!!我自己的机器我执行程序都要权限吗!TMD.心里骂了无数边这个破东西.没办法上网查查到底是什么问题.

结果找了一些资料都说要配置安全策略.但都说不清不楚.还说调用的时候要加参数之类的.逐一试过.都不行.头有点麻了.从我学JAVA以来还没有在一个例子上被折腾这么长时间的.回头又看了看例子的源码.发现有一句代码:System.setSecurityManager(new RMISecurityManager());服务端和客户端都用了这样的一句.感觉这句话可要可不要,心里想着注释掉看看.继续run我的程序..........
C:/bea/jdk141_05/bin/javaw -classpath "D:/rmi/classes;C:/bea/weblogic81.....
Ready to do Time

耶!!!!竟然运行成功了.接着把客户端的哪句话也注释掉了.同样,也运行成功了.
然后把刚才添加的几个安全策略文件也删了,在run.结果还是成功!!

虽然运行成功了,但又有新的问题出现了,为什么把这句话去掉后就能运行了.
上google.搜索System.setSecurityManager(new RMISecurityManager());结果找到一篇文章上说:
为了防止可能发生的任何安全上的疏忽,在程序中需要透过System.setSecurityManager(new RMISecurityManager())来设定系统安全相关的策略.晕,弄了半天还是安全策略没有配好,我不是真的运行成功了,我只是绕开了安全策略的限制而已.
相关文章的地址:http://my.so-net.net.tw/idealist/Java/RMI.html
上面还有安全策略的详细配置..(这个等我慢慢琢磨,明白了再写出来.嘿嘿.今天就偷偷懒吧)
待续.....TO BE CONTINUE

opencv2.4.8在win7下无法打开摄像头,或者摄像头灰色图像的解决方案

opencv2.4.8 在win7下无法打开摄像头,或者摄像头灰色图像,我折腾了一晚上还没解决,其实很奇怪,这个是官方的例子,为什么会跑不出来呢?   后来看了下程序的逻辑,发现在打开摄像头的时候,...
  • eastlhu
  • eastlhu
  • 2014年01月28日 12:06
  • 4222

Opencv调取图片与摄像头(灰屏问题解决)

笔者用的是VS2010 + OpenCV3.0beta。实现了本地图像显示与摄像头图像显示。中间遇到了调用内置摄像头灰屏的问题。希望对各位有参考价值。...
  • bamboocan
  • bamboocan
  • 2017年04月24日 11:17
  • 1647

实现类似QQ离线用户头像彩色变灰色的效果

头像由彩色变灰色有两种实现方式: 方法1把图片彩色图转换为纯黑白二色: /** * 将彩色图转换为纯黑白二色 * * @param 位图 * @return 返回转换好的位图 ...
  • xiechengfa
  • xiechengfa
  • 2015年06月09日 22:14
  • 2751

J2EE规范——RMI与EJB

偶然在网上看到了EJB和RMI的关系,和大家分享一下其中的奥秘 一、RMI         RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远...
  • tr1912
  • tr1912
  • 2017年01月14日 21:11
  • 512

J2EE核心技术--RMI和JNDI

(接上篇)               RMI:既Remote Method Invocation(远程方法调用),它提供对远程分布式对象的透明访问,因为J2EE是分布式的,因此客户机不再同一个JVM...
  • StubbornPotatoes
  • StubbornPotatoes
  • 2012年01月03日 20:50
  • 2930

【J2EE浅析】——RMI

RMI(Remote Method Invoke)-远程调用方法,是java的一组用户开发分布式应用程序的API。...
  • u010924897
  • u010924897
  • 2015年05月13日 22:08
  • 720

[J2EE规范]RMI简单实例

RMI是实现EJB的基础,通过RMI,J2EE将EJB组件创建为远程对象。RMI是远程过程调用(RPC)的一种面向对象实现(Java实现)。RMI底层是通过socket通信和对象序列化技术来实现的。...
  • u013036688
  • u013036688
  • 2017年06月29日 18:05
  • 621

【J2EE】企业级项目开发总结--JMS点对点模型篇

今天的Demo演示了点对点模型中消息发送者与消息消费者在传递消息时的两种方式,一种是不管消息队列中有没有消息,消费者一直在取;一种是监听消息队列,当有消息时才取.   首先开启服务,我这里用的是Act...
  • zhuanzhe117
  • zhuanzhe117
  • 2015年09月23日 17:29
  • 1448

J2EE学习篇之--Struts1详解

今天来看一下Struts1的相关知识,其实Struts现在是出名的,每个Web开发者都会知道的,也是现在比较流行的框架,下面俩看一下我们为什么要用Struts框架呢? 1.建立在mvc这种工人的好的模...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年05月23日 09:15
  • 25983

J2EE学习篇之--JQuery技术详解

前面我们讲解了的J2EE的技术都是服务端的技术,下面我们来看一下前端的一些开发技术,这一篇我们来看一下jQuery技术 简介: jQuery由美国人John Resig创建,至今已吸引了来自世界各...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年06月18日 11:35
  • 11469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初碰J2EE:RMI灰头灰脑篇
举报原因:
原因补充:

(最多只允许输入30个字)