CN1748201A - 数据驱动的应用程序集成适配器 - Google Patents
数据驱动的应用程序集成适配器 Download PDFInfo
- Publication number
- CN1748201A CN1748201A CNA2004800036737A CN200480003673A CN1748201A CN 1748201 A CN1748201 A CN 1748201A CN A2004800036737 A CNA2004800036737 A CN A2004800036737A CN 200480003673 A CN200480003673 A CN 200480003673A CN 1748201 A CN1748201 A CN 1748201A
- Authority
- CN
- China
- Prior art keywords
- adapter
- transmission
- message
- receiver
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
- Communication Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
软件应用程序集成,包括构建应用程序集成适配器,其中,所述构建是根据配置文件而进行的。配置文件包括描述适配器的数据。实施例包括通过所述适配器在多个应用程序之间传递集成消息。配置文件包括至少两个通信传输的标识,包括用于数据通信传输的配置参数。在典型的实施例中,构建应用程序集成适配器包括创建在适配器配置文件中标识的传输,以及根据配置参数配置传输。
Description
技术领域
本发明的领域是数据处理,具体来说,是用于软件应用程序集成的方法、系统和产品。
背景技术
软件应用程序集成对于提高效率和降低成本是十分重要的。通过简化和集成业务进程,公司可以大大地降低操作开销。通过连接业务支持系统和操作支持系统,应用程序能够协调地工作,而不会产生很大的干涉。通过从点对点消息离开,公司可以获得集中消息基础结构的好处:对业务进程的控制越大,操作效率就越高。
过去,只能通过较高的成本才能获得软件应用程序集成。业务支持系统和操作支持系统的组件常常是由单独的制造商或开发商开发和制造的,它们利用不同的数据结构来对相同的数据进行编码,并利用不同的数据通信模式。来自一个开发商的库存控制应用程序可以跨TCP/IP向由一个完全不同的公司开发的总账中发布库存变动。同一个库存控制应用程序可以以HTML通过HTTP向使用第三数据结构集的来自第三供应商的购买系统发布。购买系统可以使用数据结构的第三组合来向总账发布。如此下去。组合是无止境的。在过去,每一个这样的集成都是通过雇佣系统分析师、软件开发项目管理员、软件系统架构师、高级程序员、初级程序员等等来实现的,以构建应用程序集成适配器,以转换数据结构并管理所有这些不同的软件应用程序系统之间的数据通信。
这样的应用程序集成适配器通常是以所谓的“点对点”的方式实现的。即,开发适配器,以使用此特定数据通信协议将此特定库存应用程序通过此特定数据通信联结到此特定总账。对于头两个要集成的应用程序,添加一个新应用程序到混合应用程序中都需要相同的新开发成本。由于所有这些原因,具有改善的用于进行应用程序集成的装置和方法是有利的。
发明内容
本发明的示范性实施例包括应用程序集成的方法。这样的实施例包括构建构建应用程序集成适配器,其中,所述构建是根据包括描述适配器的数据的配置文件而进行的。典型的实施例包括通过所述适配器在多个应用程序之间传递集成消息。
本发明的示范性实施例包括提供适配器配置文件,配置文件包括至少两个通信传输的标识,包括用于数据通信传输的配置参数。在这样的实施例中,构建应用程序集成适配器包括创建在适配器配置文件中标识的传输,以及根据配置参数配置传输。在典型的实施例中,提供适配器配置文件包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括在适配器内的多个传输之间的数据路由的路由图。在示范性实施例中,在多个应用程序之间传递集成消息是根据所述路由图进行的。
在本发明的示范性实施例中,每一个传输都包括用于创建接收器的参数化的工厂方法。在这样的实施例中,配置传输包括为每一个传输创建接收器,这是通过调用用于以至少某些配置参数创建接收器的参数化的工厂方法来执行的,以及向每一个接收器注册传输事件监听器。在典型的实施例中,应用程序集成适配器包括传输事件监听器。
在示范性实施例中,每一个传输都包括用于创建发送器的工厂方法。在这样的实施例中,配置传输包括为每一个传输创建发送器。在典型的实施例中,提供适配器配置文件包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括一个或多个数据传输管理器的标识,包括数据传输管理器的配置参数。在这样的实施例中,构建应用程序集成适配器包括创建在配置文件中标识的传输管理器,以及根据配置参数配置传输管理器。
在本发明的示范性实施例中,通过所述适配器在多个应用程序之间传递集成消息包括从源应用程序接收具有源消息格式和源数据结构的集成消息,将集成消息从源消息格式转换为对目标应用程序有用的目标消息格式,并将集成消息发送到目标应用程序。在这样的实施例中,通过适配器在多个应用程序之间传递集成消息包括从源应用程序接收具有源消息格式和源数据结构的集成消息,将集成消息从源消息格式转换为对适配器内的内部处理有用的临时消息格式,特别包括数据变换和安全处理,而且还包括其他的处理模式,如那些精通本技术的人所理解的。典型的实施例还包括将集成消息从源数据结构变换为目标数据结构,并将集成消息发送到目标应用程序。
这样的实施例包括将集成消息从临时消息格式转换为对目标应用程序有用的目标消息格式。
通过如附图中所说明的本发明的示范性实施例的特定的描述,本发明的上述目标及其他目标、特点和优点将变得显而易见,其中,类似的引用号一般表示本发明的示范性实施例的类似的部分。
附图说明
图1是说明根据本发明的各个实施例的应用程序集成适配器的体系结构方面的方框图。
图1a显示了为三个应用程序提供集成的适配器的比较详细的体系结构示例。
图1b显示了为应用程序提供集成的适配器的另一个体系结构示例。
图2阐明了说明利用应用程序集成适配器的应用程序集成的方法的数据流程图。
图3阐明了说明根据本发明的创建应用程序集成适配器的传输的接收器和发送器的方法的数据流程图。
图4阐明了说明创建传输管理器的示范性方法的数据流程图。
图5说明了根据本发明的实施例的从中构建适配器的示范性类之间的关系。
图5a-5h说明了在本发明的各个示范性实施例中有用的类结构的示例。
图6阐明了说明构建应用程序集成适配器的方法的调用序列图表。
图7阐明了描述通过适配器在多个应用程序之间传递集成消息的示范性方法的数据流程图。
图8阐明了描述通过适配器在多个应用程序之间传递集成消息的另一个示范性方法的数据流程图。
图9阐明了说明通过适配器在多个应用程序之间传递集成消息的方法的调用序列图表。
具体实施方式
引言
下面将就本发明的软件应用程序集成的方法对本发明进行比较详细的描述。然而,精通本技术的人员将识别到,包括根据所说明的方法的用于操作的合适的编程装置的任何计算机系统也将在本发明的范围内。
合适的编程装置包括用于指示计算机系统执行本发明的方法的步骤的任何装置,例如,包括由连接到计算机存储器的处理单元和算术逻辑电路组成的系统,这些系统具有存储在计算机存储器中的能力,计算机存储器包括被配置为存储数据和程序指令、由处理单元执行的本发明的方法的编程的步骤的电子电路。本发明还可以以供任何合适的数据处理系统使用的诸如磁盘或其他记录介质之类的计算机程序产品来实现。
计算机程序产品的实施例可以通过使用用于存储机器可读信息的任何记录介质来实现,包括磁性介质、光学介质或其他合适的介质。精通本技术的人员将立刻识别,具有合适的编程装置的任何计算机系统将能够执行以程序产品实现的本发明的方法的步骤。精通本技术的人员将立刻识别到,虽然在此说明书中描述的大多数示范性实施例是指安装在计算机硬件上并在计算机硬件上执行的软件,尽管如此,作为固件或作为硬件实现的替代实施例也在本发明范围内。
定义
在此说明书中,术语“字段”、“数据元素”和“属性”,除非上下文特别指出,一般用作同义词,表示数字数据的单个元素。数据元素的聚集被称为“记录”或“数据结构”。记录的聚集被称为“表”或“文件”。文件或表的聚合被称为“数据库”。包括成员方法、函数或软件例程以及数据元素的复杂数据结构被称为“类”。类的实例被称为“对象”或“类对象”。
“802.11”是指由IEEE为无线局域网技术开发的系列规范。802.11规范了无线客户端和基站之间或两个无线客户端之间的空中接口。
“API”是“application programming interface”(应用程序编程接口)的缩写。API是用于连编软件应用程序的例程、协议和工具的集合。
“蓝牙”是指针对LAN或其他网络上的客户端设备之间和客户端设备和资源之间进行RF联结的短距离无线电技术的工业规范。一个叫做“蓝牙特殊兴趣组”的管理机构对设备进行测试,并鉴定为符合蓝牙标准。蓝牙规范包括提供设计规范的“基础核心”,以及提供互操作性原则的“基础配置文件”。
“CORBA”表示Common Object Request Broker Architecture(公用对象请求代理体系结构),这是由对象管理组(“OMG”)于1991首次发布的针对远程过程调用的标准。CORBA可以被视为一种进行“RPC”或远程过程调用的面向对象的方式,虽然CORBA也同样支持许多RPC中不存在的特点。通过使用CORBA技术,以诸如Java和C++之类的面向对象的程序设计语言执行的远程方法调用看起来像对本地对象中的本地成员方法的调用。
CORBA数据通信是由被称为对象请求中介器或“ORB”的中间件应用程序来进行管理的。ORB利用“GIOP”General Inter-ORBProtocol(通用ORB间的协议)进行通信,这是定义用于在异构型计算机和它们的各种体系结构之间传递消息的结构和格式的CORBA协议。GIOP不基于诸如IPX或TCP/IP之类的任何特定网络协议。被定义为在其最广泛使用的通信传输平台TCP/IP上起作用的GIOP叫做“IIOP”(Internet Inter-ORB Protocol,因特网ORB间的协议)。由于tcp/ip的通用性,此说明书,在描述示例实施例时,倾向于可互换地或多或少使用术语GIOP和IIOP,虽然使用术语IIOP并不打算将本发明的实施例的应用限制于单一的传输协议套件TCP/IP。
“CGI”表示“Common Gateway Interface”(公共网关接口),这是针对Web服务器和Web客户端之间的资源的数据通信的标准技术。具体来说,CGI在服务器和实际管理往返于文件系统和数据库之间的数据的读取和写入的服务器端的“网关”程序之间提供了标准接口。CGI接口通常通过环境变量,或作为要由网关程序通过它们的标准输入来读取的数据向网关程序发送数据。网关程序通常通过标准输出来返回数据。
“用于进行数据通信的联结”表示任何形式的数据通信,无线、802.11b、蓝牙、红外、无线电、因特网协议、HTTP协议、电子邮件协议、网络、直接连接、专用电话线、拨号、利用EIA232(RS-232)、IEEE 1394(通常叫做′Firewire′连接,Apple Computer,Inc.的商标)的串行联结,通用串行总线(“USB”)、硬线连接的并行端口连接,及其他形式的数据通信,如那些精通本技术的人所理解的。用于进行数据通信的联结包括文件的共享,包括从应用程序向应用程序、从适配器向应用程序,或从应用程序向适配器传输文件,包括平面文件、二进制文件、文本文件、数据库文件、HTML文件、XML文档等等。
″DCOM″表示′Distributed Component Object Model′(分布式组件对象模型),这是Microsoft的的组件对象模型(“COM”)的扩展,用于支持跨网络分布的对象。DCOM是某些Microsoft操作系统的一部分,包括Windows NT,并且还可用于其他操作系统。DCOM与IBM的DSOM协议具有相同的目的,后者是CORBA的流行的实现方式。与在许多操作系统上运行的CORBA不同,DCOM当前只是为Windows实现的。
“格式”或“数据格式”是指用于进行数据处理和数据通信的数据编码的总体形式。数据格式的示例包括以HTML文档、XML文档、Java数据结构、C++数据结构、C数据结构等等的形式编码的数据。除了格式外,计算计数据还具有结构,包括数据元素名称、数据元素类型,以及数据元素值。在本说明书中,改变或转换数据的格式被称为“数据转换”、“转换”。在本说明书中,改变或转换数据的结构被称为“数据变换”、“变换”。
″HTML″代表′HyperText Markup Language′(超文本标记语言),这是一个用于在浏览器上显示Web页面的标准标记语言。
″HTTP″代表′HyperText Transport Protocol′(超文本传输协议),这是万维网的标准数据通信协议。
″JMS″表示′Java Message Service′(Java消息服务),这是一个专门为应用程序集成消息设计的Java API。JMS提供一种了支持对消息通信进行异步管理的Java企业豆。JMS发送和接收可以参与通过Java事务API(“JTA”)控制的事务。JTA与Java事务服务(“JTS”)协调地进行操作。JTA允许应用程序和应用程序服务器访问事务。JTS规范了支持JTA并在API下面的级别实现OMG对象事务服务(“OTS”)的Java映射的事务管理器的实现方式。JTS使用IIOP来传播事务。
″IMAP″表示′Internet Message Access Protocol′(因特网消息访问协议)。IMAP是用于从因特网电子邮件服务器中检索电子邮件消息的协议。在“离线”操作中,电子邮件客户端从电子邮件服务器将消息获取到其中运行了电子邮件客户端程序的客户端机器上,然后,从服务器中删除电子邮件消息。在“在线”操作中,消息可以留在电子邮件服务器上,并由电子邮件客户端程序远程进行操纵。POP支持离线电子邮件操作。而较新的协议IMAP支持离线和在线两种电子邮件操作。
″LAN″表示′local area network′(局域网)。
“网络”在此规范中用来表示用于在计算机或计算机系统之间进行数据通信的任何联网的联结。可以与本发明一起使用的网络的示例包括内部网、Extranet、因特网、局域网、广域网,及其他网络布局,如那些精通本技术的人所理解的。
″POP″表示′Post Office Protocol′(邮局协议)。POP是由电子邮件客户端用来从邮件服务器中检索电子邮件的协议。POP有两种版本。POP2需要SMTP才能从客户端或其他服务器接收电子邮件消息。较新的版本POP3可以与SMTP一起使用,也可以不与SMTP一起使用。
″RMI″是指′Remote Method Invocation′(远程方法调用),这是由Sun Microsystems开发的用于使Java对象能远程与其他Java对象进行通信的协议。RMI是一个相对简单的协议,但与诸如CORBA和DCOM之类的比较复杂的协议不同,它只能与Java对象一起使用。CORBA和DCOM支持以任何语言创建的对象之间的网络通信和远程过程调用。
此说明书中的“服务器”是指网络上的管理资源和对资源进行访问的请求的计算机或包括自动化计算机的设备。“安全服务器”可以是通过使用根据本发明的安全对象管理对资源进行的访问的任何服务器。具体来说,“Web服务器”或“HTTP服务器”是通过HTTP与浏览器进行通信以便管理以诸如HTML之类的标记语言编写的文档、数字对象,及其他资源,并将它们提供给网络计算机的服务器。
″Servlet″与applet一样,是被设计为从另一个程序运行而不是直接从操作系统中运行的程序。具体来说,″Servlets″被设计为在服务器上从servlets的常规Java接口运行。Servlets是扩展诸如启用Java的Web服务器之类的面向请求/响应的服务器的模块。Java servlets是CGI程序的替代。两者之间的最大区别是Javaservlet是永久的。一旦启动了servlet,它会停留在存储器中,并可以满足多个请求。相反,CGI程序在它执行了一次之后就消失,只能满足对每一个加载和运行的单一请求。Java servlets的持久性使它们一般而言比CGI更快,因为在第一次加载之后不需要花时间加载servlet供调用。
″SMTP″表示′Simple Message Transfer Protocol′(简单邮件传输协议)。SMTP是用于在服务器之间发送电子邮件消息的协议。因特网电子邮件流量主要通过SMTP在服务器之间进行传输。在电子邮件到达目标服务器之后,通过电子邮件客户端使用POP或IMAP从服务器检索电子邮件消息。SMTP还用于从邮件客户端向邮件服务器发送消息。
″SOAP″是简单对象访问协议,这是一个独立于平台通过因特网进行应用程序通信的协议。SOAP包括用于表示远程过程调用和响应的约定。SOAP可以潜在地和各种传输协议一起使用,虽然实际上,到目前为止,它主要与HTTP一起使用。SOAP一般使用XML来定义消息格式,然后添加用于进行数据通信的HTTP标头。
″TCP/IP″是指实现数据通信协议的标准ISO协议堆栈的网络层和传输层的两个数据通信协议。严格来说,“TCP”(“传输控制协议”)是驻留在“IP”(“因特网协议”)上的单独的层。然而,这两者常常被一起作为“TCP/IP协议套件”来提及。
″URI″或″Universal Resource Identifier″(通用资源标识符)是通过网络可访问的任何命名空间中的有名称的对象的标识符。URI可以用于任何访问方案,包括文件传输协议或“FTP”、Gopher,以及Web。在本发明的典型的实施例中使用的URI通常包括因特网协议地址或解析为因特网协议地址的域名,标识资源,具体来说,Web页面、CGI脚本或servlet在网络(通常是因特网,在其ISO网络层中使用因特网协议的网络)上的位置。指向诸如特定HTML文件、CGI脚本或servlet之类的特定资源的URI,通常包括定位并标识通过服务器联结到网络的文件系统中的特定资源的路径名或文件名。诸如CGI文件或servlet之类的特定资源是可执行的,以存储或检索数据,URI常常包括查询参数,或要以编码为URI的数据的形式存储的数据。这样的参数或要存储的数据被称为“URI编码的数据”。
″URL″或“通用资源定位器”包含URI的一种子集,其中,每一个URL都解析为网络地址。即,URI和URL的区别在于,URI标识命名空间中的指定对象,其中,名称可以解析为也可以不必解析为地址,而URL则必须解析为地址。虽然标准当今是根据URI编写的,但是,这样的用于将Web数据位置与网络地址关联以便进行数据通信的那种类型的与Web相关的标识符(被称为“URL”)仍是比较常见的。此说明书将这样的标识符一般称为URI。
″WAN″表示′wide area network′(广域网)。WAN的一个示例是因特网。
″World Wide Web″或简称为″web″是指支持特殊格式的文档,采用诸如HTML、XML(可扩展标记语言)、WML(无线标记语言)或HDML(手持设备标记语言)之类的标记语言的格式的文档的因特网协议(“IP”)服务器的系统。在此说明书中,术语“Web”也是指实现诸如HTTP或WAP(“无线访问协议”)之类的超级链接协议的任何服务器或互相连接的服务器组,支持URI和以标记语言编写的文档,不管这样的服务器或服务器组是否也同样连接到万维网。
″XML″是指′extensible Markup Language′(可扩展标记语言),一个用于结构化数据的著名标准。XML被设计用于提供灵活而可适应的信息格式和标识。XML叫做可扩展的,因为它没有像HTML(超文本标记语言)那样的固定格式,后者是预定义标记的集合。相反,XML实际上是“元语言”-用于描述其他语言的语言-允许用户为许多不同的文档类型设计自定义的标记语言。然而,XML也不是编程语言;是用于结构化数据的标记标准。然而,在此说明书中,由于XML具有对计算计数据进行编码或结构化的效果,因此,准备XML文档和XSL规范,虽然它们可以不必由计算机程序设计员来执行,也被视为计算机程序设计或软件开发。
与HTML一样,XML也利用元素、标记和属性。元素是由标记标识的分段。元素可能具有空的值,元素的实例的值是元素的实例的开始标记和结束标记之间的字符串。“标记”是用′<′和′>′括起来的词语,属性是具有类似于AttributeName=″value″的形式的元素的定义的特征。HTML说明了每一个标记和属性表示什么意思,以及它们之间的如何在浏览器中所呈现的模样,而XML只使用标记来分隔数据片段,并将对数据的解释完全由读取数据的应用程序自己来决定。换句话说,虽然在HTML的预定义的语法中,″<p>″表示′paragraph′,但是,XML文件中的″<p>″的意思是由正在读取的应用程序确定的。根据上下文,它可以是价格、参数、人,或者在在很多情况下,它表示与P毫无关系的实体。
″XSL″是指′Extensible Style Language′(可扩展样式语言),是在创建HTML或XML页面时将样式与内容分离的规范。XSL规范的工作原理与模板一样,允许用户和设计人员将单一样式文档应用到多个页面。XSL是由万维网联合会提供的第二个样式规范。第一个规范叫做“级联样式表”,类似于XSL,但不包括XSL的两个主要创新-允许开发人员决定打印Web页面的方式,以及在本发明的许多实施例中都特别有用的创新,允许用户或开发人员跨不同应用程序地传输XML文档的规范。即,XSL具有规范以XML表达的数据结构的变换的能力。
″XSLT″是指′Extensible Style Language Transformation′(可扩展样式语言变换)的缩写,是在XSL样式表中将XML文档变换为其他XML文档时使用的语言。XSL处理器读取XML文档并遵循XSL样式表中的指令,然后它输出新的XML文档或XML文档片段。这在本发明的其中相同的数据格式需要转换为以XML表示的不同结构的各种实施例中特别有用。
应用短序集成
本发明的示范性实施例提供了能够进行数据变换、数据转换,以及以各种计算机体系结构进行数据通信的应用程序集成适配器。图1、1a和1b说明了被根据本发明的各种实施例的应用程序集成适配器(“适配器”)支持的,或对于这些适配器有用的多个体系结构布局。这些图还呈现了根据本发明的各个实施例的适配器本身的某些体系结构方面。
图1阐明了多个适配器之间的示范性数据通信体系结构。根据图1的一个示范性体系结构,适配器(102)将安全防火墙(128)内的应用程序(106)的功能与同一个防火墙(128)的另一侧的应用程序(116)集成。适配器为了进行数据通信联结(118)通过WAN(126)到防火墙(128)外部的应用程序(116)。适配器为了进行数据通信联结(106)到防火墙(128)(事实上,与适配器(102)一起安装在同一个应用程序服务器(104)上)内的应用程序(116)。
用于进行数据通信的联结包括用于进行数据通信(光学、电的、机械的或其他)的任何方法、设备或协议。用于进行数据通信的联结当然也包括诸如HTTP、CORBA、DCOM、IIOP、GIOP、RMI、SOAP等等的所有数据通信协议和远程过程协议。
用于进行数据通信的联结包括通过简单网络寻呼协议或′SNPP′(该协议的版本3是如RFC1861中定义的增强的双向协议)向由电话号码标识的无线寻呼机客户端的消息。RFC1861是因特网工程任务组的网络工作组发布的因特网协议套件规范文档。
用于进行数据通信的联结包括发往无线寻呼机客户端WCTP“无线通信传输协议”的消息。WCTP是另一个双向消息协议。WCTP是使用HTTP作为其传输机制来进行设计的。WCTP是由PCIA(个人通信工业协会)的成员发布的开放式、非专有的工业标准。
用于进行数据通信的联结包括在HTTP上通过许多专有即时消息协议中的任何一个协议传输的消息,所有这些协议都具有只用于此用途(即,用于诸如PVR之类的消息应用中)的应用程序编程接口(“APIs”)。这样的具有API的即时消息协议的示例包括美国在线(“AOL”)、Microsoft Network(“MSN”)、Yahoo、Imici,Inc.,以及ICQ,Inc.所推出的那些协议。
用于进行数据通信的联结包括在设备、个人计算机、膝上型电脑、手持设备、蜂窝电话、服务器等等中的任何一个设备上在适配器和应用程序之间通过SMTP、POP、IMAP或其他电子邮件协议作为电子邮件来传输消息。
用于进行数据通信的联结包括任何电信或电话业务支持的小消息服务(“SMS”)。SMS提供了用于在无线设备之间传输短消息的机制。SMS支持以类似于字母-数字寻呼的方式从适配器向应用程序传输短的文本消息。SMS利用小消息服务中心或′SMSC′作为短消息的存储转发系统。与诸如字母数字寻呼之类的其他现有的文本消息传输服务不同,SMS是可靠的系统,提供了保证将文本消息提供到目标的机制。另外,SMS还支持允许与不同的消息源和目标进行互连的多个输入机制。适配器,或其发送器或接收器,可以作为所谓的“外部短消息实体”或′ESME′,并作为HTTP窗体或电子邮件消息传输SMS消息。适配器可以作为移动始发者或′MO′,即,启用SMS的客户端设备,或实际上,蜂窝电话。SMS的一个显著特点是,启用SMS的客户端能够在任何时间接收或提交短消息,不管是否正在进行话音或数据呼叫。
用于进行数据通信的联结还包括除了数据通信协议之外的数据联结的方法,包括,共享存储器分段,这可能是在这样的体系结构中利用的方法:其中,在具有被适配器集成的应用程序(106)的同一个服务器(104)上安装了适配器(102)。应用程序(106)内的通信模块和具有适配器(102)的通信模块,如在本说明书中下面比较详细地讨论的接收器和发送器,可以作为同步的Java方法或通过共享存储器分段传递消息的C或C++线程来实现,互斥通过使用信号来进行管理。
如上所述,用于进行数据通信的联结包括有线网络协议以及无线网络协议,以及消息系统。然而,此外,用于进行数据通信的联结还包括非网络联结,包括根据RS-232(EIA232)、IEEE 1394(通常叫做′Firewire′连接,Apple Computer,Inc.的商标)的有线串行联结,硬线连接的并行端口连接,及其他直接、有线联结,如那些精通本技术的人所理解的。
根据图1的另一个示范性体系结构,客户端工作站(132)上的适配器(136)将安装在同一个工作站上的应用程序(134)的功能与为进行数据通信通过LAN(130)联结(136)到工作站的服务器上的应用程序(116)集成。由于适配器(136)和应用程序(134)位于同一台计算机上,适配器(136)和应用程序(134)之间的用于进行数据通信的联结(108)可以作为对工作站上的软件程序或模块的本地调用来实现,甚至通过共享存储器分段或通过其他方法来实现,正如那些精通本技术的人所理解的,以便同一台计算机上的执行的程序或线程彼此进行通信。虽然此特定体系结构示例在服务器(114)和工作站(132)之间具有LAN(130)联结,至此、读者可以理解,工作站可以是笔记本电脑,用于进行数据通信的联结(136)可以是服务器(114)和工作站(132)之间的RS232或USB连接。
根据图1的另一个示范性体系结构,适配器(102)集成了三个应用程序(106,112,116)的功能。适配器(102)为了进行数据通信通过WAN(126)联结(116)到一个应用程序(116)。适配器(102)为了进行数据通信联结(108)到安装在具有适配器的同一个服务器(104)上的另一个应用程序(106)。适配器(102)为了进行数据通信通过LAN(124)联结(126)到具有适配器(102)的同一个防火墙(128)后面的第二服务器(110)上的第三应用程序(112)。在这样的体系结构中,如果应用程序(116)是一个精炼厂的库存控制程序,应用程序(106)是公司总部的服务器上的总账,应用程序(112)是与总部位于同一个公司场地的另一个建筑物中的购买系统,然后,购买系统可以通过HTTP将有关库存变动的发布消息传输到适配器(102),该适配器可以通过共享存储器分段将它们转发到总账并通过SOAP、IIOP或RMI转发到购买系统。购买系统和总账可以以确认消息响应库存控制程序。购买系统可以将有关新购买事项的发布消息只传输到总账,而不复制库存控制系统。总账可以将确认只发送到购买系统,而不复制库存控制程序。所有这三个应用程序都可以在它们的消息中利用由三个不同的软件开发公司未进行任何协调而开发的完全不同的数据结构。
图1a显示了为三个应用程序(106,112,116)提供集成的适配器(102)的比较详细的体系结构示例。图1a的示例包括叫做“传输”的三个软件模块(140,142,144),它们用于根据本发明的实施例的许多适配器中,以进行数据通信和消息格式转换。图1a的示范性适配器包括图(105),传输之间的数据结构映射消息路由。即,根据本发明的实施例的许多适配器根据路由图在传输之间路由消息,因此,也在应用程序之间路由消息。继续看库存控制程序、总账,以及购买系统的示例,图1a的适配器(102)通过使用路由图(105)可以知道:
来自购买系统的发布消息只被路由到总账,而不路由到库存控制程序;
来自总账的购买发布确认消息只被路由到购买系统,而不路由到库存控制程序;
来自库存控制程序的发布消息被路由到总账和购买系统两者;
来自总账的库存发布确认消息只被路由到库存控制程序;以及
来自购买系统的库存发布确认消息只被路由到库存控制程序。
只具有两个传输并只集成了两个应用程序的简单适配器,优选情况下没有路由图就可以操作,将来自任何一个应用程序的所有消息路由到其他应用程序,不管消息类型是什么。图1a的示例说明了适配器中的路由图的有用性,然而,在此示例中,具有按消息类型、源,以及目标键入的路由图。图1a的示例只说明了只与三个适配器集成的三个应用程序,此说明书只讨论了几个消息类型。鉴于这样的事实:在根据本发明的实施例的适配器中,对于适配器中的传输的数量或可以有用地集成的应用程序的数量没有限制,路由图的有用性是显而易见的。
图1b显示了为应用程序(112,116)提供集成的适配器(102)的另一个体系结构示例。在图1b的示例中,传输(142,144)包括另外的软件模块,叫做“接收器”(312)和“发送器”(316),它们在根据本发明的实施例的许多适配器中使用,以便在适配器和软件应用程序之间进行数据通信。在图1b中示范的那种类型的实施例中,接收器和发送器都分别管理其自己的用于进行数据通信的联结(118,119,126,127)。此外,本发明对于联结的类型没有限制。即,在根据本发明的实施例的特定示范性适配器中,传输(142)中的接收器(312)可以根据SOAP以消息通信的形式与应用程序实现其用于进行数据通信的联结,而同一个传输(142)中的发送器(316)以普通HTTP′post′消息的形式发送其消息通信。
图2阐明了说明利用应用程序集成适配器的应用程序集成的方法的数据流程图。具体来说,图2的方法包括构建(204)应用程序集成适配器,其中,所述构建是根据包括描述适配器的数据的配置文件(202)而进行的。图2的方法还包括提供(210)包括至少两个通信传输的标识(214)的适配器配置文件,包括用于数据通信传输的配置参数(218)。在根据本发明的适配器的许多实施例中,提供(210)配置文件是由用户或开发人员通过字处理器或文本编辑器将描述适配器的组件的数据结构的表示形式键入到被指定用作配置文件的文本文件中来实现的。该表示形式可以是数据结构的任何编码,包括,XML。事实上,此说明书讨论了主要以XML表示的配置文件,但这只是为了说明方便,而不对本发明构成限制。配置文件可以用数据结构的任何表示形式来进行编码,例如,C、C++、Java、SGML(标准通用标记语言),及其他,如那些精通本技术的人所理解的。
图2的方法还包括通过适配器(102)在多个应用程序(105,115)之间传递(206)集成消息(208)。在图2的方法的许多实施例中,提供(210)适配器配置文件进一步包括包括提供包括在适配器内的传输(212)之间的数据路由的路由图(216)的适配器配置文件,在多个应用程序之间传递(206)集成消息是根据路由图(216)进行的。在根据图2的方法中,构建(214)集成适配器还包括创建(220)适配器配置文件(202)中标识的传输(212),并根据配置参数(218)配置(222)传输(212)。
配置文件是代表适配器结构并具有标识和描述适配器的组件的数据元素的数据结构。根据本发明的实施例的适配器使用配置文件根据配置文件中阐述的其组件的描述来有效地构建其本身。由于配置文件是数据结构,因此,配置文件可以以可以实现任何数据结构的任何方式、以任何编程语言、以任何编码类型、以任何文件格式类型、或任何数据库记录结构类型来实现。本说明书以XML表示配置文件,不作为限制,但是由于XML对于人读者能够方便地理解,其中,配置文件的许多实现方式,例如,以二进制机器可读的格式,在说明时使用起来不是那么方便。也是在本说明书中,示例倾向于以面向对象的格式来呈现,特别是以Java和C++来表示。但是,再强调一次,在本发明内对任何特定编程范例或任何特定编程语言没有任何限制。在考虑到这些注意事项的情况下,这里是配置文件的XML示例:
<adapter>
<transportmodules>
<transport class=″InventoryControl.java″id=″inventoryControl″>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm></sender>
</transpo rt>
<transport class=″GeneralLedger.java″id=″generalLedger″>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm>
</sender>
</transport>
</transportmodules>
<transfermodules>
<transferManager class=″xfrMgr1.java″order=″1″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xfrMgr2.java″order=″2″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xfrMgr2.java″order=″3″>
<configParm>parinValue</configParm>
</transferManager>
</transfermodules>
</adapter>
此示范性XML配置文件标识了两个传输,一个名为′inventoryControl′,另一个名为′generalLedger′。每一个传输都具有接收器和发送器。每一个接收器和发送器都具有配置参数。配置文件的许多实现方式将标识并定义两个以上的传输发送器和接收器的许多实现方式将具有一个以上的配置参数。此示例中的编号是为了说明简洁而挑选的,不构成限制。
在采用拨号电话通信协议的发送器和接收器的情况下,配置参数可以包括电话号码、调制解调器速度、登录标识代码、密码、等等。在采用HTTP通信协议的发送器和接收器的情况下,配置参数包括一个或多个URI。在采用JMS实现数据通信的发送器和接收器的情况下,配置参数可以包括JMS队列的标识、队列连接、队列发送器、队列连接工厂对象或工厂方法指定目录上下文等等。在通过普通TCP/IP实现数据通信的发送器和接收器的情况下,配置参数包括因特网协议地址和端口号。对于通过文件系统中的平面文件实现数据通信的发送器和接收器,配置参数包括路径名和文件名。
示例XML配置文件为三个传输管理器标识并提供了配置参数。传输管理器基本上是被允许操纵由适配器接收或发送的消息的独立的程序代码。传输管理器允许对消息进行任意的处理,以支持高级路由、转换、安全、记录或消息处理的任何其他功能,正如那些精通本技术的人所理解的。在适配器配置文件中定义了传输管理器和它们的运行顺序。根据本发明的适配器通常支持任意数量的传输管理器。没有适用于传输管理器的处理限制。任何传输管理器都可以随意以任何方式操纵传递到它的任何消息的消息内容,包括对消息正文和任何标头参数的操作。
具体来说,此示例XML配置文件为三个传输管理器标识并提供了配置参数,但不包含快速路由图。根据此示例配置文件构建的适配器将在inventoryControl传输中接收到的所有消息路由到所有传输管理器,然后路由到generalLedger传输中的发送器。在这样的适配器中,在generalLedger传输中接收到的所有消息被路由到所有传输管理器,然后被路由到inventoryControl传输中的发送器。<transferManager>标记中的′class′属性标识Java类,从中可以将每一个传输管理器实例化。<transferManager>标记中的′order′属性标识消息事件将被传递到传输管理器的顺序,以便传输管理器可以根据需要被设计和编程为彼此依赖或不彼此干涉。
并非所有的传输管理器将处理所有的消息,尽管在此特定模式中,所有消息都被传递到所有传输管理器。即,被编程为变换发布消息中的帐户条目的数据结构的传输管理器将不在ACK(确认消息)上执行任何处理。在此模式下,从消息事件中的参数推断哪些消息将被特定传输管理器处理是传输管理器本身的编程是的一部分。给定类似于图5h中的引用(602)处说明的消息事件对象,传输管理器被编程为从destinationID代码(604),可能同sourceID代码(606)或messageType代码(607)相结合推断,从库存控制程序行进到总账的发布消息是将被特定传输管理器处理或忽略的消息。如果路由结构简单,只有一个消息类型行进到特定目标,则只需destinationID(604)就足够了。如果特定适配器中的路由方案复杂,许多消息类型都行进到同一个目标,则传输管理器可能需要比较多的信息才能判断特定消息是否将被处理。
配置文件中的路由图帮助解决这样的复杂性。假定有下列示范性XML配置文件:
<adapter>
<transportmodules>
<transport class=″InventoryControl.java″
id=″inventoryControl″>
<receiver>
<configParm>parmValue</configParm>
</receiver>
<sender>
<configParm>parmValue</configParm>
</sender></transport>
<transport class=″GeneralLedger.java″id=″generalLedger″>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm></sender>
</transport>
<transport class=″Purchasing.jav a″id=″purchasingSystem″>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm>
</sender>
</transp ort>
</transportmodules>
<transfermodules>
<transferManager class=″xfrMgr1.java″ mapID=″route1″order=″1″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xfrMgr2.java″ mapID=″route3″orders″2″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xfrMgr3.java″ mapID=″′route3″order=″3″>
<configParm>parmValue</configParm></transferManager>
<transerManager class=″xfrMgr4.java″mapID=″route2,route4,route5″order=″4″>
<configParm>parmValue</configParm></transferManager>
</transfermo dules>
<routemaps>
<map id=″route1″>
<msgType>post</msgType>
<from>purchasingSystem</from>
<to>generalLedger</to></map>
<map id=″route2″>
<msgType>ACK</msgType>
<from>generalLedger</from>
<to>purchasingSystem</to></map>
<map id=″route3″>
<msgType>post</msgType>
<from>inventoryControl</from>
<to>generalLedger</to>
<to>purchasingSystem</to></map>
<map id=″route4″>
<msgType>ACK</msgType>
<from>generalLedger</from>
<to>inventoryControl</to></map>
<map id=″route5″>
<msgType>ACK</msgType>
<from>purchasingSystem</from>
<to>inventoryControl</to></map>
</routemaps></adapter>
此示范性XML配置文件标识并描述了三个分别名为″inventoryControl″、″generalLedger″,以及″purchasingSystem″的三个传输。示范性XML配置文件描述了由唯一顺序编号1、2、3,以及4标识的四个传输管理器。传输管理器元素现在在<transferManager>标记中具有新属性′mapID′,以将传输管理器连接到路由图。′mapID′将路由图标识代码作为其值。
此示范性XML配置文件还描述了由唯一标识代码″route1″、″route2″、″route3″、″route4″以及″route5″标识的五个路由图。路由图″route1″描述了从购买系统到总账的类型′post′的消息的消息路由。路由图″route2″定义了从总账到购买系统的确认消息的消息路由。路由图″route3″定义了从库存控制程序到总账和到购买系统的发布消息的消息路由。路由图″route4″定义了从总账到库存控制程序的库存发布确认消息的消息路由。路由图″route5″定义了从购买系统到库存控制程序的库存发布确认消息的消息路由。
类似于此XML示例的根据配置文件构建的示范性适配器只通过其中一个传输管理器(由属性′order=1′标识的那个)将发布消息从购买系统路由到总账。在此示例中,正是适配器必须检查诸如destinationID、sourceID、messageType等等消息事件参数,以判断使用哪些路由,因此,哪些传输管理器将处理哪些消息。即,在此示例中,只有一个消息类型被路由到具有<transferManager>属性′order=1′的传输管理器,从而消除了传输管理器分析它是否要处理接收到的消息的任何必要。它完全地处理它接收到的所有消息。
与此示例类似,所有确认消息或′ACKs′都被路由到具有<transferManager>属性′order=4′的传输管理器。在这样的传输管理器的某些示范性实施例中,传输管理器将以类似的方式处理所有ACK消息。就ACK消息处理根据目标或源的区别而言,是由传输管理器通过引用传递到到它的每一个消息事件中的destinationID(图5h上的604)或sourceID(606)来对此进行判断。仍是在此示例中,从传输管理器中删除关于是否处理消息的判断,并根据从其配置文件的路由图,放在适配器本身的编程中。
从库存控制程序到总账和到购买系统的发布消息的处理在此示例XML配置文件中还是指导性的。路由图″route3″定义了从库存控制程序到总账和到购买系统的消息路由。在配置文件中,两个传输管理器被描述为在″route3″上,具有<transferManager>属性′order=2′的传输管理器和具有<transferManager>属性′order=3′的传输管理器。在此示例中,总账和购买系统来自于不同的软件开发商,对于帐户发布,使用了完全不同的数据结构。假设具有<transferManager>属性′order=2′的传输管理器将传入的消息的数据结构从库存控制结构变换为总账结构,具有<transferManager>属性′order=3′的传输管理器将传入的消息的数据结构从库存控制结构变换为购买系统结构。此示例中的适配器制作一个来自库存控制传输的传入的发布消息事件的副本,将原件发送到具有<transferManager>属性′order=2′的传输管理器,将副本发送到具有<transferManager>属性′order=3′的传输管理器。在对具有<transferManager>属性′order=2′的传输管理器的调用返回时,适配器将原始消息事件(现在的结构可以用于总账)转发到总账的传输中的发送器中。在对具有<transferManager>属性′order=3′的传输管理器的调用返回时,适配器将消息事件的副本(现在的结构可以用于购买系统)转发到购买系统的传输中的发送器中。在此示例中的所有情况下,接收消息的传输管理器直接处理消息而无需判断是否要这样做。根据消息事件本身中的目标、源和类型信息(例如,图5h上的引用604、606、607),判断哪个传输管理器将要处理哪个消息的处理负担有效地移到适配器对象本身。
在某些实施例中,通过适配器,传输管理器在一个以上的路由被调用。不是通过使用传输模块元素(就我们的XML示例而言)中的传输管理器的多个条目执行多路由选择,在替代示范性实施例中,直接在路由图描述中列出传输管理器是有利的,如通过下列示例所说明的:
<adapter>
<transportmodules>
<transport class=″InventoryControl.java″id=″inventoryControl″>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm></sender>
</transport>
<transport class=″GeneralLedger.java″id=″generalLedger″>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm></sender>
</transport>
<transport class=″Purchasing.java″id=”purchasingSystem>
<receiver>
<configParm>parmValue</configParm></receiver>
<sender>
<configParm>parmValue</configParm>
</sender>
</transport>
</transportmodules>
<transfermodules>
<transferManager class=″xfrMgr1.java″id=″xfrMgrName1″order=″1″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xfrMgr2.java″id=″xMgrName2″order=″2″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xfrMgr3.java″id=″xfrMgrName3″order=″3″>
<configParm>parmValue</configParm></transferManager>
<transferManager class=″xf rMgr4.java″id=″xfrMgrName4″order=″4″>
<configParm>parmValue</configParm></transferManager>
</transfermodules>
<routemaps>
<map id=″route1″>
<msgType>post</msgType>
<from>purchasingSystem</from>
<to>generalLedger</to>
<transferManager>xfrMgrName1</transferManager>
</map>
<map id=″route2″>
<msgType>ACK</msgType>
<from>generalLedger</from>
<to>purchasingSystem</to>
<transferManager>xfrMgrName4</transferManager></map>
<map id=″route3″>
<msgType>post</msgType>
<from>inventoryControl</from>
<to>generalLedger</to>
<to>purchasingSystem</to>
<transferManager>xfrMgrName2</transferManager>
<transferManager>xfrMgrName3</transferManager></map>
<map id=″route4″>
<msgType>ACK</msgType>
<from>generalLedger</from>
<to>inventoryControl</to>
<transferManager>xfrMgrName4</transferManager></map>
<map id=″route5″>
<msgType>ACK</msgType>
<from>purchasingSystem</from>
<to>inventoryControl</to>
<transferManager>xfrMgrName4</transferManager></map>
</routemaps></adapter>
此示例配置文件与前面的示例配置文件在发送器和接收器之间实现了完全相同的路由。即,路由图″route1″描述了从购买系统到总账的类型′post′的消息的消息路由,包括通过第一个列出的传输管理器(这里用其标识名″xfrMgr1″进行标识)的路由。路由图″route2″定义了从总账到购买系统的确认消息的消息路由,包括通过第二个列出的传输管理器(这里用其标识名″xfrMgr2″进行标识)的路由。对于其余的三个路由图,依此类推。然而,与第一个示例不同,在此示例中,传输管理器中的路由标识符,mapID=″route1″、mapID=″route2″等被删除,通过将传输管理器的名称直接放在图定义中,如<transferManager>xfrMgrName1</transferManager>、<transferManager>xfrMgrName2</transferManager>、等,传输管理器与图路由关联。通过适配器在三个路由上调用第四个传输管理器(名为″xfrMgr4″的传输管理器),三个路由被标识为″route2″、″route4″以及″route5″。
创建(220)适配器配置文件(202)中标识的传输(212),并根据配置参数(218)配置(222)传输(212)是在根据本发明的实施例中的许多适配器中进行的,如图5和5a-5h中阐述的示范性类结构所说明的。图5说明了根据本发明的实施例的从中构建适配器的示范性类之间的关系。
在此说明书中,软件模块被描述为“包括”其他软件模块,如当适配器被描述为“包括”或“包括”传输、发送器、接收器或传输管理器。需要注意的是,在此说明书中常常用来描述本发明的各种示范性实施例的面向对象的范例中,一个模块包括另一个通常意味着,第一个模块拥有对第二个模块的引用或指向第二个模块的指针,如在传输“具有”接收器中,是指,传输在其成员数据元素中具有对接收器对象的引用。在C++中,作为指向对象的指针来管理引用是比较常见的,但是在本说明书中为了简洁,这样的关系通常以引用来描述。
图5中的箭头一般表示面向对象的“具有”关系,即,哪一个类通常拥有对其他类的引用。
根据图5的示例的适配器(102)具有对配置文件(202)的引用,虽然实际上,配置文件(202)常常根本不是类对象,而是文件系统中的文件。当然,对文件系统中的数据的管理比在计算机存储器中慢得多,以便根据本发明的实施例的大多数适配器(102)因此将配置文件(102)分析为对于运行软件系统内的引用更方便的内部类对象,在这里,说明为分析的配置文件类(502)。适配器(102)实例化配置文件(202)中标识的传输(212)和传输管理器(406)。在此示例中,传输(212)实例化接收器(312)和发送器(316),并将对它们的引用返回到适配器,以便适配器还拥有对接收器类(312)和发送器类(316)的引用。适配器使用其对接收器的引用以向接收器(312)注册事件监听器(536)。事件监听器(536)在图5中被显示为单独的类,但实际上,许多适配器将适配器本身注册为事件监听器。当接收器(312)接收消息时,接收器将消息封装在消息事件(504)中,并将对消息事件的引用通过事件监听器传递回适配器(102),或者如果适配器是事件监听器,则直接传递回适配器(102)。适配器将消息事件对象,或实际上,对消息事件对象的引用,传递到传输管理器(406),然后传递到发送器(504),以处理消息,然后将它发送到其目标上。因此,传输管理器类(406)、接收器(312)、发送器(316),以及适配器(102)都获得对消息事件类(504)的引用。
再次参考图2并就图5和5a-5h的类图表而言,构建(204)应用程序集成适配器(其中,所述构建是根据包括描述适配器的数据的配置文件(202)而进行的)是在由具有类似于下列示例的形式的命令行接口条目启动的许多示例中进行的:
Java com.adapters.Adapter<ProfileName>
此示例命令指示Java虚拟机加载并实例化适配器名称Adapter,并运行其名为′main()′的成员方法(图5a上的引用520)。在此说明书中,对适配器对象执行的操作或处理步骤的描述,除非上下文特别要求,否则,一般是图5a上的引用(102)处说明的那种类型的适配器对象中的main()成员方法的操作的描述。在此示例中,main()或适配器,可选地,但也通常,打开名为″ProfileName″的文件中的配置文件,并将它分析为类似于图5b上的引用(502)处说明的数据结构的数据结构中的内部存储器。图5b的分析的配置文件类为传输管理器的列表(542)、包括配置参数的传输的列表(544)以及路由图的列表(555)提供了分析的存储。除了列表提供的结构化存储器外,图5b的分析的配置文件类还提供用于添加到列表(546、544、555)的成员方法,用于检索列表(550、552、553)(当其他合作对象需要它们时)的成员方法。
传输管理器的列表(542)、包括配置参数的传输的列表(544)以及路由图的列表(555)在图5b中都被描述为具有数据类型′List′。数据类型的此描述不是限制性的。正如那些精通本技术的人员所认识到的,对于这样的数据结构,以及此说明书中讨论的所有数据结构,可以使用各种数据类型,包括,矢量、arraylists、集合、容器等等。
在根据图2的方法中,构建(214)集成适配器还包括创建(220)适配器配置文件(202)中标识的传输(212),并根据配置参数(218)配置(222)传输(212)。在此示例中,Adapter.main()通过实例化分析的配置文件(502)中的传输列表(544)中列出的每一个传输来创建传输。根据配置参数(218)配置(222)传输(212)通常包括为每一个传输创建接收器和发送器,并与配置参数配置接收器和发送器。
图3阐明了说明根据本发明的创建应用程序集成适配器的传输的接收器和发送器的方法的数据流程图。在根据图3的方法实现的许多适配器中,每一个传输都包括用于创建接收器的参数化的工厂方法(图5c上的556)。在这样的实施例中,配置(222)传输包括为每一个传输创建(306)接收器,这是通过调用用于以至少某些配置参数创建接收器的参数化的工厂方法(图5c上的556)来执行的。在根据图3的方法中,每一个传输通常都包括用于创建发送器(图5c上的558)的工厂方法,配置(222)传输(212)还包括为每一个传输(212)创建(318)发送器(316)。
这里是工厂方法的说明伪代码示例://
//Transport Class // //Illustrating a parameterized factory method for creating <!-- SIPO <DP n="29"> --> <dp n="d29"/> receiver objects // class TransportClass { public static Receiver createReceiver(ConfigParm1, ConfigParm2,and so on...) { if(ConfigParm1==HTTP && ConfigParm2==INVENTORYCONTROL) receiverID=″receiver1″; else if(ConfigParm1==IIOP && ConfigParm2==INVENTORYC0NTR0L) receiverID=″receiver2″; else if(ConfigParm1==HTTP && ConfigParm2==GENERALLEDGER) receiverID=″receiver3″; else if(ConfigParm1==JMS && ConfigParm2==GENERALLEDGER) receiverID=″receiver4″; else if(ConfigParm1==HTTP && ConfigParm2==PURCHASINGSYSTEM) receiverID=″receiver5″; else if(ConfigParm1==IIOP && ConfigParm2==PURCHASINGSYSTEM) receiverID=″receiver6″; Receiver aReceiver=null;//empty reference for new receiver object switch{receiverID) { case″receiver1″:aReceiver=new receiver1.class; break; case″receiver2″:aReceiver=new receiver2.class; break; case″receiverN-1″:aReceiver=new receiver5.class; break; <!-- SIPO <DP n="30"> --> <dp n="d30"/> case″receiverN″:aReceiver=new receiver6.class; break; }//end switch() return aReceiver; }//end createReceiver() public static Sender createSender(ConfigParm1,ConfigParm2,and so on...) { //Exemplary Transport classes also support factory methods for senders //similar to the one for receivers set forth just above, createReceiver(). } }//end class TransportClass
在此伪代码示例中,createReceiver()是参数化的工厂方法。CreateReceiver()被Adapter.main()用一组配置参数作为调用的参数来进行调用。CreateReceiver()可以被过载,并用工厂方法createReceiver()中支持的任何接收器类支持的任何配置参数组合来对其进行调用。CreateReceiver()可以支持任意数量的具体接收器类。CreateReceiver()基于配置参数,通过一系列IF语句来选择接收器标识,从而发挥作用。然后,CreateReceiver()根据接收器标识操作switch()语句,以选择具体接收器类,并从它实例化新接收器对象。
在此示例中,名为″Receiver″的类是一个抽象类,所有其他接收器类都可以从该类继承,从而能使createReceiver()返回类型′Receiver′的引用,该引用事实上可以是对任何接收器类对象的引用。因此,从适配器中的合作对象对接收器对象的调用可以是多形的。如此,无论是传输,适配器其本身,还是适配器内包含的任何合作对象或软件模块都不会知道或关心哪些应用程序正在被集成,以及正在使用哪些通信协议来集成它们。相对于应用程序身份和通信协议,适配器内的对象之间的所有合作都是完全中性、透明和模块化地呈现的。
图3中说明的方法包括向每一个接收器注册(310)传输事件监听器。在根据图3的方法创建接收器的某些适配器中,集成适配器(102)其本身包括传输事件监听器(314)。即,在某些实施例中,向每一个接收器注册(310)传输事件监听器是通过将适配器本身注册为事件监听器来实现的。在这样的实施例中,适配器本身将包含接收器调用以便提交传入的消息的成员方法,如图5a上的示范性适配器类(102)中的引用(532)处显示的transportEvent()方法。在其中事件监听器(314)是与适配器本身分离的对象的实施例中,构建者首先通过实例化事件监听器类(如图5a上的引用(536)处中说明的类)的单独的对象来创建(308)传输事件监听器(314)。
图4阐明了说明创建传输管理器的示范性方法的数据流程图。在图4的方法中,提供(210)适配器配置文件(202)包括提供包括一个或多个数据传输管理器(406)的标识(402)的适配器配置文件,包括数据传输管理器的配置参数(404)。图4的方法包括构建(204)应用程序集成适配器(102),而该构建过程又包括创建(408)在配置文件(202)中标识的传输管理器(406),以及根据配置参数(404)配置(410)传输管理器(406)。
就图5a的示范性数据结构而言,适配器(102)包括用于创建传输管理器的名为createTransferManagers()(530)的工厂方法。在此示例中,分析的配置文件类(502)中的传输管理器列表(542)包含配置文件中定义的所有传输管理器的定义,以及每一个传输管理器的配置参数。构建这样的示范性适配器包括用传输管理器的配置参数对于传输管理器列表(542)中的每一个传输管理器调用传输管理器的工厂方法一次,并作为回报,接收对新传输管理器的引用。然后,对新传输管理器以及它们的诸如路由图标识符和调用指令号码之类的属性的引用存储在适配器(102)中的传输管理器列表(514)中,以便让适配器在路由消息中使用。
图6阐明了说明构建应用程序集成适配器的方法的调用序列图表。具体来说,图6描述了根据本发明的示范性实施例的用于构建适配器的合作对象中的成员方法之间的示范性调用序列。当适配器用类似于下一行的命令行条目实例化时,图6的序列开始:
Java com.adapters.Adapter<ProfileName>
适配器中的成员方法,要么其构建者或其main()方法,通过调用(622)分析的配置文件(图5b上的502)中的添加方法(图5b:546、548、549),分析被标识为<ProfileName>的配置文件。添加方法将传输管理器(542)、传输(544),以及任何路由图(555)的描述插入到分析的配置文件的成员数据元素中。
适配器(102)构建(624)分析的传输列表(图5b上的544)中描述的每一个传输。适配器调用构建的每一个传输中的createReceiver()(626),每一个createReceiver()调用将会导致构建(628)传输的接收器。每一个createReceiver()调用(626)将对创建的接收器的引用返回到适配器。适配器将对每一个接收器的引用存储在适配器中的接收器列表(图5a上的516),以便在配置接收器和注册事件监听器时使用。适配器调用构建的每一个传输中的createSender()(630),每一个createSender()调用将会导致构建(632)传输的发送器。每一个createSender()调用(630)将对创建的发送器的引用返回到适配器。适配器将对每一个发送器的引用存储在适配器中的发送器列表(图5a上的518),以便在配置发送器和在路由消息中使用。
适配器调用(634)每一个接收器(312)中的configure()方法(图5d上的566),作为调用参数传递接收器配置参数,以便每一个接收器都可以进行自我配置。适配器在其接收器列表中的每一个接收器中作为事件监听器向对诸如addEventListener()(图5d上的570)之类的方法的调用(636)注册其本身或另一个对象。适配器调用(638)每一个发送器(316)中的configure()方法(图5e上的584),作为调用参数传递发送器配置参数,以便每一个发送器都可以进行自我配置。
适配器构建(640)配置文件中标识的或分析的配置文件(图5b上502)中的传输管理器列表(图5b上的542)中标识的每一个传输管理器(120)。适配器将对每一个传输管理器的引用保留在适配器(102)中的传输管理器列表中(图5a上的514),以便在路由消息中使用。
适配器调用(641)每一个接收器中的run()方法(图5d上的574),以通知每一个接收器根据接收器使用的任何协议开始数据通信操作。在本发明的典型的实施例中一个以上的接收器必须同时运行,以便优选情况下,对run()方法(574)的调用(641)是触发执行的新的并行进程或线程并将控制立即返回到调用者的非阻塞调用。具体来说,就Java而言,这样的示范性实施例中的接收器类优选情况下被定义为用其start()接口方法从′thread′类继承。然后在这样的实施例中,对run()方法的调用是作为对SomeReceiverClass.start()的调用来实现的,而SomeReceiverClass.start()又在执行的单独的线程中执行run()方法并立即返回到调用者。下面是示例:
class HTTPReceiver extends Thread{
private Port ListenPort=80;
public void run(){
//control code to operate
//a receiver over the HTTP protocol
//for data communication from
//a particular software application
}
}
此示例将HTTPReceiver声明为Thread的子类,并覆盖来自Thread类的run()方法(当前Java中已知的)。然后,下列示范性Java代码可以创建执行的单独的线程,并开始运行:
HTTPReceiver aReceiver=new HTTPReceiver();aReceiver.start();
这示范了作为执行的单独的线程来实现接收器的run()方法的一个特定方式,只作为说明,而不作为限制。正如那些精通本技术的人员认识到的,对于接收器来说,有许多方式启动执行的单独的线程,所有这些都在本发明的范围内。然而,如此,一般来说,适配器实例化并激活任意数量的接收器,然后,接收器通过使用在本说明书中下面详细描述的事件监听器来与适配器异步地进行操作。
然而,异步地作为执行的并行单独的线程来实现接收器的run()方法,不是对本发明的所有实施例的一般限制。事实上,根据本发明的实施例的某些适配器不异步地作为执行的并行单独的线程来实现接收器的run()方法。根据本发明的实施例的某些适配器与堵塞调用按顺序地轮询接收器的run()方法。在这样的实施例中,适配器的main()方法依次通过对接收器的run()方法的阻塞调用对每一个接收器进行轮询。调用方法的执行暂停,直到对run()方法的调用返回。通常在这样的实施例中,接收器的run()方法检查传入的消息,根据需要,转换任何传入的消息的编码格式,将传入的消息封装在消息事件对象中,并将对如此创建的任何消息事件对象的引用返回到调用适配器。然后,适配器调用其接收器列表上的下一个接收器。在这样的实施例中,可选地并且优选情况下,可以不必使用事件监听器,-或者,比异步实施例中使用得稍微少一些。
此时,在处理过程中,我们的示例适配器中的接收器,为其本身配置了它们的配置参数并根据它们的协议开始数据通信操作,并根据它们的协议进行操作,准备接收消息,将消息放在消息事件中,将它们提交到事件监听器,以便通过适配器进行处理。即,此时,构建了适配器,适配器开始运行。
图7阐明了描述通过适配器(102)在多个应用程序(106,116)之间传递(图2上的206)集成消息(208)的示范性方法的数据流程图。图7的方法包括从源应用程序(106)接收(702)具有源消息格式(712)和源数据结构(714)的集成消息(208)。就图5a-5h的示范性类结构而言,假设为了说明,适配器的每一个接收器中的run()方法根据每一个接收器的配置参数中标识的数据通信协议进行数据通信。
图7的方法包括将将集成消息(208)从临时消息格式(712)转换(708)为对目标应用程序(116)有用的目标消息格式(720)。就图5d的示范性类结构而言,转换(708)是通过从run()方法(574)到接收器类(560)中的转换方法(575)的调用来执行的。转换方法(575)的操作是转换消息的格式,而不是消息的数据结构。即,转换方法将信息的总体形式,而使内数据结构、数据元素名称、类型和值保持不变。如果需要,转换内数据结构是传输管理器中的变换方法的作业,而不是接收器或其转换方法的作业。格式转换的示例包括从字符串化的Java转换为XML,从二进制C++数据格式转换为XML等等。作为格式转换的特定示例是被编程为将下列C结构的接收器
struct address
{
char*name=″John Smith″;
char*address=″100 Main Street″
char*city=″Smallville″;
char*state=″Iowa″;
char*zip=″10101″;
}
转换为此XML结构:
<address>
<name>John Smith</name>
<address>100 Main Street</address>
<city>Smallville</city>
<state>Iowa</state>
<zip>10101</zip></address>.
这样的接收器读取每一个C数据元素,并创建具有相同名称、类型和值。C结构可以以编译的形式,即,编码的二进制,或以未编译的文本(如上面所显示的)来进行传输。到XML的变换保留了数据中的所有结构,数据元素的名称、类型,以及值,只将格式从C改变为XML。
实际上,为支持适配器内的异步操作,实现图7的方法的适配器通常还包括将集成消息封装(704)在消息事件(716)内,并将消息事件(716),或对消息事件的引用传递(706)到至少一个事件监听器。在图5h上的引用(602)上说明了消息事件的示范性结构。消息事件类(602)只包含一个成员方法,其仅有的功能是记录消息事件对象中的消息参数并将对消息事件的引用返回到调用接收器的构建者(616)。消息事件参数包括其目标(604),其源(606)、其消息类型(607)、消息标识代码(608)、安全标记(610)、状态代码(612),以及,有用地,消息本身的正文(614),这里显示为数据类型“字符串化的”,但正如那些精通本技术的人所理解的,也可以是任何有用的数据类型。
将消息事件(716)传递(706)到事件监听器是在我们的示范性类结构中从接收器到事件监听器(536)中的transportEvent()方法(图5a上的532)来执行的。在图5a上的适配器类(102)中还作为提醒(适配器可选地将自己注册为事件监听器)显示了transportEvent()方法(532)。然后,通常是事件监听器,要么是其本身,或通过其他合作对象,使消息事件任何传输管理器之间循环,最后到发送器对象中的send()方法。在典型的实施例中,发送(710)包括从消息事件取消封装集成消息,并将它重新封装在由目标传输(144)的send()方法(图5e上的592)使用的数据通信协议所需的任何消息结构中。
图7的方法还包括向目标应用程序(116)发送(710)集成消息,目标应用程序(116)是通过在发送器对象(576)中调用send()方法(图5e中的592)在我们的示范性类结构中实现的。具体来说,图7的方法不包括数据结构变换,也不包括到目标格式的转换。这意味着,图7的方法是有用的,例如,在源应用程序和目标应用程序能够使用相同的数据结构,但源应用程序以二进制形式、字符串化的Java、C++结构,或XML之外的任何形式导出数据结构,而目标应用程序要求以XML导入它们的情况下。
图8阐明了描述通过适配器(102)在多个应用程序(106,116)之间传递(图2上的206)集成消息(208)的另一个示范性方法的数据流程图。图8的方法包括从源应用程序(106)接收具有源消息格式(712)和源数据结构(714)的集成消息(208)。图8的方法还包括将集成消息(208)从源消息格式(712)转换为对适配器内的内部处理有用的临时消息格式(804),特别包括数据变换和安全处理,而且还包括其他的处理模式,如那些精通本技术的人所理解的。
图8的方法进一步包括将集成消息(208)从源数据结构(714)变换(806)为目标数据结构(808)。在数据变换中,和数据转换不同,数据结构本身改变,如下列结构从源应用程序:
<address>
<lastName>Smith</lastName>
<firstName>John</firstName>
<addressLine1>100 Main Street</addressLine1>
<addressLine2>Suite 5</addressLine2>
<city>Smallville</city>
<state>Iowa</state>
<mailCode>10101</mailCode></address>
被转换为目标应用程序所需的下列结构:
<address>
<name>John Smith</name>
<address>100 Main Street,Suite 5</address>
<city>Smallville</city>
<state>Iowa</state>
<zip>10101</zip></address>
对于两种结构,数据格式是相同的,在此示例中,用于进行转换的临时格式是XML。然而,数据结构本身在其数据元素名称和值中发生了改变。
在图8的方法的许多示范性实施例中,变换(806)是通过传输管理器来执行的。继续以XML作为数据转换的临时数据格式的说明示例:就我们的示范性类结构而言,将集成消息(208)从源数据结构(714)变换(806)为目标数据结构(808)是通过对诸如process()(图5g上的609)诸如携带消息结构(614)以及传输管理器执行转换所需要的处理参数的图5h上的引用(602)中说明的messageEvent对象之类的成员方法的调用,传递到传输管理器(图5g上的619)来进行的。
在此示例中,process(messageEvent)方法(609)使用消息事件(602)中的源标识(606)和目标标识(604)来从为该目的存储在传输管理器(619)中的arraylist(615)推断XSLT样式表的文件名。process()方法(609)通过调用XSL处理器(未显示),作为调用参数,传递样式表和输入XML的名称来进行。XSL处理器读取输入XML并遵循XSL样式表中的指令;然后它作为其到process()方法的返回,输出转换的XML。各种制造商提供了许多现成的XSL处理器,例如,Apache Software Foundation推出的著名的“Xalan”XSLT处理器。
图8的方法包括将集成消息发送(710)到目标应用程序(116)。图8说明了发送集成消息的两个示范性执行路径。图8说明了直接发送(710)消息而无需另外的转换(806、208、710)的替代方法。此替代方法特别是在用于变换消息的数据结构的临时消息格式(804)与目标应用程序预期的格式相同时十分有用。即,例如,当临时格式804是XML并且目标应用程序能够接收并使用XML中的集成消息时,进行无需另外的转换的发送是十分有用的。
图8还说明了将集成消息(208)从临时消息格式(804)转换(810)为对目标应用程序(116)有用的目标消息格式(812)的替代方法。即,作为替代实施例,图8的方法包括在将消息发送(710)到目标应用程序之前将集成消息(208)从临时消息格式(804)转换(810)为对目标应用程序(116)有用的目标消息格式(812)。此替代方法在其中目标应用程序预期的消息格式不同于用于适配器内的数据结构变换(806)的临时格式(804)的许多实施例中有用。这样的实施例的示例包括其中临时格式为XML,而目标格式为HTML、字符串化的Java、二进制C++结构,或XML之外的任何其他消息格式的实施例。
图9阐明了说明通过适配器在多个应用程序之间传递(图2上的206)集成消息的方法的调用序列图表。具体来说,图9描述了根据本发明的实施例的用于通过示范性适配器在多个应用程序之间传递集成消息的合作对象中的成员方法之间的示范性调用序列。当如本说明书中上文详细描述的那样适配器实例化,构建,并运行时,图6的序列开始。适配器的接收器(312)接收消息,并调用其自己的translation()方法(图5d上的575)。translation()方法将消息的正文的格式转换为临时格式。
接收器(312)构建(904)消息事件对象(图5b上的536,602处的类结构),以便当消息在适配器内的对象之间来回传递以便进一步处理并传输到其目标时,用作消息的容器。消息事件对象的构建者将消息以及消息本身的正文的描述参数当作调用参数,并将对消息事件对象的引用返回到接收器。
接收器(312)通过对transportEvent()方法(图5a上的532)的调用(906)来传递消息事件对象,确切地说,将对消息事件对象的引用传递到接收器中的事件监听器列表(图5d上的564)中列出的事件监听器对象。
事件监听器中的transportEvent()方法通过每一个传输管理器中的process()方法(图5f上的618,图5g上的609)来调用(906)适配器中的传输管理器列表(图5a上的514)中列出的每一个传输管理器,作为调用参数来传递对消息事件对象的引用。或者,transportEvent()方法从路由图列表推断路由图标识,然后调用由推断的路由图标识而标识出的每一个传输管理器中的process()。不管怎样,依次调用的每一个传输管理器都对消息事件对象中的消息的正文执行每一个传输管理器被设计执行的任何处理,包括,例如,数据结构变换、安全检查、源身份验证、加密、解密,对数字签名的验证,及其他正如那些精通本技术的人所知道的功能。图5g是作为为用XSLT进行数据转换而优化的具体传输管理器类的示例来呈现的。图5f是作为只提供接口(从中许多具体传输管理器类可以继承)的抽象传输管理器类的示例来呈现的。使用具体传输管理器来实现用于各种处理用途的类(其中每一个类都从抽象传输管理器类继承)支持了适配器使用诸如createTransferManager()之类的工厂方法(图5a上的532)。针对传输管理器列表(514)使用工厂类和transportEvent()(图5a上的532)处理意味着,适配器对象本身决不需要知道也不关心对任何消息的正文执行什么任何特定传输管理器,从而相对于消息内容的处理,支持适配器内的对象之间的呈现为中性、透明和模块化的合作。
图9的序列中的transportEvent()方法从适配器中的发送器的列表(图5a上的518)识别消息的目标的传输中的发送器,并调用(908)目标发送器(图5a上的引用575处说明的类结构)中的send()方法(592)。send()方法根据需要调用(910)发送器中的translate()方法(图5e上的593),以将消息正文转换为其目标应用程序所需要的形式。然后,send()使用发送器被配置为使用的任何数据通信协议将消息传输到目标应用程序。
从前面的描述中可以理解,可以进行各种修改和更改,事实上,在不偏离本发明的真正的精神的情况下,在本发明的示范性实施例中将作出各种修改和更改。此说明书中的描述只是用作说明,而不能被解释为限制性的。本发明的范围只能由下列权利要求书的语言进行限制。
Claims (26)
1.一种应用程序集成的方法,该方法包括:
构建应用程序集成适配器,其中,所述构建是根据包括描述适配器的数据的配置文件而进行的;以及
通过所述适配器在多个应用程序之间传递集成消息。
2.根据权利要求1所述的方法,进一步包括:
提供包括至少两个通信传输的标识的适配器配置文件,包括用于数据通信传输的配置参数;
其中,所述构建应用程序集成适配器进一步包括:
创建在适配器配置文件中标识的传输;以及
根据配置参数配置传输。
3.根据权利要求2所述的方法,其中:
提供适配器配置文件进一步包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括在适配器内的多个传输之间的数据路由的路由图,以及
在多个应用程序之间传递集成消息是根据所述路由图进行的。
4.根据权利要求2所述的方法,其中,每一个传输都包括用于创建接收器的参数化的工厂方法,并且配置传输进一步包括:
为每一个传输创建接收器,这是通过调用用于以至少某些配置参数创建接收器的参数化的工厂方法来执行的;
向每一个接收器注册传输事件监听器。
5.根据权利要求4所述的方法,其中,应用程序集成适配器包括传输事件监听器。
6.根据权利要求2所述的方法,其中,每一个传输都包括用于创建发送器的工厂方法,并且配置传输进一步包括为每一个传输创建发送器。
7.根据权利要求2所述的方法,其中:
提供适配器配置文件进一步包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括一个或多个数据传输管理器的标识,包括数据传输管理器的配置参数,以及
构建应用程序集成适配器进一步包括:
创建在适配器配置文件中标识的传输管理器;以及
根据配置参数配置传输管理器。
8.根据权利要求1所述的方法,其中,通过所述适配器在多个应用程序之间传递集成消息进一步包括:
从源应用程序接收具有源消息格式和源数据结构的集成消息;
将集成消息从源消息格式转换为对目标应用程序有用的目标消息格式;以及
将集成消息发送到目标应用程序。
9.根据权利要求1所述的方法,其中,通过所述适配器在多个应用程序之间传递集成消息进一步包括:
从源应用程序接收具有源消息格式和源数据结构的集成消息;
将集成消息从源消息格式转换为对适配器内的内部处理有用的临时消息格式;
将集成消息从源数据结构变换为目标数据结构;以及
将集成消息发送到目标应用程序。
10.根据权利要求9所述的方法,进一步包括将集成消息从临时消息格式转换为对目标应用程序有用的目标消息格式。
11.根据权利要求10所述的方法,其中,变换是通过传输管理器来执行的。
12.一种应用程序集成的方法,包括:
为应用程序集成适配器提供标识至少两个通信传输的适配器配置文件,包括用于数据通信传输的配置参数;
创建在适配器配置文件中标识的传输;以及
根据配置参数配置传输。
13.根据权利要求12所述的方法,其中:
提供适配器配置文件进一步包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括在应用程序集成适配器内的传输之间的数据路由的路由图,以及
在多个应用程序之间传递集成消息是根据所述路由图进行的。
14.根据权利要求12所述的方法,其中,每一个传输都包括用于创建接收器的参数化的工厂方法,并且配置传输进一步包括:
为每一个传输创建接收器,这是通过调用用于以至少某些配置参数创建接收器的参数化的工厂方法来执行的;
创建传输事件监听器;以及
向每一个接收器注册传输事件监听器。
15.根据权利要求14所述的方法,其中,应用程序集成适配器包括传输事件监听器。
16.根据权利要求12所述的方法,其中,每一个传输都包括用于创建发送器的工厂方法,并且配置传输进一步包括为每一个传输创建发送器。
17.根据权利要求12所述的方法,其中,提供适配器配置文件进一步包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括一个或多个数据传输管理器的标识,包括数据传输管理器的配置参数,该方法进一步包括:
创建在适配器配置文件中标识的传输管理器;以及
根据配置参数配置传输管理器。
18.根据权利要求12所述的方法,进一步包括通过所述适配器在多个应用程序之间传递集成消息。
19.一种应用程序集成的方法,包括:
为应用程序集成适配器提供标识至少两个通信传输的适配器配置文件,包括用于数据通信传输的配置参数;
创建在适配器配置文件中标识的传输,包括为每一个传输创建接收器和发送器;以及
根据配置参数配置传输。
20.根据权利要求19所述的方法,其中:
提供适配器配置文件进一步包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括在适配器内的多个传输之间的数据路由的路由图,以及
在多个应用程序之间传递集成消息是根据所述路由图进行的。
21.根据权利要求19所述的方法,进一步包括:
创建传输事件监听器;以及
向每一个接收器注册传输事件监听器。
22.根据权利要求21所述的方法,其中,应用程序集成适配器包括传输事件监听器。
23.根据权利要求19所述的方法,其中,提供适配器配置文件进一步包括:提供这样一个适配器配置文件,所述这样一个适配器配置文件包括一个或多个数据传输管理器的标识,包括数据传输管理器的配置参数,该方法进一步包括:
创建在适配器配置文件中标识的传输管理器;以及
根据配置参数配置传输管理器。
24.根据权利要求19所述的方法,进一步包括通过所述适配器在多个应用程序之间传递集成消息。
25.包括执行权利要求1-24中的任何一个权利要求的方法的步骤的装置的计算机系统。
26.具有程序代码装置的计算机程序,当所述计算机程序在计算机中执行时执行权利要求1-24中的任何一个权利要求的步骤。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/361,202 | 2003-02-06 | ||
US10/361,202 US7191450B2 (en) | 2003-02-06 | 2003-02-06 | Data-driven application integration adapters |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1748201A true CN1748201A (zh) | 2006-03-15 |
Family
ID=32824167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2004800036737A Pending CN1748201A (zh) | 2003-02-06 | 2004-01-27 | 数据驱动的应用程序集成适配器 |
Country Status (3)
Country | Link |
---|---|
US (2) | US7191450B2 (zh) |
CN (1) | CN1748201A (zh) |
WO (1) | WO2004070494A2 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109788014A (zh) * | 2017-11-14 | 2019-05-21 | 阿里巴巴集团控股有限公司 | 一种消息处理、物联网系统的消息处理方法和装置 |
CN112286619A (zh) * | 2020-12-28 | 2021-01-29 | 南京智闪萤科技有限公司 | 用于数据驱动界面呈现的方法、电子设备和存储介质 |
CN114968877A (zh) * | 2022-08-01 | 2022-08-30 | 摩尔线程智能科技(北京)有限责任公司 | 硬件的管理方法、适配器、主机及存储介质 |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7644170B2 (en) * | 2003-08-11 | 2010-01-05 | Teamon Systems, Inc. | Communications system providing extensible protocol translation features and related methods |
US7716675B2 (en) * | 2003-08-28 | 2010-05-11 | Siebel Systems, Inc. | Cross-reference service |
CA2539465C (en) * | 2003-09-17 | 2012-12-04 | Research In Motion Limited | System and method for management of mutating applications |
WO2005083563A2 (en) * | 2004-02-25 | 2005-09-09 | Siemens Medical Solutions Health Services Corporation | An executable application configuration system |
US8782405B2 (en) * | 2004-03-18 | 2014-07-15 | International Business Machines Corporation | Providing transaction-level security |
US7676791B2 (en) * | 2004-07-09 | 2010-03-09 | Microsoft Corporation | Implementation of concurrent programs in object-oriented languages |
WO2006044898A2 (en) * | 2004-10-20 | 2006-04-27 | Meo Sam J | A method and system for providing reconciliation of semantic differences amongst multiple message service providers |
US8316386B2 (en) * | 2006-02-17 | 2012-11-20 | Microsoft Corporation | Multiple application integration |
US8131832B1 (en) | 2006-09-28 | 2012-03-06 | Rockwell Automation Technologies, Inc. | Message engine searching and classification |
US8127035B1 (en) * | 2006-09-28 | 2012-02-28 | Rockwell Automation Technologies, Inc. | Distributed message engines and systems |
US8782249B1 (en) | 2006-09-28 | 2014-07-15 | Rockwell Automation Technologies, Inc. | Message engine |
US8812684B1 (en) * | 2006-09-28 | 2014-08-19 | Rockwell Automation Technologies, Inc. | Messaging configuration system |
US20090094229A1 (en) * | 2007-10-03 | 2009-04-09 | Mark Warne Ferrel | Method and apparatus for exploiting 'trace' function to support database integration |
US8515903B2 (en) | 2007-10-03 | 2013-08-20 | Database Logic Inc. | Collaboration of plural databases by interaction through universal index |
US7933813B2 (en) * | 2007-11-08 | 2011-04-26 | Christopher S. BARTON | End-to-end management of carrier services for enterprises and resellers |
US8019839B2 (en) * | 2009-05-11 | 2011-09-13 | Accenture Global Services Limited | Enhanced network adapter framework |
US20120005603A1 (en) * | 2009-09-17 | 2012-01-05 | The Bank Of Tokyo-Mitsubishi Ufj, Ltd. | Application development supporting apparatus, program, and recording medium |
US8984533B2 (en) | 2010-04-15 | 2015-03-17 | Rockwell Automation Technologies, Inc. | Systems and methods for conducting communications among components of multidomain industrial automation system |
US8484401B2 (en) | 2010-04-15 | 2013-07-09 | Rockwell Automation Technologies, Inc. | Systems and methods for conducting communications among components of multidomain industrial automation system |
US9392072B2 (en) | 2010-04-15 | 2016-07-12 | Rockwell Automation Technologies, Inc. | Systems and methods for conducting communications among components of multidomain industrial automation system |
US8738704B2 (en) * | 2010-09-07 | 2014-05-27 | Xerox Corporation | Publish/subscribe broker messaging system and method |
US20120323941A1 (en) * | 2011-06-17 | 2012-12-20 | Microsoft Corporation | Processing Queries for Event Data in a Foreign Representation |
US8645957B2 (en) | 2011-08-02 | 2014-02-04 | Microsoft Corporation | Optimized datacenter management by centralized task execution through dependency inversion |
US9811251B2 (en) | 2014-09-23 | 2017-11-07 | Environmental Intellect, Llc | Graphical user interface systems and methods for data integration with data-driven engineering drawings |
US10346420B2 (en) * | 2016-05-30 | 2019-07-09 | Sap Se | Database integration system |
US10467072B2 (en) | 2017-04-05 | 2019-11-05 | Rockwell Automation Technologies, Inc. | Common gateway platform |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5923879A (en) | 1997-07-02 | 1999-07-13 | Ncr Corporation | Conversion system and method between corba and c/c++ architectures for corba data pairs/couples |
US6442619B1 (en) | 1997-12-31 | 2002-08-27 | Alcatel Usa Sourcing, L.P. | Software architecture for message processing in a distributed architecture computing system |
US6499036B1 (en) | 1998-08-12 | 2002-12-24 | Bank Of America Corporation | Method and apparatus for data item movement between disparate sources and hierarchical, object-oriented representation |
KR100684680B1 (ko) | 1998-11-18 | 2007-02-22 | 사가 소프트웨어, 인크. | 확장가능한 분산된 기업용 애플리케이션 통합 시스템 |
US6256676B1 (en) | 1998-11-18 | 2001-07-03 | Saga Software, Inc. | Agent-adapter architecture for use in enterprise application integration systems |
US6877023B1 (en) * | 2000-01-28 | 2005-04-05 | Softwired, Inc. | Messaging system for delivering data in the form of portable message formats between message clients |
AU2001251195A1 (en) * | 2000-03-30 | 2001-10-15 | Cygent, Inc. | System and method for establishing electronic business systems for supporting communications services commerce |
US20030037174A1 (en) * | 2000-10-02 | 2003-02-20 | David Lavin | Common adapter/connector architecture |
US20020116454A1 (en) | 2000-12-21 | 2002-08-22 | William Dyla | System and method for providing communication among legacy systems using web objects for legacy functions |
US6792431B2 (en) | 2001-05-07 | 2004-09-14 | Anadarko Petroleum Corporation | Method, system, and product for data integration through a dynamic common model |
US6745208B2 (en) | 2001-05-31 | 2004-06-01 | International Business Machines Corporation | Method and apparatus for synchronizing an XML document with its object model |
JP3961795B2 (ja) * | 2001-08-22 | 2007-08-22 | 株式会社神戸製鋼所 | 可燃性廃棄物の燃焼処理方法およびその装置 |
US7831655B2 (en) * | 2001-10-18 | 2010-11-09 | Bea Systems, Inc. | System and method for implementing a service adapter |
US7089568B2 (en) * | 2001-10-26 | 2006-08-08 | Hitachi, Ltd. | Program control method, computer system, control program, and storage medium storing the control program |
US20030172368A1 (en) * | 2001-12-26 | 2003-09-11 | Elizabeth Alumbaugh | System and method for autonomously generating heterogeneous data source interoperability bridges based on semantic modeling derived from self adapting ontology |
-
2003
- 2003-02-06 US US10/361,202 patent/US7191450B2/en active Active
-
2004
- 2004-01-27 WO PCT/EP2004/050044 patent/WO2004070494A2/en active Application Filing
- 2004-01-27 CN CNA2004800036737A patent/CN1748201A/zh active Pending
-
2006
- 2006-08-28 US US11/467,604 patent/US20070067779A1/en not_active Abandoned
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109788014A (zh) * | 2017-11-14 | 2019-05-21 | 阿里巴巴集团控股有限公司 | 一种消息处理、物联网系统的消息处理方法和装置 |
CN112286619A (zh) * | 2020-12-28 | 2021-01-29 | 南京智闪萤科技有限公司 | 用于数据驱动界面呈现的方法、电子设备和存储介质 |
CN114968877A (zh) * | 2022-08-01 | 2022-08-30 | 摩尔线程智能科技(北京)有限责任公司 | 硬件的管理方法、适配器、主机及存储介质 |
CN114968877B (zh) * | 2022-08-01 | 2022-11-25 | 摩尔线程智能科技(北京)有限责任公司 | 硬件的管理方法、适配器、主机及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2004070494A2 (en) | 2004-08-19 |
US20070067779A1 (en) | 2007-03-22 |
US7191450B2 (en) | 2007-03-13 |
US20040158842A1 (en) | 2004-08-12 |
WO2004070494A3 (en) | 2005-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1748201A (zh) | 数据驱动的应用程序集成适配器 | |
CN1137443C (zh) | 设备控制系统和方法 | |
CN1222896C (zh) | 用户简档数据的管理 | |
CN1754148A (zh) | 动态数据驱动应用集成适配器 | |
CN1154298C (zh) | 分布式网络计算系统及该系统用的信息交换装置和方法 | |
CN1510875A (zh) | 用于控制信息处理设备的系统和方法 | |
CN100336018C (zh) | 用于对应用启动进行管理的便携式终端和方法 | |
CN1304981C (zh) | 用于基于规则的万维网方案与活动的系统与方法 | |
CN1261892C (zh) | 支持多个客户数据交换协议的工业过程控制数据访问服务器 | |
CN1300677C (zh) | 分布式计算服务平台 | |
CN1961329A (zh) | 用于按需业务协作的信息超链管理的方法和装置 | |
CN1890944A (zh) | 用于web服务中介体的端口类型不可知的代理支持 | |
CN1575466A (zh) | 存在管理的实现 | |
CN1677277A (zh) | 服务提供方法、服务提供商设备、信息处理方法和设备 | |
CN1787495A (zh) | 可靠地传输排队的应用程序消息 | |
CN1656468A (zh) | 用于同步不同数据存储器中数据存储方式的方法和设备 | |
CN1720525A (zh) | 电子发送消息的翻译 | |
CN1783083A (zh) | 动态概要模块 | |
CN101044498A (zh) | 工作流服务体系结构 | |
CN1266512A (zh) | 适用于面向对象编程语言的硬件加速器 | |
CN1901490A (zh) | 用于提供Web服务的方法、装置以及程序产品 | |
CN1669018A (zh) | 手持终端框架系统 | |
CN1783792A (zh) | 动态内容改变通知 | |
CN1609795A (zh) | 用于计算机平台的编程接口 | |
CN1672158A (zh) | 使用多个传递媒体的成批通信过程 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20060315 |