设为首页 收藏本站
查看: 811|回复: 0

[经验分享] IBM大型主机(Mainframe)技术简介之六——数据库和系统集成(二)

[复制链接]

尚未签到

发表于 2015-10-5 09:22:08 | 显示全部楼层 |阅读模式
  1. 系统集成的基础设施
  
  RPC (Remote Procedure Call)
  
  RPC是现代C/S和分布式程序的基础概念之一,通常由具体的技术来实现。以下是远程通信通常遵循的模式:
  
  客户程序 <-> 桩(残根)函数接口 <-> Channel(协议栈通信通路) <-> 桩(残根)函数接口 <-> 服务程序
  
  优点: 隐藏传输细节; 简化; 透明
  桩函数接口的作用: 程序参数和通信栈上数据之间的转化、组织和传递。
  
  CORBA (COmmon Request Broker Architecture)
  
  CORBA曾经非常流行的一种RPC模式。其基本概念包括:
  物件Object -- 可接受客户请求可位于远端的实体;
  服务Servant -- 物件的功能实现;
  IDL(Interface Definition Language) -- 接口定义语言,一种协议,类&#20284;COM的IDL,WSDL等的作用;用于保证CORBA语言无关
  ORB(Object Request Broker) -- 直接位于通信栈上用于处理请求的机构
  
  通信模式:
  客户程序(使用) <-> 物件对象(引用) | 桩函数接口(根据IDL生成) <-> ORB
  |
  通信链路
  |
  服务程序(创建和维护) <-> 物件对象(实现) | Skeleton函数接口 <-> ORB
  
  RMI (Remote Method Invocation)
  
  是Java程序之间RPC通信的方式。如果JAVA要和其他语言程序通信,则采用CORBA;因此rmic工具为特定桩对象生成Java方法以支持通信。
  在两个Java虚拟机之间则用JRMP(Java Remote Method Protocol)通信。
  Server侧接口需继承:java.rmi.Remote,异常:java.rmi.RemoteException。
  首先System.get/setSecurityManager()设置安全管理对象,java.rmi.registry.*设置Registry;对象创建,然后绑定到Java的命名系统中:Naming.bind(&quot;路径&quot;, obj); 客户端查询则通过Naming.lookup(&quot;路径&quot;);
  
  .NET Remoting(已被WCF取代)
  
  仅仅是上课提到,非上课重点,且为更新技术取代,不再赘述。
  
  2. JEE (J2EE) 系统集成技术发展

  
  1.2 (初始版): Servelets, JSP, EJB, JMS, Mail, JDBC, Transactions, JNDI
  1.3:Connector Architecture, JAAS, XML for Web Services, JSP Tag Libraries
  1.4:Management (JMX), 安全扩展(Security Extensions)
  1.5:(主发布版本) 原部署标记(XML)可以用Annotation取代,Dependency Injection,JPA
  1.6:(最近版本) Profile概念(功能子集),REST的Web Service(JAS-RS),Managed Beans,Bean Validation, EJB Lite, Servlet(支持Annotations, 异步asynchronous,可插卸性pluggability),Faces(Annotations, facelets, AJAX, implicit navigation)
  
  3. JDBC
  
  JDBC
  
  目的:使Java接入关系数据库系统Relational Dababase Management System (RDMS);
  驱动Driver:适应特定数据库的JDBC API;
  注册:v4以后的驱动不需要
  结构:  Java应用 | JDBC API | JDBC SPI | JDBC驱动(数据库提供商提供) <-> 数据库
  步骤:
  1. 驱动注册: Class.forName(&quot;驱动名称&quot;).newInstance(); // need to catch Exception e
  2. 建立连接: Connecton conn = DriverManager.getConnection(url); // need to catch SQLException
  2'. 含参连接: Properties props = new Propertis(); props.setProperty(&quot;user&quot;, &quot;Peter&quot;); props...  conn = DriverManager.getConnection(url, props); 或: conn = DriverManager.getConnection(url, name, passwd);
  2''. DS连接:Context ctx = new InitialContext(); /*JNDI*/ DataSource ds = (DataSource)ctx.Lookup(&quot;路径&quot;); conn = ds.getConnection([user, passwd]); (DataSource是一个Factory产生普通/Pooled/Distributed Transaction的连接)
  3. 使用后关闭连接: conn.close();
  
  JDBC中使用SQL语句
  Statement:执行SQL查询和更新:
  Statement stmt = conn.createStatement(); int res = stmt.executeUpdate(&quot;SQL更新语句&quot;);ResultSet rs = stmt.executeQuery(&quot;SQL查询语句&quot; [, resultSetType concurency, holdability]); ... stmt.close();
  PreparedStatement:允许java变量作为参数:安全性(防止SQL代码注入);效率(驱动可优化执行代码)
  PreparedStatement ps = conn.prepareStatement(&quot;..?..?..?..&quot;); ps.setInt(1,...); ps.setString(2,...); ...; ps.executeUpdate(); ps.close();
  
  JDBC中执行事务(Transaction)控制
  自动控制:conn.setAutoCommit(true/false); /*默认true,每执行一SQL即commit*/
  手动控制:conn.commit(); 或 conn.rollback();
  conn.setTransactionIsolationLevel(int level); /*Connection.TRANSACTION_NONE, READ_COMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE */
  
  CURSOR
  使得一组从Query返回的数据行可被结构化/OO语言访问。
  
  4. Hibernate技术
  
  Hibernate
  一种自动连接到RDBMS的技术,与JavaBean属性对应(Mapping)。
  规定:JDBC属性和数据列的对应;设置映射关系(Mapping);跨数据库支持;DDL生成;同时支持XML或Java Annotation
  配置:连接到DB;映射的类;Caching;Transaction管理
  
  Hibernate API
  
  使用HQL完成数据获取并存入到映射的物件中。
  Query q = session.createQuery(&quot;from Product&quot;);
