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組建(服務器端)
接口:
實現類:
上面的繼承 java.rmi.Remote 和可序列化的感覺是一樣的;在網絡中轉成流格式后,便與傳輸。
3. jdk1.5編譯和 rmic 編譯后
?1)javac .....
?2)rmic? rmic org.rmi.test.Hello(后得到 Hello_Stub.class)
4.服務器開啟:
在項目根目錄下加 rmi.policy
后運行:
5.開端口:
rmiregistry 1099? (開 端口)
客戶端:(另臺電腦也可以了)
結果是:
Hello Mclaren This is processed by RMI
特在次鄭重的道一聲 謝謝了.大哥
在次我就分享給大家,本人語言組織能力有限,說的不好可別怪我大哥啊。(呵呵)
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;
}
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";
????}
}
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";
};
??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();
????????}
????}
}
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();
????????}
????}
}
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