仓酷云

标题: 来看一个例子(CORBA) [打印本页]

作者: 冷月葬花魂    时间: 2015-1-18 11:34
标题: 来看一个例子(CORBA)
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。
这儿显现的代码大概其实不细致,由于分歧的ORB有分歧的办法来会见CORBA服务,以是不管甚么例子都要取决于详细的厂商(下例利用了JavaIDL,这是Sun公司的一个收费产物。它配套供应了一个简化版本的ORB、一个定名服务和一个“IDL→Java”编译器)。除此以外,因为Java仍处在开展早期,以是在分歧的Java/CORBA产物里并非包括了一切CORBA特征。
我们但愿完成一个服务器,令其在一些呆板上运转,其他呆板能向它查询准确的工夫。我们也但愿完成一个客户,令其哀求准确的工夫。在这类情形下,我们让两个程序都用Java完成。但在实践使用中,常常分离接纳分歧的言语。

1.编写IDL源码
第一步是为供应的服务编写一个IDL形貌。这一般是由服务器程序员完成的。随后,程序员便可用任何言语完成服务器,只需那种言语里存在着一个CORBAIDL编译器。
IDL文件已分发给客户真个程序员,并成为两种言语间的桥梁。
上面这个例子展现了工夫服务器的IDL形貌情形:
  1. moduleRemoteTime{
  2. interfaceExactTime{
  3. stringgetTime();
  4. };
  5. };
复制代码
这是对RemoteTime定名空间内的ExactTime接口的一个声明。该接口由独自一个办法组成,它以字串格局前往以后工夫。

2.创立根干
第二步是编译IDL,创立Java根干代码。我们将使用这些代码完成客户和服务器。与JavaIDL产物配套供应的工具是idltojava:
idltojava-fserver-fclientRemoteTime.idl
个中两个标志告知idltojava同时为根和干天生代码。idltojava会天生一个Java包,它在IDL模块、RemoteTime和天生的Java文件置进RemoteTime子目次后定名。_ExactTimeImplBase.java代表我们用于完成服务器对象的“干”;而_ExactTimeStub.java将用于客户。在ExactTime.java中,用Java体例暗示了IDL接口。别的还包括了用到的其他撑持文件,比方用于简化会见定名服务的文件。

3.完成服务器和客户
人人鄙人面看到的是服务器端利用的代码。服务器对象是在ExactTimeServer类里完成的。RemoteTimeServer这个使用的感化是:创立一个服务器对象,经由过程ORB为其注册,指定对象援用时接纳的称号,然后“宁静”地期待客户收回哀求。
  1. importRemoteTime.*;
  2. importorg.omg.CosNaming.*;
  3. importorg.omg.CosNaming.NamingContextPackage.*;
  4. importorg.omg.CORBA.*;
  5. importjava.util.*;
  6. importjava.text.*;
  7. //Serverobjectimplementation
  8. classExactTimeServerextends_ExactTimeImplBase{
  9. publicStringgetTime(){
  10. returnDateFormat.
  11. getTimeInstance(DateFormat.FULL).
  12. format(newDate(
  13. System.currentTimeMillis()));
  14. }
  15. }
  16. //Remoteapplicationimplementation
  17. publicclassRemoteTimeServer{
  18. publicstaticvoidmain(Stringargs[]){
  19. try{
  20. //ORBcreationandinitialization:
  21. ORBorb=ORB.init(args,null);
  22. //Createtheserverobjectandregisterit:
  23. ExactTimeServertimeServerObjRef=
  24. newExactTimeServer();
  25. orb.connect(timeServerObjRef);
  26. //Gettherootnamingcontext:
  27. org.omg.CORBA.ObjectobjRef=
  28. orb.resolve_initial_references(
  29. "NameService");
  30. NamingContextncRef=
  31. NamingContextHelper.narrow(objRef);
  32. //Assignastringnametothe
  33. //objectreference(binding):
  34. NameComponentnc=
  35. newNameComponent("ExactTime","");
  36. NameComponentpath[]={nc};
  37. ncRef.rebind(path,timeServerObjRef);
  38. //Waitforclientrequests:
  39. java.lang.Objectsync=
  40. newjava.lang.Object();
  41. synchronized(sync){
  42. sync.wait();
  43. }
  44. }
  45. catch(Exceptione){
  46. System.out.println(
  47. "RemoteTimeservererror:"+e);
  48. e.printStackTrace(System.out);
  49. }
  50. }
  51. }
