仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1109|回复: 18
打印 上一主题 下一主题

[学习教程] 来看远程接口的实行

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:34:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。
服务器必需包括一个扩大了UnicastRemoteObject的类,并完成远程接口。这个类也能够含有附加的办法,但客户只能利用远程接口中的办法。这是明显的,由于客户失掉的只是指向接口的一个句柄,而非完成它的谁人类。
必需为远程对象明白界说构建器,即便只筹办界说一个默许构建器,用它挪用基本类构建器。必需把它明白地编写出来,由于它必需“掷”出RemoteException背例。
上面列出远程接口PerfectTime的实行历程:
  1. //:PerfectTime.java
  2. //TheimplementationofthePerfectTime
  3. //remoteobject
  4. packagec15.ptime;
  5. importjava.rmi.*;
  6. importjava.rmi.server.*;
  7. importjava.rmi.registry.*;
  8. importjava.net.*;
  9. publicclassPerfectTime
  10. extendsUnicastRemoteObject
  11. implementsPerfectTimeI{
  12. //Implementationoftheinterface:
  13. publiclonggetPerfectTime()
  14. throwsRemoteException{
  15. returnSystem.currentTimeMillis();
  16. }
  17. //Mustimplementconstructortothrow
  18. //RemoteException:
  19. publicPerfectTime()throwsRemoteException{
  20. //super();//Calledautomatically
  21. }
  22. //RegistrationforRMIserving:
  23. publicstaticvoidmain(String[]args){
  24. System.setSecurityManager(
  25. newRMISecurityManager());
  26. try{
  27. PerfectTimept=newPerfectTime();
  28. Naming.bind(
  29. "//colossus:2005/PerfectTime",pt);
  30. System.out.println("Readytodotime");
  31. }catch(Exceptione){
  32. e.printStackTrace();
  33. }
  34. }
  35. }///:~
复制代码
在这里,main()把持着设置服务器的全体细节。保留RMI对象时,必需在程序的某个中央接纳下述操纵:
(1)创立和安装一个平安办理器,令其撑持RMI。作为Java刊行包的一部分,合用于RMI独一一个是RMISecurityManager。
(2)创立远程对象的一个或多个实例。在这里,人人可看到创立的是PerfectTime对象。
(3)向RMI远程对象注册表注册最少一个远程对象。一个远程对象具有的办法可天生指向其他远程对象的句柄。如许一来,客户只需到注册内外会见一次,失掉第一个远程对象便可。

1.设置注册表
在这儿,人人可看到对静态办法Naming.bind()的一个挪用。但是,这个挪用请求注册表作为盘算机上的一个自力历程运转。注册表服务器的名字是rmiregistry。在32位Windows情况中,可以使用:
startrmiregistry
令其在背景运转。在Unix中,利用:
rmiregistry&
和很多收集程序一样,rmiregistry位于呆板启动它地点的某个IP地点处,但它也必需监督一个端口。假如象下面那样挪用rmiregistry,不利用参数,注册表的端口就会默许为1099。若但愿它位于其他某个端口,只需在命令行增加一个参数,指定谁人端口编号便可。对这个例子来讲,端口将位于2005,以是rmiregistry应当象上面如许启动(关于32位Windows):
startrmiregistry2005
关于Unix,则利用下述命令:
rmiregistry2005&
与端口有关的信息必需传送给bind()命令,同时传送的另有注册表地点的那台呆板的IP地点。但倘使我们想在当地测试RMI程序,就象本章的收集程序一向测试的那样,如许做就会带来成绩。在JDK1.1.1版本中,存在着下述两方面的成绩(正文⑦):
(1)localhost不克不及随RMI事情。以是为了在独自一台呆板上完成对RMI的测试,必需供应呆板的名字。为了在32位Windows情况中查询拜访本人呆板的名字,可进进把持面板,选择“收集”,选择“标识”卡片,个中列出了盘算机的名字。就我本人的情形来讲,我的呆板叫作“Colossus”(由于我用几个年夜容量的硬盘保留各类分歧的开辟体系——Clossus是“伟人”的意义)。仿佛年夜写情势会被疏忽。
(2)除非盘算机有一个举动的TCP/IP毗连,不然RMI不克不及事情,即便一切组件都只必要在当地呆板里相互通讯。这意味着在试图运转程序之前,必需毗连到本人的ISP(因特网服务供应者),不然会失掉一些寄义含混的背例动静。

