精华内容
下载资源
问答
  • 中间件根本原理 : 对store.dispatch进行改造。 中间件出现的原因 :由于很多时候执行dispatch并不仅仅是立即去更新reducer,这时需要执行其他函数来满足项目需求,这些函数就是中间件,最后执行过一系列中间件后...
    • 首先看下redux执行流程:
      在这里插入图片描述
    redux设计思想:
    • (1)Reducer:纯函数,只承担计算 State 的功能,不合适承担其他功能,也承担不了,因为理论上,纯函数不能进行读写操作。
      *(2)View:与 State 一一对应,可以看作 State 的视觉层,也不合适承担其他功能。
    • (3)Action:存放数据的对象,即消息的载体,只能被别人操作,自己不能进行任何操作。
    • 想来想去,只有发送 Action 的这个步骤,即store.dispatch()方法,可以添加功能。
      中间件根本原理对store.dispatch进行改造。
      中间件出现的原因 :由于很多时候执行dispatch并不仅仅是立即去更新reducer,这时需要执行其他函数来满足项目需求,这些函数就是中间件,最后执行过一系列中间件后再去执行reducer
      • 举例来说,要添加日志功能,把 Action 和 State 打印出来,可以对store.dispatch进行如下改造。
      let next = store.dispatch;
    store.dispatch = function dispatchAndLog(action) {
      console.log('dispatching', action);
      next(action);
      console.log('next state', store.getState());
    }
    
    • 上面代码中,对store.dispatch进行了重定义,在发送 Action 前后添加了打印功能。这就是中间件的雏形。

    • 中间件就是一个函数,对store.dispatch方法进行了改造,在发出 Action 和执行 Reducer 这两步之间,添加了其他功能。


    applyMiddlewares的作用:它是 Redux 的原生方法,作用是将所有中间件组成一个数组,依次执行。
    • 源码
    const store=createStore(reducer,applyMiddleware(logger,thunk))
    export default function applyMiddleware(...middlewares) {
      return (createStore) => (reducer, preloadedState, enhancer) => {
        var store = createStore(reducer, preloadedState, enhancer);
        var dispatch = store.dispatch;
        var chain = [];
        var middlewareAPI = {
          getState: store.getState,
          dispatch: (action) => dispatch(action)
        };
        chain = middlewares.map(middleware => middleware(middlewareAPI));
        dispatch = compose(...chain)(store.dispatch);
     
        return {...store, dispatch}
      }
    }
     
    //执行顺序解析
    //中间件数组传入{getState: store.getState,dispatch: (action) => dispatch(action)} => 
    //compose合并新中间件数组 并传入dispatch=>
    //执行完所有中间件函数后返回store和dispatch
    
    applyMiddlewares调用实例:返回store对象
    let middlewares = [loggerMiddleware, thunkMiddleware, ...others];
    let store = applyMiddleware(middlewares)(createStore)(reducer, initialState);
    
    展开全文
  • 中间件技术原理及应用 清华大学出版社 老师上课时用的课件,很不错!
  • 1. 中间件的定义:中间件是一种软件,处于系统软件(操作系统网络软件)与应用软件之间,它能使应用软件之间进行跨网络的协同工作(也就是互操作),这时允许各应用软件之下所涉及的“系统结构、操作系统、通信协议...

    第一章 中间件产生背景与分布式环境

    1. 中间件的定义:中间件是一种软件,处于系统软件(操作系统网络软件)与应用软件之间,它能使应用软件之间进行跨网络的协同工作(也就是互操作),这时允许各应用软件之下所涉及的“系统结构、操作系统、通信协议、数据库和其他应用服务”各不相同。

    2.中间件分类:

        终端仿真/屏幕转换中间件

        数据库访问中间件

        远程过程调用中间件

        面向消息中间件

        事务(交易)中间件

        分布式对象中间件

    3.远程过程调用中间件:

    1). RPC:(远程过程调用中间件)

    定义:本地过程调用的扩展,通过这种调用机制,程序员编写客户方应用时,可根据需要透明地调用位于远端服务器上的过程。

    功能:它以“过程”为基本单位调用,采用C/S模型进行远程通讯,提供了数据表示、可靠传输、服务定位功能,实现了七层协议中会话层的功能,为实现分布式计算提供简单实现途径。是DCE,DCOM,CORBA的通信基础。

         工作原理:

    ①用中间件中的IDL对调用顺序加以描述;

    ②利用IDL编译器对这种定义和描述进行编译,从而生成支持客户机和服务器进行通信的管道;

    ③在服务器端,被调用的远端过程需单独编写,并被置入服务器端框架,同时要在远程过程调用中间件中进行注册,以备调用。

    ④启动本地客户端存根——〉存根捆绑远端过程名和参数——〉利用网络传输到服务器端框架,从而实现数据格式的转换和参数的传递

    ⑤采用调用/返回模式具体地完成远端过程调用

         RPC的语义:

    • Last-of-many:被调用的过程可能执行若干次,但规定其最后一次执行的结果作为返回结果。
    • At-most-once:若调用者收到了回复消息,则称被调用的过程正确地完成了它的一次(仅仅一次)执行。
    • At-least-once:远程调用过程至少执行一次,回复消息可能返回一次或多次。
    • Exactly-once:若服务器正常,则远程过程恰好执行一次,并返回一个调用结果。    

       桩的作用:1.初始化并与远程对象所在的虚拟机连接;2.将参数打包,传递到远程虚拟机;3.等待结果;4.解包返回值和异常;5.将返回值返回给调用者。

      框架的作用:1.解包客户端输入的远程方法参数;2.调用实际的远程对象方法;3.将结果打包返回给调用者。

        用C实现RPC过程:1.用IDL定义远程服务接口;2.用MIDL编译接口并产生 .h , _s.c , _c.c 为后缀三个文件;3.服务端发服务(server.c , .h , _s.c);4.客户端调用服务(client.c, .h , _c.c)。

    2). RMI(远程方法调用):在分布式程序中,其远程对象的方法能够被运行在不同主机上的其他Java虚拟机的方法调用

    特点:可以实现“对象”为基本单位调用,实现远程对象之间的无缝调用,为Java分布式计算提供简单而直接的途径,是EJB的通讯基础。

        桩的作用:与RPC中桩的作用一样。

        框架的作用: 与RPC中的作用一样。

        具体实现过程:1.定义远程服务接口;2.实现远程服务接口;3.用rmic编译产生桩/框架;4.服务端发布服务;5.客户端调用服务。

    第三章 COM相关技术

    COM:组件对象模型,是软件对象组件互相通信的一种方式,它是一种二进制和网络标准,允许任意两个组件相互通信,而不管它们是在什么计算机上。 

    它既提供了组件之间的交互规范(组件模型),也提供了实现交互的环境(COM库)。

    组件:具有一定逻辑功能的可执行代码,是组成应用程序的构件。

    接口:对其他软件和组件能使用的公用功能的定义,是组件与外界的交互通道。

    COM库的实现在os层,其中的函数名通常以Co开头。

    IUnknown接口:所有的的COM组件都必须实现IUnknown接口

    IDispatch接口:从IUnknown接口派生,有了这个接口,COM可以通过一个标准的接口来提供它所支持的服务,而无需提供多个特定与服务的接口。

    COM接口:由128位全局唯一标识符(GUID)标识,称为IID。客户通过GUID获得接口指针,通过此指针,调用接口成员函数,实现服务功能,GUID标识组件时为CLSID。

    接口的特点:二进制特性、接口不变性、继承性、多态性

    使用Microsoft的IDL来定义接口

    类工厂:就是一个能够创建其他组件的组件。

    一个类工厂只能创建某个特定的CLSID相对应的组件。而类工厂实现时并没有为它分配一个唯一标识符CLSID。它也没有在系统的注册表中注册。

    进程内组件——DLL,进程外组件——EXE

    DCOM(分布式组件对象模型):是分布式应用环境中的COM技术,是COM的无缝扩展,处理了底层网络协议的所有细节,支持不同计算机上组件对象与客户程序之间或者组件对象之间的相互通信。

    进程和组件处于不同机器时,DCOM仅仅是用网络协议代替本地进程之前的通信。

    把进程的透明性转换为了位置的透明性

    MTS:COM组件的一致管理系统,为COM技术的企业应用提供基本的组件管理与配置环境,一方面为组件提供新的服务,另一方面代表一种编程模型。

    COM+:是一个面型应用的高级COM运行环境,他在COM这一编程模型的基础上实现了许多面向企业应用的分布式应用所需的服务,并将它们与操作系统集成在一起。

    第四章 J2EE技术

    EJB定义了服务端组件的编写规则、组件之间的交互规则和应用服务器对组件的管理规则。

    RMI:Java远程方法调用,提供跨进程的组件通信和相关的通信服务。

    RMI-IIOP:扩展了RMI,提供与CORBA的继承,用于J2EE的正式API。

    JNDI:Java名称和目录接口,用于网络中定位组件和其他资源。

    JDBC:提供关系数据库的连接和相应的数据库操作。

    JTA和JTS:使组件支持事务处理的规范。

    JMS:用于分布式对象的异步通信。

    Java Servlets和JSP:适用于请求/应答模式分布式计算的网络组件。

    Java IDL:用于基于Java的CORBA实现,使Java与其他编程语言集成。

    Connectors:是J2EE可以运行高端事务处理的主机系统集成。

    JCA/JCE/JSSE/JAAS:安全服务体系,专门处理身份验证及权限控制的标准服务。

    EJB的定义:用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。

    显式中间件:调用服务时,需要手工编写代码开实现调用服务的中间件。

    隐式中间件调用服务时,不需要手工编写一行代码就可以调用该服务的中间件。

    EJB容器通过请求拦截器(EJB对象)实现隐式中间件。请求拦截器通过EJB在部署描述文件中描述的需求信息,知道怎样去使用中间件。

    EJB容器的定义:是EJB组件的运行环境,是一层代替bean执行相应服务的接口。

    作用:EJB容器负责将客户端程序连接到Beans,执行事务协调,提供数据存储,管理Bean的生命周期,透明地管理分布式组件体系结构的系统开销,无论是Bean还是调用Bean的客户程序都不显式地对EJB容器的API进行编码,从本质上讲,EJB容器是客户端程序和Bean之间看不见的中间人。

    HOME接口:允许客户建立或者删除EJB

    REMOTE接口:由Bean提供商编写的一个特殊的接口,复制对应的Bean类公开的所有商务方法。EJB容器依据这些信息自动生成对应的EJB对象

    第五章 CORBA

    OMA对象模型体系结构:包括对象模型和参考模型

    对象模型:定义如何描述分布式异质环境中的对象;

    参考模型:描述对象之间的交互

    CORBA公共对象请求代理体系结构,是由OMG提出的应用软件体系结构和对象技术规范,器核心是一套标准的语言、接口和协议,以支持易购分布应该程序见的互操作性及独立于平台和编程语言的对象重用。

    ORB核心(软总线,跨平台):对象请求代理,是对象总线,它能使对象透明地向其他本地或远程对象发出请求或获得应答。而客户方并不需要了解服务对象的通信、激活或存储机制

    CORBA体系结构

    ORB规范包含的内容:

    1、ORB 核心——软总线(跨平台)

    2、OMG界面定义语言——IDL(跨语言)

    3、语言映射——C++ 或Java

    4、界面仓库和实现仓库——动态调用

    5、静态存根和框架——静态调用

    6、动态存根和框架——动态调用

    7、对象适配器——适配层

    8、ORB之间的互操作——GIOP/IIOP

    ORB运行过程:

    ⑴客户通过某种方式找到特定对象实现的对象引用;

    ⑵如果该对象实现有相应的静态存根,则客户可以通过该静态存根向对象实现发送请求,否则,在界面仓库的协助下,客户可以使用动态调用界面DII来向对象实现发出请求;

    ⑶当对象调用请求通过静态存根或动态调用界面DII到达ORB核心以后,ORB核心负责请求的传送,将其送给相应的对象适配器,其具体的请求传递方式由ORB的具体实现决定;

    ⑷对象适配器接到请求后,判断一下所请求的对象实现是否有静态框架存在,如果有,则对象适配器通过静态框架调用执行对象实现中的操作,否则,对象适配器将通过动态框架界面DSI中的动态实现例程来调用对象实现中的操作;

    ⑸对象实现的特定操作方法执行完成后,结果将按照对象请求传递和执行路径逆向返回给客户对象;

    OMG IDL IDL是一个纯说明性语言,非编程语言,从而将界面与对象实现分离。不能用OMG IDL语言直接实现分布式应用,所以要把IDL的特性映射为具体语言的实现,这就是语言映射的人物。

    静态存根和框架(静态调用):存根代表客户创建并发出请求;框架则把请求交给CORBA对象实现。

    存根负责接收客户程序的请求、对请求的参数进行封装和发送以及对返回结果的接收和解封装;框架负责将请求参数解封装,识别客户所请求的服务,调用对象实现,并把执行结果封装然后返回客户方。

    动态存根和框架(动态调用)

    动态调用界面(DII)——通用存根,支持客户方的动态请求调用。

    动态框架界面(DSI)——通用框架,支持服务方的动态对象调用。

    对象适配器OA(适配层):联系对象实现和ORB本身的纽带,提供了服务器端对象实现和ORB核心直接的适配层,为对象实现大部分所需的ORB功能。

    ORB之间的互操作(GIOP/IIOP):有两种方式:直接互操作和基于桥的互操作。

    GIOP:是互操作体系结构的基础,定义了用于ORB间通信的一种标准传输语法和一组消息格式;IIOP:互联网ORB互通协议,是GIOP的一种映射,说明如何在TCP/IP网络上交换GIOP消息。

    IOR:可操作对象引用,对象的IOR所提供的信息可用于在多个不同的ORB间确定对象的位置。

    静态调用:通过存根和框架的调用(在请求真实发生之前,存根和框架早已分别被直接连接到客户程序和对象实现中去);

    动态调用:构造并发送一个请求,请求中的参数说明只有在运行时才能知道

    CORBA基本服务:名字服务、事件服务、交易器服务、负载均衡、容错服务

    CORBA核心服务:对象定位、消息传输、安全服务

    第七章 分布式事务处理

    事务:是指对特定的共享资源的一组不可分割的操作,具有ACID性 

    原子性(Atomicity)事务中多有操作是一个不可分割的整体。

    一致性(consistency)事务中涉及的资源从一个合法状态转变成另外一个合法状态,中间不能出现数据不一致的情况。

    孤立性(Isolation):一个事务只有在结束后才对其他事务产生影响,期中间结果对其他事务是不可见的。

    持久性(Durability):事务一旦完成,其影响是持久的。

    分布式事务处理:在分布的、异构的环境中,数据是分布的,一个事务的执行涉及对分布在多个不同结点的数据的更改。

    X/Open DTP模型是一个用于规范在分布、异构的环境下应用程序与不同资源之间相互协调进行事务处理的标准。

    分布事务处理模型X/Open DTP模型的组成:

    ⑴应用程序(AP):事务的使用者,它发出开始、提交或回滚事务的请求。它规定了一个事务的界限,并给出事务所包含的操作

    ⑵资源管理器(RM):提供对共享资源的访问。

    ⑶事务管理器(TM:AP与RM之间的协调员。它给每个事务分配标识符,监视它们的进展,保证事务处理的顺利进行,并负责事务在失败情况下的恢复。

    X/Open DTP模型各组成部分之间的作用关系:

    AP-RM之间采用RM的特有API接口,X/Open对这部分的规范较少。

    AP-TM之间采用TX接口。AP利用这个接口向TM发出开始和结束一个事务的请求,进行全局事务的管理。

    TM-RM之间采用XA双向接口(RM->TM为xa 反之为ax)。TM利用这个接口使各个RM合作完成一个全局事务。

    分布事务处理模型X/Open DTP——事务处理过程:

    ①AP首先通过TX接口告诉TM要开始一个新事务

    ②TM分配全局事务ID,调用XA接口通知各RM新事务开始;

    ③AP访问RM

    ④操作完成后,AP要求TM提交事务

    ⑤TM调用XA接口协调各RM进行事务提交

    事务类型:平坦事务,链式事务,嵌套事务

    作用域的角度,事务划分成:全局事务和本地事务

    两阶段提交协议:

    思路:在TM向所有RM发出正式提交请求之前,先询问所有的RM是否已准备好提交仅当所有的RM都给出肯定的回答时,TM才发出提交的请求;如果有一个RM给出否定的回答,TM就指示所有的RM进行回滚

    两阶段提交协议(2PC)的两个阶段:

    阶段一:准备阶段

    TM询问所有的RM是否已经准备好提交

    阶段二:提交阶段

    TM检查所有RM的回答,只要有一个RM给出否定的回答,TM就指示所有的RM进行回滚。否则TM将指示所有的RM提交。

    第九章 无线、移动中间件

    无线CORBA的核心技术:

    终端域:移动终端活动的区域,处于移动网络中,一般为客户端,是整个服务的发起者。CORBA服务代理:实现命名服务绑定的自动更新和迁移;移动事件提供者:提供消息响应机制;终端桥:终端域与访问域之间的接口,主要完成终端启动自举、初始化访问、迁移和访问的恢复以及GIOP/UDP、GIOP/WAP的映射。

    访问域: CORBA服务提供域,一般存在于固定网络环境中,但在特定场合下也会移动。服务:安全服务、交易服务、持久服务、通知服务等;访问桥:终端桥的对应部分,负责初始化访问、提供透明的IOR、完成连接迁移和访问的恢复以及为止相关的一下函数;GIOP隧道:实现系统的透明通信。

    宿主域:位置向导,提供位置透明服务,一般存在于固定网络环境中,且不会移动,具有较强的容错能力,命名服务:提供基本的名字服务、交易器服务;宿主位置代理:在命名服务的基础上,提供位置向导代理,从而实现位置的透明性。

    移动IOR:用来发送请求道宿主域。先让客户请求传送到宿主域;宿主域将服务所属的访问桥、移动终端信息等返回给客户;客户收到消息后,得知服务所在的访问桥,进而将请求转发到该服务。移动IOR是实现移动透明性的基础

    移动客户调用移动服务流程:P169

    第十章 反射中间件

    反射:既然一个过程,借助于包含一个组成过程(解释器)来形式化地操纵外部世界的表示,从而可以推理外部世界;那么这个计算过程也可以设计为能推理期自身,同样借助于包含一个组成过程(解释器)来操纵其自身的操作和结构。

    反射的实现:虚拟机的存在。虚拟机根据对该类的了解封装成一个对象,这个对象可供其他程序访问。

    通过反射,一个程序可以访问、推理和改变其自身的解释。

    反射中间件:通过适当的因果相联的自表示,能够检查和调整期行为的中间件系统。1.检查系统的结构、状态和行为;2.灵活性和适应性;3.关注分离。

    第十一章 网络即插即用中间件

    Jini系统的目标:⑴提供一个能够帮助不同网络用户在任何网络群体自然地完成发现、加入和参与的基础设施。⑵提供一种基础设施,实现零安装和零配置。“即插即用”而非“即插即请求”。⑶通过把所有的对象都处理为服务,提供一种以服务网络为中心的体系结构。⑷提供一种能处理部分失败,实现自愈合的网络体系结构。

    Jini的组成:基础设施  编程模型  服务。

    第十二章 其他中间件技术

    Web服务:是在Internet上进行分布式计算的基本构造块。

    Web Service:一个通过URL识别的软件应该程序,期界面及绑定能用XML文档来定义、面述和发现,并且基于Internet协议上的消息传递,使用XML支持和其他软件应用程序的直接交互。

    Web三大模块:

    传输模块(SOPA协议):在线交互的标准

    描述模块(WSDL):用于描述服务个体或服务的收集

    发现模块(通用发现、说明和集成UDDI):用于服务的发现

    SOAP:Web服务的通信协议,SOAP用来定义消息的XML格式,包含在一对SOAP元素中的、结构正确的XML段就是SOAP消息L文件是一个XML文档,用于说明一组SOAP消息以及如何交换这些消息。

    UDDI:通用发现、说明和集成,是Web服务的黄页。可以搜索提供所需服务的公司,进行阅读以便了解其所提供的服务,然后再与某人联系以获得更多信息。

    消息中间件

    考其基本结构、工作模式及其特点。

     

    展开全文
  • 事务中间件 CICS 原理及应用开发 CICS Transaction Gateway CICSChina | Aug 24 2011 | Com...

    CICS Transaction Gateway

    CICSChina |  Aug 24 2011 | Comments (0)  |  Visits (410)
    1.1 什么是CTG
    1.1.1 概述
    CICS系统是IBM大型机上的重要的交易处理系统,并且由于大型机的特殊性,导致CICS的已有应用程序对分布式平台开放不够,难以重用以往的应用程序。因此,CICS与分布式系统的交互,即外界如何访问CICS传统应用,成为一个重要的课题。
        而CTG(CICS Transaction gateway,以下简称为CTG),CICS交易网关,是分布式平台连接到CICS的首选工具,它具有高性能,高安全性,高可扩展性等特性。
        CTG与CICS的连接属于直接相连的方式,几乎不用修改CICS的已有应用,即可被外界访问。Web Services 同样可以实现与CICS的连接,但是相比于Web Services,CTG有以下优势:
        (1)没有复杂的标准,技术相对成熟。
        (2)利用已有的应用程序接口,很少需要对CICS程序进行修改。
    本文中实例所使用的CICS Transaction Gateway软件为V7.2 for Windows版本。

    1.1.2 CTG结构图
    图像
     相关概念介绍:
    1. Gateway Daemon (网关守护程序):网关守护程序用于监听远端客户程序的请求,并且可以管理线程和网络连接,以达到优化的目的。网关守护程序中的一个重要组件是协议处理器(Protocol Handler),用于处理远端应用程序的请求,可以支持TCP/IP和SSL协议。
    2. Client Daemon (客户机守护程序):客户机守护程序是开放平台CTG的重要组成部分,它提供一个本地接口,客户应用程序就通过这个接口连接到CICS,支持C,C++,.Net,COBOL等多种语言的应用程序。
    3. IPIC driver (IPIC 驱动器):IPIC驱动器是CTG中的一个独立组件,作用类似于客户机守护程序,专用于IPIC方式连接到CICS。CICS在3.2版本中引入了IPIC(IP Intercommunication)的概念,用于CICS region之间的互连,这种连接是基于TCP/IP协议的,具体的IPIC概念请参考其他相关章节。从CTG V7.1版本以后,加入了对IPIC的支持。
    4. CTGCFG tool(CTG configuration tool,CTG配置工具):CTG产品自带的图形化配置工具,用于设置ctg.ini配置文件中的属性,包括网关守护程序和客户机守护程序等的相关参数。配置客户端守护程序界面,如下图所示:
    图像其中重要的几个参数描述如下:
    (1) 服务器名称:一个8位长的字符串,定义一个独立于协议的服务器名称,客户端应用程序发到CICS的请求都要发到这个服务器。
    (2) 协议:指定CTG所支持的各种网络协议,本章重点介绍TCP/IP协议。
    (3) 主机名或IP地址:CICS所在的主机地址,可以指定主机名或IP地址。
    (4) 端口:CICS端定义的TCPIPService所指定的端口,是客户端请求发送到CICS的接入点。

    配置客户端守护程序界面,如下图所示:
    图像 选中“启用协议处理程序”就能使图示的网关守护程序生效。
    其中重要的几个参数描述如下:
    (1)绑定地址:如果在此处指定某IP或主机名,就可以将协议处理程序绑定到上面指定的值;如果需要将协议处理程序绑定到任意地址,可以把此处留空不填。
    (2)端口:安装CTG的服务器对外开放的CTG端口,默认为2006。

    1.1.3 CTG编程接口
    由于分布式系统架构的多样性,CTG支持一下三种连接方式:

    1.    External Call Interface (ECI) 外部访问接口
    ECI是简单的RPC式访问接口,用来调用(LINK) CICS中的应用程序,可以使用COMMAREA或channel作为数据接口,用于客户应用程序和CICS之间的数据交换。
        CICS将此种类型的访问看成是一种分布式程序调用(DPL : distributed program link )。客户端发来的请求由一个镜像交易CPMI进行处理,然后进一步调用到目标应用程序。
    图像 2.    External Presentation Interface (EPI) 外部表现接口
    EPI被用来调用基于3270终端的交易。使用这种接口时,CICS上面会自动安装一个虚拟的终端,此终端受CTG的控制,并且CICS将客户端发来的请求运行在这个虚拟终端上。这种接口只支持SNA协议。
    图像
     3.    External Security Interface (ESI) 外部安全接口
    ESI是用来验证并且修改CICS外部安全管理器(例如RACF)所保存的安全信息,并且由于CICS支持方面的原因,目前只能通过SNA协议进行连接。
    图像 1.1.4 CTG支持的网络协议
    TCP/IP:配置最简单的方式。
    SNA:必须和Communication Server搭配使用。
    IPIC:CICS在3.2版本中引入了IPIC(IP Intercommunication)的概念,用于CICS region之间的互连,这种连接是基于TCP/IP协议的,具体的IPIC概念请参考其他相关章节。从CTG V7.1版本以后,加入了对IPIC的支持。
    Namedpipe:命名管道,只支持Windows版本的CTG。
    EXCI:只支持Z/OS版本的CTG。

    1.1.5 CTG的一些注意事项
    1.CTG不支持从CICS端主动发出的访问请求。这里有个问题比较容易引起误解,就是CTG发送请求到CICS,CICS的返回信息可以正常返回给CTG,这种不是CICS主动发起的请求。
    2.CTG不会做数据的转换,这个工作需要在应用程序或CICS中处理。

    1.2 两种模式
        CTG的有两种运行模式,这两种模式是根据CTG以及客户应用的拓扑结构来区分的。具体是哪种模式取决于客户应用程序的部署位置,分别为本地模式和远程模式。

    1.本地模式(Local Mode,两层结构)
    图像 在本地模式下,客户应用程序与安装CTG的server为同一台机器。在客户应用程序对CICS发送请求的时候,不需要经过网关守护程序,而是直接发送到CICS端,因此,整个体系架构可以看作两层的结构。这种模式下,根本无需启动网关守护程序,对CICS的请求直接发送到客户端守护程序。
    在客户应用程序中的ECI请求中仍需要指定URL参数为local,即ConnectionURL = "local://" 和PortNumber = 0。

    2.    远程模式(Remote Mode,三层结构)
    图像 在远程模式下,客户应用程序与安装CTG的server为不同的机器,甚至不同的系统平台。在这种模式下,必须要配置并且启动网关守护程序,网关守护程序介于客户应用程序和CICS之间,整体构成三层的结构。
    在客户应用程序的ECI请求中需要指定URL参数为CTG所在机器的IP地址,即ConnectionURL = "XXX.XXX.XXX.XXX" 和PortNumber = XXX。

    从另外一个角度对两种模式的诠释,见下图:
    图像图像 1.3 CTG连接到CICS实例
    1.配置CICS region
            1. Set the SIT parameter TCPIP=YES.
            2. Install the following:
                 –    CICS-supplied transient data queue CIEO, in group DFHDCTG
                 –    Transaction CIEP in group DFHIPECI
                 –    Program DFHIEP in group DFHIPECI
           3. Add a TCP/IP listener to CICS. Use the following CEDA command to define a TCPIPSERVICE in a group:
                –    CEDA DEF TCPIPSERVICE(service-name) GROUP(group-name)
           4. Use the following command to install the TCPIPSERVICE definition:
                –    CEDA INS TCPIPSERVICE(service-name) GROUP(group-name)
    Attribute Description
    POrtnumber The port on which the TCP/IP service listens.
    PRotocol The protocol of the service is ECI.
    TRansaction The transaction that CICS runs to handle incoming ECI requests. Set it to CIEP.
    Backlog The number of TCP/IP requests that are queued before TCP/IP starts to reject incoming requests.
    Ipaddress The IP address (in dotted decimal form) on which the TCPIPSERVICE listens. For configurations with more than one IP stack, specify ANY to make the TCPIPSERVICE listen on all addresses.
    SOcketclose Whether CICS should wait before closing the socket after issuing a receive for incoming data on that socket. NO is recommended for ECI connections, to ensure that the connection from the Client daemon always remains open.
    ATtachsec Specifies the level of attach-time security required for TCP/IP connections.
     
     2.配置CTG 
    图像
     3.测试连接

    1.4 应用程序开发
    CTG提供多种编程接口,包括:
    (1) J2EE Connector Architecture(JCA) JAVA API,即J2EE连接器架构JAVA应用程序接口,这是推荐的编程接口。
    (2)基础的JAVA,C,COBOL,COM等编程接口。

    1.    Java 应用程序开发
    图像图像 2.    JCA 应用程序开发

            JCA(J2EE Connector Architecture) defines a standard architecture for connecting the Java 2 Platform Enterprise Edition (J2EE) platform to heterogeneous Enterprise Information Systems (EIS). Examples of an EIS include transaction processing systems (such as the CICS TS) and Enterprise Resource Planning systems (such as SAP).
            A resource adapter is a middle-tier between a Java application and an EIS, which enables the Java application to connect to the EIS. A resource adapter plugs into application servers supporting the JCA.
            JNDI: The Java Naming and Directory Interface (JNDI) is part of the Java platform, providing applications based on Java technology with a unified interface to multiple naming and directory services.
            J2C Connection Factory: The connection factory provides connections to the Enterprise Information System (EIS). It operates the connection management of JCA.
            Common Client Interface (CCI) : The CCI defines a common API for interacting with resource adapters. It is independent of a specific EIS. A Java application interfaces with the resource adapter using this API.
            System contracts: A set of system-level contracts between an application server and an EIS. These extend the application server to provide the following features: (Connection management, Transaction management, Security management). These system contracts are transparent to the application developer. That is, they do not implement these services themselves.
            Resource adapter deployment and packaging: A resource adapter provider includes a set of Java interfaces/classes as part of the resource adapter implementation. These Java interfaces/classes are packaged together with a deployment descriptor to create a Resource Adapter Archive (represented by a file with an extension of rar). This Resource Adapter Archive is used to deploy the resource adapter into the application server.
    图像         1. Look up a ConnectionFactory for the ECI resource adapter.
            2. Create a Connection object using this ConnectionFactory. A Connection is a handle to the underlying network connection to the EIS. Specific connection properties, such as a user name and password, can be passed using an ECIConnectionSpec object.
            3. Create an Interaction from the Connection. Specific interaction properties such as the transaction identifier can be passed using an ECIInteractionSpec object. The call to the EIS is initiated by invoking the execute() method on the interaction, passing data as input and output records.
            4. After the required interactions have been processed, the interaction and connection should be closed.

    1.5 应用举例

    1.5.1 简单Java应用
    public class CTGdemo {
             ... Java code ...

             // Program name
             String strProgram = "EC01";
             // Port number
             int iPort = 2006;
             /*
             * Use the extended constructor to set the parameters on the
             * ECIRequest object
             */
             eciRequestObject =
             new ECIRequest(ECIRequest.ECI_SYNC,      //ECI call type
                            strChosenServer,          //CICS server
                            null,                     //CICS userid
                            null,                     //CICS password
                            strProgram,               //CICS program to be run
                            null,                     //CICS transid to be run
                            abytCommarea,             //Byte array containing the
                                                      // COMMAREA
                            iCommareaSize,            //COMMAREA length
                            ECIRequest.ECI_NO_EXTEND, //ECI extend mode
                            0);                       //ECI LUW token

    ... Java code ...
    }

              ... COBOL code ...
         * Initialize commarea
              MOVE SPACES TO DFHCOMMAREA.
         * Invoke api to get system time
              EXEC CICS
                  ASKTIME ABSTIME(WS-RAWTIME)
              END-EXEC.
         * Format
              EXEC CICS
                  FORMATTIME ABSTIME(WS-RAWTIME)
                             DDMMYY(LK-DATE-OUT)
                             DATESEP('/')
                             TIME(LK-TIME-OUT)
                             TIMESEP(':')
              END-EXEC.

              ... COBOL code ...
         *end of program


    1.5.2 JCA应用
            Lab3 implements a simple internet banking.
            Users can query/save/withdraw their money from the web application.
    图像

     

     

     

     1. Web client 
        (1)Operation Page s
              Operation Types: Query,Save,Withdraw
        (2)Return Page
            Result: Name, Gender, Balance

    2. DATA FORMAT -- COMMAREA
        (1)SNNNNNNNNNNXXXXXXXXXX
        (2)S= 0,1,2(0-Query, 1-Save, 2-Withdraw)
        (3) NNNNNNNNNN --- UserName
             XXXXXXXXXX   ---  Money
    struct CTGINPUT{            
        char signal;            
        char username??(10??);  
        char money??(10??);     
        char success;           
        char name??(12??);      
        char gender??(12??);    
        char balance??(12??);   
    }; 
    图像图像
    3. CICS Program – VSAM1
        (1)three operations 
              (Query,Save,Withdraw)
        (2) Operate the VSAM files

    4. CICS DATA – VSAM files
        (1)VSAM file1--USERINFO
         (Username:10), (Account:6)
         (Name:12), (Gender:6)
        (2)VSAM file2--ACCOUNT
         (Account:6), (Balance:10) 
     图像
    No Ratings 0

     

    Comments (0)

    There are no comments to display
    展开全文
  • 发送和接收是异步的,发送者无需等待,二者的生命周期也可以不必相同,而且发送者可以将消息间接传给多个接收者,大大提高了程序的性能、可扩展性健壮性,这使得异步处理模型在分布式应用上比起同步处理模型更具有...
  • 清华大学版中间件技术原理及应用,内容比较详细,是一本不错的教材。
  • 二、第l章中间件产生背景分布式计算环境 第2章面向对象中间件oDP 第3章com相关技术 第4章J2EE技术 第5章CORBA初步 第6章CORBA服务 第7章中间件中的事务处理 第8章coRBA高级技术 第9彦无线、移动中间件 第10章反射...
  • 中间件技术原理应用ppt

    热门讨论 2012-03-05 00:16:36
    中间件技术原理应用ppt转pdf  中间件技术由于自身的互操作性、强大的服务功能、快速的开发能力等特性,目前已经成为诸如金融、电信等大型核心业务系统的支撑平台。围绕中间件的各种相关技术近几年来也成为研究...
  • koa 中间件概念及应用

    2020-04-01 17:27:05
    原理: koa 实例化对象的use方法中的回调函数,如下面实例中的App.use((ctx,next)=>{}),有ctx,next两个参数。 可以ctx的request,response对象,可以终结相应,只有调用 next() 才会调用下一个中间件,如果...

    原理:

     

    • koa 实例化对象的use方法中的回调函数,如下面实例中的App.use((ctx,next)=>{}),有ctx,next两个参数。
    • 可以ctx的request,response对象,可以终结相应,只有调用 next() 才会调用下一个中间件,如果没有调用,next方法,            则不能继续下一个中间件

    应用:

    •   应用中间件

    在请求刚进入服务时,必须执行的函数,可以通过中间件实现

    /**
     * 应用级别中间件
     * */
    const Koa = require('koa');
    const Router = require('koa-router')();
    const App = new Koa();
    
    App.use((ctx,next)=>{
        ctx.body = {};
        ctx.body.date = new Date();
        next()
    });
    
    Router.get('/',function (ctx,next) {
        ctx.body.content='hello world'
    })
    Router.get('/news',function (ctx,next) {
        ctx.body.content = "新闻页面"
    })
    App.use(Router.routes());
    
    App.use(Router.allowedMethods());
    
    App.listen(3000,()=>{
        console.log('queck start at port 3000')
    })
    
    
    •  路由中间件

          在某个请求前进行一些操作

    /**
     * 应用级别中间件
     * */
    const Koa = require('koa');
    const Router = require('koa-router')();
    const App = new Koa();
    
    
    Router.get('/',function (ctx,next) {
        ctx.body ={};
        console.log('请求了/');
        next();
    })
    Router.get('/news',function (ctx,next) {
        ctx.body ={};
        console.log('请求了/news');
        next();
    })
    
    Router.get('/',function (ctx,next) {
        ctx.body.content='hello world'
    })
    Router.get('/news',function (ctx,next) {
        ctx.body.content = "新闻页面"
    })
    App.use(Router.routes());
    
    App.use(Router.allowedMethods());
    
    App.listen(3000,()=>{
        console.log('queck start at port 3000')
    })
    
    

    访问 http://localhost:3000             '请求了/'               {content:'hello world'}

    访问 http://localhost:3000/news             '请求了/news'               {content:'新闻页面'}

     

    展开全文
  • PAGE PAGE #/ 7 中间件技术原理应用课后习题 参考答案S1 .中间件产生背景分布式计算环境 比较开放系统与分布式系统的异同 分布式系统具备以下属性远程性并发性异步性异质性自主性 联合性伸缩性发展性移动性 开放...
  • 中间件技术原理应用课后习题 参考答案 S1.中间件产生背景分布式计算环境 1.比较开放系统与分布式系统的异同 分布式系统具备以下属性远程性并发性异步性异质性自主性联合性伸缩性发展性移动性 开放系统具备以下...
  • 是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息。进行异步通.本文接受了JMS的基础知识。业务需求以及功能实现等。 JMS基础---》需求----》过程-----》安装----...
  •  以前的网络主要是客户端与服务器(C/S)结构或浏览器/服务器(B/S) 形式的两层结构,随着企业信息的不断扩大,企业级应用不再满足于简单的两层系统,而是向着三层和多层体系结构发展。中间件就是在其中加入一个...
  • 代码实现:发送消息---》接受消息---》服务器配置 ... public class SenderMessageService { //发布指定消息到指定地址(在发布之前,建议将消息保存到数据库)  public void publish(String type, Object object) { ...
  • JMS消息中间件原理及ActiveMQ使用方法

    千次阅读 2015-08-19 17:13:23
    JMS:Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通.本文接受了JMS的基础知识,业务需求以及...
  • 中间件产生背景分布式计算环境 1.比较开放系统与分布式系统的异同 分布式系统具备以下属性远程性并发性异步性异质性自主性联合性伸缩性发 展性移动性 开放系统具备以下属性开放的集成的灵活的模块化的可联合的可...
  • Laravel中间件实现原理详解本文实例讲述了Laravel的中间件实现原理。分享给大家供大家参考,具体如下:#1 什么是中间件?对于一个Web应用来说,在一个请求真正处理前,我们可能会对请求做各种各样的判断,然后才可以...
  • 中间件技术原理应用课后习题参考答案 S1.中间件产生背景分布式计算环境 1.比较开放系统与分布式系统的异同 分布式系统具备以下属性远程性并发性异步性异质性自主性联合性伸缩性 发展性移动性 开放系统具备以下...
  • 源码剖析 从延时消息的基本原理可以看出,实现延时消息涉及的几个关键因素: 延时级别定义初始化 延时消息的Topic消费队列转移 延时消息的定时调度 延时级别定义初始化 延时消息级别定义 // 类:org.apache....
  • 套用其官方的说法:Koa 应用是一个包含一系列中间件 generator 函数的对象。 这些中间件函数基于 request 请求以一个类似于栈的结构组成并依次执行。 koa的中间件系统原理:  Koa的精妙之处就在于其基于promise...
  • 通过本短信猫中间件数据库接口,能使你现有的系统(如OA、CRM、ERP等系统)轻松实现无线办公功能,无论你用的是哪种开发语言(VB\VC\VFP\asp\jsp\java\pb\delphi...),只要你的系统能读MS SQL 2000 或 Access数据库...
  • Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任 何流行的 Linux 机器上。为什么要使用 Docker?作为一种新兴的虚拟...
  • 《RFID原理及应用》期末复习总结(5)-(第五章 RFID中间件与系统集成技术)第五章 RFID中间件与系统集成技术1、中间件:(基础软件)2、中间件体系结构3、中间件的工作4、RFID中间件平台的层次结构5、RFID中间件的...
  • 实验一 远程过程调用中间件及数据访问中间件 实习二 消息中间件应用开发 实习三 IoCDI和RPC框架实现 实习四 Web Services 开发 说明一下这个是2020年西北农林科技大学的中间件实验,可能针对性比较强,外校的慎下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 494
精华内容 197
关键字:

中间件原理及应用