复制代码
正如人人看到的那样,服务器对象的完成长短常复杂的;它是一个一般的Java类,从IDL编译器天生的“干”代码中承继而来。但在与ORB和其他CORBA服务举行接洽的时分,情形却变得略微有些庞大。

4.一些CORBA服务
这里要复杂先容一下JavaIDL相干代码所做的事情(注重临时疏忽了CORBA代码与分歧厂商有关这一现实)。main()的第一行代码用于启动ORB。并且天经地义,这恰是服务器对象必要同它举行相同的缘故原由。就在ORB初始化今后,紧接着就创立了一个服务器对象。实践上,它正式称号应当是“短时间服务对象”:从客户那边吸收哀求,“保存工夫”与创立它的历程是不异的。创立好短时间服务对象后,就会经由过程ORB对其举行注册。这意味着ORB已晓得它的存在,可将哀求转发给它。
到今朝为止,我们具有的全体工具就是一个timeServerObjRef——只要在以后服务器历程里才无效的一个对象援用。下一步是为这个服务对象分派一个字串情势的名字。客户会依据谁人名字寻觅服务对象。我们经由过程定名服务(NamingService)完成这一操纵。起首,我们必要对定名服务的一个对象援用。经由过程挪用resolve_initial_references(),可取得对定名服务的字串式对象援用(在JavaIDL中是“NameService”),并将这个援用前往。这是对接纳narrow()办法的一个特定NamingContext援用的模子。我们如今可入手下手利用定名服务了。
为了将服务对象统一个字串情势的对象援用绑定在一同,我们起首创立一个NameComponent对象,用“ExactTime”举行初始化。“ExactTime”是我们想用于绑定服务对象的称号字串。随后利用rebind()办法,这是受限于对象援用的字串化援用。我们用rebind()分派一个援用——即便它已存在。而倘使援用已存在,那末bind()会形成一个非常。在CORBA中,称号由一系列NameContext组成——这即是我们为何要用一个数组将称号与对象援用绑定起来的缘故原由。
服务对象最好筹办好由客户利用。此时,服务器历程会进进一种期待形态。一样地,因为它是一种“短时间服务”,以是保存工夫要受服务器历程的限定。JavaIDL今朝还没有供应对“耐久对象”(只需创立它们的历程坚持运转形态,对象就会一向存鄙人往)的撑持。
如今,我们已对服务器代码的事情有了必定的熟悉。接上去看看客户代码:
  1. importRemoteTime.*;
  2. importorg.omg.CosNaming.*;
  3. importorg.omg.CORBA.*;
  4. publicclassRemoteTimeClient{
  5. publicstaticvoidmain(Stringargs[]){
  6. try{
  7. //ORBcreationandinitialization:
  8. ORBorb=ORB.init(args,null);
  9. //Gettherootnamingcontext:
  10. org.omg.CORBA.ObjectobjRef=
  11. orb.resolve_initial_references(
  12. "NameService");
  13. NamingContextncRef=
  14. NamingContextHelper.narrow(objRef);
  15. //Get(resolve)thestringifiedobject
  16. //referenceforthetimeserver:
  17. NameComponentnc=
  18. newNameComponent("ExactTime","");
  19. NameComponentpath[]={nc};
  20. ExactTimetimeObjRef=
  21. ExactTimeHelper.narrow(
  22. ncRef.resolve(path));
  23. //Makerequeststotheserverobject:
  24. StringexactTime=timeObjRef.getTime();
  25. System.out.println(exactTime);
  26. }catch(Exceptione){
  27. System.out.println(
  28. "RemoteTimeservererror:"+e);
  29. e.printStackTrace(System.out);
  30. }
  31. }
  32. }
