免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
中國Java開發(fā)網 - 關于RMI的經驗總結(轉貼)

http://expert.csdn.net/Expert/topic/1808/1808981.xml?temp=.5741083

今天終于把一些關于RMI的頑固問題解決了,近來有很多人在問這方面的東東,所以總結出來一些經驗給大家共享。
但是在進入主題之前我先說些題外話。

上最近不知道怎么了,問個問題很少有人實實在在的回答,大家都是UP,UP,UP說些沒用的。我發(fā)的很多貼子甚至沒有什么人留言,其實都是一些平常的問題。感覺好象都是廢話。不知道怎么會形成這種風氣??當昨天liuyt1@163.com給我發(fā)來我急需的JOBOSS文檔的時候,我真的很感動,為什么真心肯幫忙的人就那么少呢?所以這個貼的分是給他的。其實分數又不能換錢,沒有實際價值,也只能算是表達一下我的感謝,意思意思。

今天,又看了一回JBUILDER關于RMI的幫助,終于解決了些重要的疑問。看過這陣子貼子的人應該都知道這段時間關于RMI有很多問題出現,我也看了那些貼子,有的問題沒有解決,有的“解決”了,但根本就沒有用正確的方法。以下是我的經驗(但是這不是RMI入門教程,沒有基礎的請暫時收藏,以后學RMI時相信可以給你些幫助)。這些東西過來人肯定知道,但是為什么他們從來都不告訴我們呢?是不愿,還是不屑呢?

首先要說的是最常見的一個問題,客戶端找不到XXX_stub.class文件。這個問題問的人最多(包括我自己以前也來問過)。在CSDN上,甚至于我看到的兩本(我就看過兩本)譯過來的中文書上提出的解決辦法,或潛在的解決方法就是在java的參數-classpath中加入XXX_stub.class文件相應路徑。確實,問題一下子解決了,但是我心里感覺十分不妥!有沒有人想過,對于一個客戶端,難道每個客戶端都要在本地有一個XXX_stub.class文件嗎?那么試想一個Applet,自己就是臨時從server上下載來的,難道它有那個可能在用戶本地機上“剛好”找到它要調用的RMI Server 的XXX_stub.class文件嗎?所以,XXX_stub.class文件的獲得也應該是動態(tài)的下載!應該用codebase參數,但是我用codebase參數還是不行(找不到XXX_stub.class文件),試了一個星期都沒有解決。(最后再說這個問題的解決)

第二是RMI Server運行時找不到XXX_stub.class文件。有些同志可能是一時大意沒有用rmic來編譯。但是很多人已經用rmic編譯生成了XXX_stub.class文件與骨架文件。但是運行RMI Server時還是找不到XXX_stub.class文件,為什么?其實這個時候,找不到XXX_stub.class文件的不是你的Server,而是rmiregistry程序。你的classpath里當然是有相應錄的,但是rmiregistry起動時的路徑里可沒有。但是,你先別著急把rmiregistry的參數里加上相應路徑,因為JBuilder里說千萬讓rmiregistry知道你的stub文件的路徑,因為這樣客戶端動態(tài)下載stub時會出問題(我還沒有證實過這一點的正確性)。解決辦法是在你起動RMI server時加codebase參數,如下:
java -Djava.rmi.server.codebase=http://YourServerName/YourPackagePathName/ packageName.serverClassName
而你的Web Server的YourServerName/YourPackagePathName/目錄下應該有一個與你的包同名的目錄,那個目錄下有相應stub文件。這個問題就圓滿解決了。

第三,不起作用的客戶端java.rmi.server.codebase。接著一個問題說,我去掉了客戶端classpath目錄里的含有stub文件的那一個目錄。加上了如下參數:
-Djava.rmi.server.codebase=http://YourServerName/YourPackagePathName/
但是出現錯誤:
java.lang.ClassNotFoundException: hellormi.GetMessageImpl_Stub (no security manager: RMI class loader disabled)

classNotFoundException的意思是找不到相應類,但是我確認了自已的參數沒有錯,而且Web Server也沒有任何問題。今天在看JBuilder自帶幫助時,忽然發(fā)現在客戶端例子里它竟然也寫了:System.setSecurityManager(new RMISecurityManager())。這在我的兩本書里都沒有看到,而且其中一本書上還明確地說,客戶端里不需要任何安全設置。我想了想才大夢初醒:你lookup的時候他當然不用生成安全管理器,但是當你要從server動態(tài)下載類的時候它就要用了!加上這一句之后還沒有完全OK。要象Server起動時那樣給一個java.security.policy屬性允許它做相應socket工作(否則會出安全性異常),之后客戶端就能自動從主機下載了stub文件了。

最后補充一點,可以通過編碼System.setProperty("java.rmi.server.codebase","http://YourServerName/YourPackagePathName/")來代替手工輸入屬性,但是一定要注意把它放在System.setSecurityManager(new RMISecurityManager())之前。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Dynamic code downloading using RMI
關于rmi的研究 - JBahamut - BlogJava
java?rmi?入門實例
RPC框架面試總結-RPC原理及實現
RMI小例子一枚
RMI網絡編程開發(fā)之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服