Posted on 2007-12-05 15:39
G_G 阅读(1371)
评论(1) 编辑 收藏 所属分类:
EJB
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