复制代码
前几行所做的事情与它们在服务器历程里是一样的:ORB取得初始化,并剖析出对定名服务的一个援用。
接上去,我们必要用到服务对象的一个对象援用,以是将字串情势的对象援用间接传送给resolve()办法,并用narrow()办法将了局外型到ExactTime接口援用里。最初挪用getTime()。

5.激活称号服务历程
如今,我们已分离取得了一个服务器和一个客户使用,它们已作好互相间举行相同的筹办。人人晓得二者都必要使用定名服务绑定息争析字串情势的对象援用。在运转服务大概客户之前,我们必需启动定名服务历程。在JavaIDL中,定名服务属于一个Java使用,是随产物配套供应的。但它大概与其他产物有所分歧。JavaIDL定名服务在JVM的一个实例里运转,并(默许)监督收集端口900。

6.激活服务器与客户
如今,我们已筹办好启动服务器和客户使用(之以是按这一按次,是因为服务器的存在是“短时间”的)。若各个方面都设置无误,那末取得的就是在客户把持台窗口内的一行输入笔墨,提示我们以后的工夫是几。固然,这一了局自己并没有甚么使人镇静的。但应注重一个成绩:即便都处在统一台呆板上,客户和服务器使用仍旧运转于分歧的假造机内。它们之间的通讯是经由过程一个基础的集成层举行的——即ORB与定名服务的集成。
这只是一个复杂的例子,面向非收集情况计划。但一般将ORB设置成“与地位有关”。若服务器与客户分离位于分歧的呆板上,那末ORB可用一个名为“安装库”(ImplementationRepository)的组件剖析出远程字串式援用。只管“安装库”属于CORBA的一部分,但它几近没有详细的规格,以是各厂商的完成体例是不尽不异的。
正如人人看到的那样,CORBA另有很多方面的成绩未在这儿举行具体报告。但经由过程以上的先容,应已对其有一个基础的熟悉。若想取得CORBA更具体的材料,最传真的出发点莫过于OMBWeb站点,地点是http://www.omg.org。这个中央供应了丰厚的文档材料、白页、程序和对其他CORBA资本和产物的链接。
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.
作者: 变相怪杰    时间: 2015-1-21 10:26
是一种使用者不需花费很多时间学习的语言
作者: 小魔女    时间: 2015-1-23 15:55
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 冷月葬花魂    时间: 2015-1-31 18:15
Java 编程语言的风格十分接近C、C++语言。
作者: 再见西城    时间: 2015-2-6 20:48
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: admin    时间: 2015-2-9 01:33
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: 不帅    时间: 2015-2-26 17:06
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者: 再现理想    时间: 2015-3-1 03:35
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者: 飘飘悠悠    时间: 2015-3-5 21:22
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 分手快乐    时间: 2015-3-8 08:15
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 柔情似水    时间: 2015-3-10 18:32
是一种语言,用以产生「小应用程序(Applet(s))
作者: 海妖    时间: 2015-3-23 23:35
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 山那边是海    时间: 2015-3-27 21:59
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 活着的死人    时间: 2015-4-3 20:44
是一种为 Internet发展的计算机语言
作者: 蒙在股里    时间: 2015-4-4 03:49
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者: 莫相离    时间: 2015-4-12 20:07
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 爱飞    时间: 2015-4-25 03:37
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 愤怒的大鸟    时间: 2015-4-25 23:40
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 仓酷云    时间: 2015-6-29 03:40
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 小妖女    时间: 2015-7-5 01:14
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2