您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 第5章编写服务端程序(6-7)
第5章编写服务端程序第5章编写服务端程序适配器激活器伺服对象管理器POA体系架构编写服务程序第5章编写服务端程序适配器激活器伺服对象管理器编写服务程序编写服务程序POA体系架构CORBA应用程序开发过程面向对象分析与设计用IDL编写对象接口编译IDL文件生成桩与框架编译服务端程序编译客户端程序运行应用程序编写对象实现和服务程序编写客户程序代码部署应用程序编写服务程序创建一个对象适配器POA创建提供服务的伺服对象等待客户程序发来请求初始化ORB激活伺服对象激活POA管理器编写服务程序创建一个对象适配器POA创建提供服务的伺服对象等待客户程序发来请求初始化ORB激活伺服对象激活POA管理器服务程序publicclassServer{publicstaticvoidmain(String[]args){try{org.omg.CORBA.ORBorb=org.omg.CORBA.ORB.init(args,null);POArootPOA=POAHelper.narrow(orb.resolve_initial_references(RootPOA));org.omg.CORBA.Policy[]policies={rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT)};POAmyPOA=rootPOA.create_POA(BankPOA,rootPOA.the_POAManager(),policies);AccountManagerImplmanagerServant=newAccountManagerImpl();myPOA.activate_object_with_id(BankManager.getBytes(),managerServant);rootPOA.the_POAManager().activate();System.out.println(帐户管理员BankManager已就绪...\n);orb.run();}catch(Exceptionexc){exc.printStackTrace();}}}第5章编写服务端程序POA体系架构适配器激活器伺服对象管理器编写服务程序基本概念CORBA对象、Servant对象持久对象、瞬时对象激活、冻结对象适配器对象适配器:OA伺服对象对象适配器根据ORB传递的客户程序请求,查找CORBA对象,并映射到具体的伺服对象客户程序伺服对象伺服对象POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器POA管理器POA管理器是一个对象,为其所管理的POA提供通用的操作集合;POA管理器的状态代表了其所管理的所有POA所处的状态,可以控制POA的行为POAManager持有状态活动状态丢弃状态非活动状态POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器POA层次结构以树状层次结构被POA管理器管理,RootPOA为根节点;每个伺服对象仅与一个POA相关联,删除POA也同时删除对象之间的关联关系线程策略生存期策略活动对象保持策略对象查找策略POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器活动对象映射表保存了活动的CORBA对象与伺服对象的关联关系;提供缺省伺服对象与多个CORBA对象关联;相对BOA,伺服对象和CORBA对象可单独存在POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器伺服对象管理器程序员自己实现的功能,用于代替活动对象映射表,判断CORBA对象并查找或创建伺服对象;主要有两种类型:伺服对象激活器和伺服对象定位器POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器伺服对象真正提供完成客户程序请求的操作,通常由程序设计语言对象实现,可以进行实例化并访问其提供的成员方法;通过CORBA对象提供服务POA体系架构活动对象映射表POA层次结构伺服对象管理器伺服对象POA管理器客户请求传递过程客户端ORBORB对象定位信息目标机器、端口对象关键码POA管理器客户请求传递过程对象标识POA管理器POA名字POA活动对象映射表伺服对象消息处理过程示例219.245.68.246(LatitudeE5400):14000/rootPOA:zhang3.withdraw(200);rootPOAaccount_157childPOAServantManager219.245.68.246(LatitudeE5400):14000/rootPOA/childPOA:zhang3.withdraw(200);课程小结POA体系架构的复杂性为CORBA服务端提供了灵活的消息处理机制注意的问题创建POA时所采用的策略决定了POA消息处理的方式实际中所发送的消息内容和消息格式更为复杂,有时需要程序员重写消息解析程序作业与思考题思考题在客户消息传递过程中,CORBA提供了灵活的服务端模型,允许程序员控制消息的处理过程。请思考一下在那些环节程序员可以添加自己的干预?如果服务端创建了大量的伺服对象,如何提升对象查找的效率?第5章编写服务端程序伺服对象管理器适配器激活器POA体系架构编写服务程序基本概念对象激活activate_object_with_id;activate_objectservant_to_reference;servant_to_idset_servantset_servant_manager对象冻结deactivate_object伺服对象管理器银行账户管理账户管理员在服务端管理了多个账户对象客户程序可以跨网络访问服务端提供的开户、取款、存款和查询余额服务伺服对象激活器伺服对象定位器伺服对象激活器//一个伺服对象激活器类型的伺服对象管理器importorg.omg.PortableServer.*;publicclassAccountManagerActivatorextendsServantActivatorPOA{publicServantincarnate(byte[]oid,POAadapter)…{Servantservant;System.out.println(incarnatewithID=+newString(oid));if((newString(oid)).equalsIgnoreCase(Zhang3))servant=(Servant)newAccountManagerImpl_1();elseservant=(Servant)newAccountManagerImpl_2();newDeactivateThread(oid,adapter).start();returnservant;}publicvoidetherealize(byte[]oid,POAadapter,Servantserv,booleancleanup_in_progress,booleanremaining_activations){System.out.println(etherealizewithID=+newString(oid));}}生成初始余额2000.00生成初始余额3000.00设置7秒超时后冻结伺服对象伺服对象激活器//一个伺服对象激活器类型的伺服对象管理器importorg.omg.PortableServer.*;publicclassAccountManagerActivatorextendsServantActivatorPOA{publicServantincarnate(byte[]oid,POAadapter)…{Servantservant;System.out.println(incarnatewithID=+newString(oid));if((newString(oid)).equalsIgnoreCase(Zhang3))servant=(Servant)newAccountManagerImpl_1();elseservant=(Servant)newAccountManagerImpl_2();newDeactivateThread(oid,adapter).start();returnservant;}publicvoidetherealize(byte[]oid,POAadapter,Servantserv,booleancleanup_in_progress,booleanremaining_activations){System.out.println(etherealizewithID=+newString(oid));}}伺服对象激活器——服务程序publicclassServer{publicstaticvoidmain(String[]args{try{org.omg.CORBA.ORBorb=org.omg.CORBA.ORB.init(args,null);POArootPOA=POAHelper.narrow(orb.resolve_initial_references(RootPOA));org.omg.CORBA.Policy[]policies={rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT),rootPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER)};POAnewPOA=rootPOA.create_POA(ServantActivatorPOA,rootPOA.the_POAManager(),policies);ServantActivatorsa=newAccountManagerActivator()._this(orb);newPOA.set_servant_manager(sa);rootPOA.the_POAManager().activate();newPOA.create_reference_with_id(Zhang3.getBytes(),IDL:Bank/AccountManager:1.0);newPOA.create_reference_with_id(Li4.getBytes(),IDL:Bank/AccountManager:1.0);System.out.println(帐户管理员Zhang3和Li4已就绪...);orb.run();}catch(Exceptionexc){exc.printStackTrace();}}}伺服对象激活器——服务程序publicclassServer{publicstaticvoidmain(String[]args{try{org.omg.CORBA.ORBorb=org.omg.CORBA.ORB.init(args,null);POArootPOA=POAHelper.narrow(orb.resolve_initial_references(RootPOA));org.omg.CORBA.Policy[]policies={rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT),rootPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER)};POAnewPOA=rootPOA.create_POA(ServantActivatorPOA,rootPOA.the_POAManager(),policies);Serv
本文标题:第5章编写服务端程序(6-7)
链接地址:https://www.777doc.com/doc-1599797 .html