Posted on 2007-12-05 15:39
G_G 閱讀(1375)
評(píng)論(1) 編輯 收藏 所屬分類:
EJB
EJB原理,有幸在 Q群上‘☆藍(lán)藍(lán)心情★’ 得以一教;
特在次鄭重的道一聲
謝謝了.大哥
在次我就分享給大家,本人語(yǔ)言組織能力有限,說(shuō)的不好可別怪我大哥啊。(呵呵)
EJB技術(shù)對(duì)傳輸上進(jìn)行封裝,使程序員不需要關(guān)心太多網(wǎng)絡(luò)問(wèn)題。服務(wù)器都基于統(tǒng)一javabean操作的
在這就是基于 rmic 命令,和 rmiregistry 端口 來(lái)實(shí)現(xiàn)的。
rmic 和 rmiregistry 這些都在%JAVA_HOME%/bin下可以找到。
下面我就用大哥給寫的一段 沒(méi)用EJB容器 的代碼來(lái)和大家分享EJB原理:
1.rmic命令介紹:
引用:? http://www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/tooldocs/solaris/rmic.html
rmic 編譯器根據(jù)編譯后的 Java 類(含有遠(yuǎn)程對(duì)象實(shí)現(xiàn))名,為遠(yuǎn)程對(duì)象生成 stub 和 skeleton(遠(yuǎn)程對(duì)象是指實(shí)現(xiàn)
java.rmi.Remote 接口的對(duì)象)。
在
rmic 命令中所給的類必須是經(jīng)
javac 命令成功編譯且是完全包限定的類。例如,按如下所示對(duì)類文件名
HelloImpl 運(yùn)行
rmic:
2.EJB組建(服務(wù)器端)接口:
package?org.rmi.test;
import?java.rmi.Remote;
import?java.rmi.RemoteException;
public?interface?IHello?extends?Remote?{
????public?String?sayHello(String?name)?throws?RemoteException;
}
實(shí)現(xiàn)類:
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 和可序列化的感覺(jué)是一樣的;在網(wǎng)絡(luò)中轉(zhuǎn)成流格式后,便與傳輸。
3. jdk1.5編譯和 rmic 編譯后
?1)javac .....
?2)rmic? rmic org.rmi.test.Hello(后得到 Hello_Stub.class)
4.服務(wù)器開(kāi)啟:
在項(xiàng)目根目錄下加 rmi.policy
grant?{
??Permission?java.security.AllPermission?"","connect,listen,accept";
};
后運(yùn)行:
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.開(kāi)端口:
rmiregistry 1099? (開(kāi) 端口)
客戶端:(另臺(tái)電腦也可以了)
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();
????????}
????}
}
結(jié)果是:
Hello Mclaren This is processed by RMI