⑦:为找出这些信息,我不知毁伤了几个脑细胞。

思索到这些要素,bind()命令酿成了上面这个模样:
Naming.bind("//colossus:2005/PerfectTime",pt);
若利用默许端口1099,就没有需要指定一个端口,以是可使用:
Naming.bind("//colossus/PerfectTime",pt);
在JDK将来的版本中(1.1以后),一旦更正了localhost的成绩,就可以一般地举行当地测试,往失落IP地点,只利用标识符:
Naming.bind("PerfectTime",pt);
服务名是恣意的;它在这里恰好为PerfectTime,和类名一样,但你能够依据情形恣意修正。最主要的是确保它在注册内外是个举世无双的名字,以便客户一般地猎取远程对象。若这个名字已在注册内外了,就会失掉一个AlreadyBoundException背例。为避免这个成绩,可思索保持利用rebind(),保持bind()。这是因为rebind()要末会增加一个新条目,要末将同名的条目交换失落。
只管main()加入,我们的对象已创立并注册,以是会由注册表一向坚持举动形态,期待客户抵达并收回对它的哀求。只需rmiregistry处于运转形态,并且我们没无为名字挪用Naming.unbind()办法,对象就一定位于谁人中央。思索到这个缘故原由,在我们计划本人的代码时,必要先封闭rmiregistry,并在编译远程对象的一个新版本时从头启动它。
其实不必定要将rmiregistry作为一个内部历程启动。若事前晓得本人的是请求用以注册表的独一一个使用,便可在程序外部启动它,利用下述代码:
LocateRegistry.createRegistry(2005);
和后面一样,2005代表我们在这个例子里选用的端标语。这等价于在命令行实行rmiregistry2005。但在计划RMI代码时,这类做法常常显得加倍便利,由于它作废了启动和中断注册表所需的分外步骤。一旦实行完这个代码,便可象之前一样利用Naming举行“绑定”——bind()。
在性能方面,在windows平台下,.net网页编程可能是占强项,要是把.net网页编程放在sun开发的操作系统上去运行呢?根本就运行不了,.net网页编程对其它操作系统的支持也很弱,性能也可能比不上java。
admin 该用户已被删除
18#
发表于 2015-6-10 01:15:08 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
因胸联盟 该用户已被删除
17#
发表于 2015-5-12 08:23:38 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
小魔女 该用户已被删除
16#
发表于 2015-5-10 23:42:31 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
爱飞 该用户已被删除
15#
发表于 2015-5-10 00:12:43 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
飘灵儿 该用户已被删除
14#
发表于 2015-4-26 21:11:56 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
小妖女 该用户已被删除
13#
发表于 2015-4-22 05:24:58 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
分手快乐 该用户已被删除
12#
发表于 2015-4-20 15:36:40 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
简单生活 该用户已被删除
11#
发表于 2015-3-24 19:45:20 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
山那边是海 该用户已被删除
10#
发表于 2015-3-19 08:49:12 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
再现理想 该用户已被删除
9#
发表于 2015-3-15 14:54:19 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
若相依 该用户已被删除
8#
发表于 2015-3-11 22:04:24 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-5 01:17:19 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
只想知道 该用户已被删除
6#
发表于 2015-2-16 07:17:16 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
再见西城 该用户已被删除
5#
发表于 2015-2-9 22:40:23 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-6 10:23:18 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
板凳
发表于 2015-2-3 06:05:26 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
莫相离 该用户已被删除
沙发
发表于 2015-2-1 17:10:46 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
谁可相欹 该用户已被删除
楼主
发表于 2015-1-24 15:07:12 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表