EJB原理学习_RMIC

EJB原理,有幸在 Q群上‘☆蓝蓝心情★’ 得以一教;
特在次郑重的道一声 谢谢了.大哥

在次我就分享给大家,本人语言组织能力有限, 说的不好可别怪我大哥啊。(呵呵)

EJB技术对 传输上进行封装,使程序员不需要关心太多网络问题 。服务器都基于统一javabean操作的
在这就是基于 rmic 命令,和 rmiregistry 端口 来实现的。
rmic 和 rmiregistry 这些都在%JAVA_HOME%/bin下可以找到。
下面我就用大哥给写的一段 没用EJB容器 的代码来和大家分享EJB原理:


1.rmic命令介绍:
引用:  http://www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/tooldocs/solaris/rmic.html
rmic 编译器根据编译后的 Java 类(含有远程对象实现)名,为远程对象生成 stub 和 skeleton(远程对象是指实现 java.rmi.Remote 接口的对象)。
rmic 命令中所给的类必须是经 javac 命令成功编译且是完全包限定的类。例如,按如下所示对类文件名 HelloImpl 运行 rmic


2.EJB组建(服务器端)
接口:
package  org.rmi.test;

import  java.rmi.Remote;
import  java.rmi.RemoteException;

public   interface  IHello  extends  Remote {
    
public  String sayHello(String name)  throws  RemoteException;
}

实现类:
package  org.rmi.test;

import  java.rmi.Naming;
import  java.rmi.RemoteException;
import  java.rmi.server.UnicastRemoteObject;
//取消显示指定的编译器警告!
//参考 : http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/SuppressWarnings.html
@SuppressWarnings(
" serial " )
public   class  Hello  extends  UnicastRemoteObject  implements  IHello {
    
public  Hello()  throws  RemoteException {
        
super ();
    }
    
    
public   void  rebind(String name) { 
        
try  {
            Naming.rebind(name,
this );
            System.out.println(
" Server is running " );
        } 
catch (Exception e) {
            e.printStackTrace();
        }
    }
    
public  String sayHello(String name)  throws  RemoteException {
         return   " Hello  " + name + "  This is processed by RMI " ;
    }

}

上面的继承 java.rmi.Remote 和可序列化的感觉是一样的;在网络中转成流格式后,便与传输。

3. jdk1.5编译和 rmic 编译 后
 1)javac .....
 2)rmic  rmic org.rmi.test.Hello(后得到 Hello_Stub.class)

4.服务器开启:
在项目根目录下加 rmi.policy
grant {
  Permission java.security.AllPermission 
"" , " connect,listen,accept " ;
} ;

后运行:
package  org.rmi.test;

import  java.rmi.RMISecurityManager;

public   class  Start {

    
public   static   void  main(String[] args) {
         try  {
            System.setSecurityManager(
new  RMISecurityManager());
            //这里还不太明白
            
new  Hello().rebind( " RMI/Mclaren " );
        } 
catch (Exception e) {
            e.printStackTrace();
        }
    }

}

5.开端口:
rmiregistry 1099  (开 端口)

客户端:(另台电脑也可以了)
import  java.rmi.Naming;
import  org.rmi.test.IHello;

public   final   class  Client {
    
public   static   void  main(String[] args) {
         try  {
            IHello hello 
=  (IHello)Naming.lookup( " rmi://localhost:1099/RMI/Mclaren " );
            System.out.println(hello.sayHello(
" Mclaren " ));
        } 
catch (Exception e) {
            e.printStackTrace();
        }
    }

}


结果是:
Hello Mclaren This is processed by RMI

你可能感兴趣的:(EJB原理学习_RMIC)