List products = q.list();
  
  HQL
  例如:
  from Product p where p.name = '...'
  
  5. JPA
  
  JPA
  标准化的Java物件向关系数据库的映射(Java Object Relational Mapping)
  提供者:ORM实现支持:如Hibernate, OpenJPA, EclipseLink等
  因此JPA在概念上是比Hibernate相对更抽象和标准化的架构。
  
  JPA常用Annotations
  
  @Entity   定义一个数据保持对象,修饰类
  @Table   定义表性质,修饰类(Table通常和一个类对应)
  @Basic  定义数据保持属性,修饰变量
  @Column   定义对应RDBMS列的性质,修饰变量(Column通常和一个变量对应)
  @Id  定义实体(entity,即类实例)对应的主键,修饰变量,通常是int型
  @GeneratedValue   定义如何生成主键&#20540;(如IDENTITY),修饰变量
  @NamedQuery   定义一个命名查询,修饰类
  
  JPA过程
  
  (java.persistence.)EntityManagerFactory emf = EntityManagerFactory.createEntityManagerFactory();
  java.persistence.EntityManager em = emf.getEntityManager(); // emf是EntityManager的类厂
  em.getTransaction().begin();
  ... obj ...
  em.persistent(obj);  //数据实例本身保存,和数据库同步(数据实例更改反映到数据库)
  em.getTransaction().commit();
  em.remove(obj);
  em.merge(obj); //数据实例备份被保存,故数据实例后续更改不反映到数据库
  em.close(); emf.close();
  
  参考: http://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge
  
  
  6. EJB技术
  
  EJB
  简化分布式应用开发; 应用组件开发的框架; 作为一个容器,包含: 保持Persistence,事务Transaction Integrity;并发控制;目录服务(Directory Services);部署服务(Deployment Services);安全
  
  Entity Beans
  一个应用实体,例如:顾客、订单等。
  
  Session Beans
  业务逻辑的封装;代表一个单独的客户端交互单元;分成Stateful和Stateless
  
  层次结构
  Web Browser
  ----------------
  Web Container: JSP Pages / Servlets
  ----------------
  EJB Container: EJBs
  ----------------
  Database
  
  组件通信结构
  
  Local接口         EJBLocalHome派生接口作为工厂创建EJBLocalObject派生接口的实例
  Remote接口     EJBHome派生接口作为工厂创建EJBObject派生接口的实例;Remote之不同在于可跨JVM访问
  而实际的业务逻辑由SessionBean的派生类实例完成
  
  参考: http://stackoverflow.com/questions/913267/ejb-confused-about-home-remote-localhome-local-interfaces
  
  状态转换
  
  Stateful: [doesn't exist] <-remove | create/setSessionContext-> Ready <-passivate | activate->  Passive
  Stateless: [doesn't exist] <-remove | create/setSessionContext-> Ready
  
  EJB使用
  
  Context ini = new InitialContext();
  Context env = ini.lookup(&quot;env路径&quot;);
  Object objref = env.lookup(&quot;ejb路径&quot;);
  <Home类型> home = (<Home类型>)PortableRemoteObject.narrow(objref, <Home类型>.class);
  <Object实例> foo = home.create();
  foo.SomeMethod();
  
  EJBQL
  用于定义Entity Bean的finder和select方法。
  Select(私有)返回保持字段(Persistent fields)和相关Entity Bean;
  Finder返回整个Remote Interface对象。
  
  
  7. 设计模式
  
  Singleton
  单一实例全局使用,首次创建。
  
  Factory
  一个实例能够创建出其创建对象实例。
  
  Facade
  统辖和整合子项(物件)功能,提供结构化的方法操作这些物件。
  
  Proxy
  根据一组协定的接口将远程抽象到本地,由本地和远程的基础实现和通信架构完成具体的传递。
  
  Adaptor
  功能适配,使得两方的功能协调
  
  Observer

  事件通知。
  
  Builder

  用诸方法收集参数,并最后根据参数创建一个对象。
  
  8. 企业级设计模式
  
  Design Patterns
  在给定语境下对特定问题解决方案高级抽象
  Patterns(模式): 高级抽象
  Strategy(实现策略): 对一个Pattern的实现层详情或具体策略
  
  Business Delegate
  隐藏远程业务服务(Business Service)复杂通信细节和实现细节,封装。用Service Locator定位服务并使用SF中的接口方法。
  Client-side Artifact,有业务层实现者实现,需要理解业务服务;取出客户端对业务服务变化的依赖;可以从暂时的错误中恢复,Cache结果提速;转换远程异常到应用异常。
  策略:Proxy方式,BD作为Proxy将调用转发到BS,可实现Caching和Validating,通常不处理异常;
  Adapter方式,通常用于异质环境,如JEE与.NET用XML RPC通信,可以根据现有功能定义新的方法适配相应环境。
  
  Session Facade
  向远端提供业务组件和服务,中心化业务逻辑到远端,防止客户端直接访问业务层;隐藏业务物件依赖性和互动。
  Session Facade可以用EJB Session Bean实现与业务组件的交互;Session Facade少含或不含业务逻辑(AS包含)。
  
  Service Locator
  统一定位业务组件;隐藏JNDI查询,类型转换,异常抛出等的具体信息和复杂性。
  方案:Singleton提供定位服务;Cache提升效率;JNDI使用InitialContext;易扩展至其他。
  策略:EJB (home接口, cache);JDBC(lookup Datasource,cache); JPA Entity Manager(no cache needed);Hibernate Session (no cache needed)。
  范式:检查cache,如无按照一般方式获取加入cache并返回。
  
  Application Service
  中心化/抽象化业务逻辑,跨物件作用域业务层组件和服务,业务实现所需的所有结构化(Procedural)业务逻辑;在Service Facade中实现跨物件业务逻辑可能会导致Facade之间冗余。比Service Facade粗,但比BO细。更复杂的交互可由多个AS协调完成。
  
  Business Objects (业务层 Business-tier)
  在物件模型(Object Model)中分离业务数据和逻辑;物件为可重用的一层描述业务域(Business Domain)的业务实体;
  统一业务行为和状态,避免业务逻辑冗余。
  包含:内部的业务逻辑和规则,作用于本BO;
  不包含:外部的业务逻辑和规则,作用于多个BO(由AS完成)。
  客户信息的验证(Validation)。
  策略:POJO&#43;保持策略(或更好地用DAO);EJB&#43;Bean/Container Managed Persistence;
  
  Data Access Objects
  数据访问和数据处理(Manipulation)分离,故而将应用逻辑和数据保持和访问逻辑(persistence/data access logic)分开。
  封装/抽象化到数据存储的访问;处理到数据存储的连接;没有详情和信息的泄漏,例如没有java.sql.SQLException,ResultSet的抛出等;统一抽象的客户端API;使用TO进行数据返回和用户更改。
  
  Transfer Objects
  用于传送多个数据元素,跨越应用各层(App. Tiers);如果用Entity Bean的属性getter和setter来完成则由于数量多而低效。
  它们只是简单的Java类,可用字段直接访问或getter/setter或仅getter可读访问。
  策略:一个App中使用不同的TO; 可更新,客户端可修改并返回更改;Entity(Business Object)继承了TO的实现策略减少代码冗余。
  
  9. 其他方式
  
  消息队列
  安全;负载平衡,可增加请求接受数量;消息驱动架构,到达后自动触发程序处理,队列路由消息;容错,收到的消息必会传递。
  程序到程序,从队列中读写消息;无需专有通信连接
  
  Websphere MQ
  Message Descriptor:ID, Type, Expiry Time, Priority, QueueNameForReply
  Message Data: 消息数据主体
  消息类型:Datagram,请求无回复;Request,请求需回复;Reply,为回复;Report,事件报告,如错误。
  Persistent:记录(log)到二级存储,重启后可恢复; Non-persistent,不可恢复。
  
  MQEnvironment
  定义一系列不同的连接属性,用于和MQManager连接时提供环境信息。
  
  MQManager
  维护一些队列MQQueue
  方法:
  begin开始一个事务
  backout撤销一个变化
  commit提交一个事务
  
  MQQueue
  方法:
  void get(MQMessage message[, MQGetMessageOptions getMessageOptions, int maxMsgSize]) throws MQException;
  void set(MQMessage message[, MQPutMessageOptions putMessageOptions]) throws MQException;
  
  JMS (Javs Message Service)
  
  方式:
  1. 点对点(Point-to-point)队列: 一个Producer对应一个Consumer,无Consumer表示消息挂起。
  2. 发布订阅(Publish-subscribe): 可被任意个Consumers获得,Consumer注册定于一个topic,当无对应topic的Consumer,消息丢弃。
  
  JMS消息
  消息体(可选),类型:空消息;流(一串Java基本类型);Map(名/&#20540;对);Text(字符串信息,如XML);Object(例如Java对象);字节串
  消息头:用于路由及辨识的消息
  属性:&#20540;只能是Java基本类型,只能在消息创建时设置
  
  JMS框架和流程

  ConnectionFactory为连接类厂,创建连接Connection
  Connection创建后是Stop状态,用start()/stop()管理消息流动;它也是Session类厂
  JMS Destination:源或目的,是实现(如MQQueue)的抽象,或类&#20284;于WCF中的Endpoint
  Session创建Message,也创建Producer和Consumer,分别从或向对应Destination中获取或发送消息。
  异步获取,可以Consumer.setMessageListener(一个MessageListener对象)
  
  IMS (IBM Information Management System)
  和Java, JDBC和Web Servces交互
  数据模型(Data Model):分成多个Segments,由数据库组织Segment的Hierarchical Structure。
  事务模型(Transaction Model):从终端(如Web Client等)获得事务,队列成消息,Schedulers启动业务应用来处理事务。
  
  IMS的两个Java程序的执行环境
  Java Batch Processing (JBP) regions:
  1. 创建IMSDataSource对象并设置参数,包括数据存储名称,数据类型,Metadata的URL
  2. 创建Application对象,在尤其创建获得Transaction对象tran
  3. 从IMSDataSource对象获取连接Connection对象conn, 在conn上可以用JDBC的接口方式执行Query Statements
  4. 由PSBFactory.createPSB()创建PSB对象,再由其上的getPCB获得PCB,再由PCB上getSSAList获得SSAList ssa
  5. PathSet pathSet = pcb.batchRetrieve(ssa); pathSet.hasNext() Path path = pathSet.next()可遍历树状路径。
  6. tran.commit(),psb.close()
  
  Java Message Processing (JMP) regions,与JBP流程不同在不用PSB而用:
  1. 创建IMSFieldMessage派生类用于封装一组DLITypeInfo
  2. 从Application对象中获得MessageQueue
  3. IOMessage ioMessage = app.getIOMessage(&quot;到1定义的类的路径&quot;);
  4. 循环中从MessageQueue中获得更新ioMessage,进行处理,并最后将ioMessage insert到MessageQueue中
  
  
  IMS访问
  
  2型JDBC驱动:借助JNI并在同一个z/Series逻辑分区
  4型JDBC驱动:可以通过TCP/IP访问
  JDBC驱动基于IMS结构虚拟一个关系数据库,功能包括Aggregate函数(SUM, MIN, MAX, ...),ORDER BY和GROUP BY
  
  IMS Universal DL/I驱动:本地访问IMS的API,Java实现调用接口,以比JDBC更低级方式接入IMS;创建Search Segment Arugments;
  Program Communication Block物件用于读写和执行批处理和segments;完整的segment hierarchy的浏览
  
  IMS元数据(Metadata
  描述IMS Program Specifiation Blocks, Database(DBDs),segments,字段,关系,键/非键,和数据类型等;
  IMS Universal驱动用之创建和审核查询;保证所有相关的DBDs都可用;DLIModel工具将会生成合适的Java代码。
  
  
  10. Web Services
  
  Service:抽象的功能集合;
  Agent:Service的具体实现;
  Provider:提供Agent的实体;
  Requester:需要使用Agent的实体。
  
  SOAP - 交换结构化信息的协议,W3C标准XML应用通常使用HTTP和其他协议用于消息传输
  消息结构: Envelope { Header(可选); Body; Fault(可选); }
  
  WSDL - Web Service Description Language, XML应用,描述服务,语言和平台无关,XML Schema用于数据类型
  &#26684;式:definitions, types, messages, portType, binding, service
  工具:wsgen, wsimport
  
  REST - REpresentational State Transfer,相对轻量级的WS。限制:
  C/S,两侧可分别演化; Server不保留状态,所有信息在请求中包含; 可Cache; Layered System客户无法获知对方身份; Code on demand (可选,返回给客户Javascript或Java Applets);统一接口;
  操作:基于HTTP操作,组(collection)URI和element URI;GET获取成员/PUT更改或创建成员/POST新建项/DELETE删除组或成员
  
  JSON (原JavaScript Object Notation,现在语言无关)
  序列化和传送数据
  
  11. 后续发展
  
  SOA (Service Oriented Architecture,但事实上并不能称为Architecture,
  SOA是一种模式,而Web Services则对应地是一种具体的策略。基于SOA的系统应该将功能用一组可互操作的服务实现,而这些服务可以被位于多个业务域的不同系统使用。
  
  SOA服务
  用IT方式实现业务功能;一个单独的动作,如创建一个顾客,或更改顾客名称,支付等;隐藏技术细节;可被商务/管理人员理解
  Producer提供服务的实体,Consumer访问服务的实体。
  
  送耦合
  防止组件间依赖;考虑异步通信问题;异质数据类型;大系统中,最小的可提供共识必须保证;系统越大,耦合需要越松。
  
  一些问题
  数据类型协调(Data Type Harmonisation): CRM和ERP对Customer的定义不会一样。
  Mediators:Consumer寻找Producer的方法:Name service,搜寻Provider然后调用;路由(由基础设施实现)。
  Validation:尽量早;尽量不用底层执行该验证;不同的情形不同方式
  数据类型:考虑能最大化交互
  双步提交(Two-step Commit):较高的资源需求;较高的编程要求;不是所有系统支持;需要所有系统在线
  补偿提交(Commit with Compensation):保证总体一致性;顺序更改,可回退;混入人工
  
  服务分类
  基础服务(Basic Services):原子性;数据(业务数据处理,事务)/逻辑服务(如验证信息);自治自包含;可能有重复
  组合服务(Composed Services):组合;短时(Short-running);无状态;例如,转账
  处理服务(Process Services):表示业务过程(Business Process);长时(Long-running);通常有状态以跟踪业务流进程;例如买保险网购等
  
SOA层次
  基础层(Fundamental)——通常只有基础服务
  联合层(Federated)——基础和组合服务,组织内增&#20540;
  处理使能层(Process-enabled)——包含处理服务,或需要人工介入
  
  服务的其他特性
  公共和内部服务:安全性;可用性;稳定性;部署
  读服务:较简单,脚步稳定,可能需要审查(Auditing);写服务:可能需要补偿,审查和跟踪更新
  
  关键要素
  基础设施;架构;处理过程(包含管理支配(Governance))
  
  ESB (Enterprise Service Bus)
  
  允许Consumer访问Provider的服务
  互操作性
  解决服务之间的阻抗性失配(impedance mismatch)
  
  Facilities of ESB:
  Connectivity, Data transformation, Routing, Security, Reliability, Service Management, Monitoring/Logging, 等
  
  异质ESB,通过路由等连接
  Mediation
  
  BPEL (Business Process Execution Language)

  
  Business Process Management: 技术使能的,对长期的和多步的跨系统和人员的过程获得可见性和控制
  Business Process Modelling: 描述所有或部分业务过程的一组实践
  
  自下而上设计:可能会导致过于复杂繁难的技术
  自下而上设计:可能会导致冗余或缺漏
  实践上可以采取综合的设计方法
  
  BPEL: 一种集成Web Services的技术,用于定义包含启动Web Services的BP,本身作为WS触发,OASIS维护,XML应用,可执行的规则
  
  基本活动:
  receive(接受请求), invoke(调用Web Services), assign(处理变量), validate(验证保存的XML), reply(回复消息)
  throw(产生错误),rethrow(转发错误),exit(退出一个过程),compensate(调用补偿活动),compensateScope(在子作用域补偿),
  wait(等一段时间),empty(无操作),extensionActivity(语言扩展包装)
  
  结构化活动:
  flow(并行执行),sequence(顺序执行),while(条件循环),repeat(循环直到),pick(阻塞到消息到达),forEach(顺序/并行),
  if/elseif/else(分支),scope(创建子作用域)
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-122807-1-1.html 上篇帖子: Emacs Gnus 的基本配置与使用(转自http://www.ibm.com/developerworks/cn/linux/l-cn-emacsgnus/ 下篇帖子: 【转】IBM总架构师寇卫东:话说程序员的职业生涯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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