用于企业服务总线的类 USB 通用端口类型,第 1 部分: 当前 ESB 存在的问题

简介

在面向服务的架构 (SOA) 中,企业服务总线 (ESB) 是基础架构的一个至关重要的组件。ESB 用于间接地连接采用不同服务格式的应用程序,如图 1 所示。这些不同格式的服务包括 Web 服务、RESTful 服务、异步服务(比如使用 MQ 的服务)、基于 CORBA 的服务、基于 DCOM 的服务和 Java RMI。这些服务采用不同的通信协议和消息格式。例如,Web 服务使用 HTTP 作为通信协议,使用 SOAP 作为消息格式类型,而异步服务可能采用 MQ 作为通信协议,采用 XML 作为消息格式。

目前,可用的 ESB 提供了众多核心功能来连接采用不同服务格式的应用程序。但是,在这些目前可用的 ESB 中,每个应用程序使用一种特定类型的端口来连接 ESB,如图 1 所示。给定应用程序使用的端口类型由该应用程序使用的通信协议和消息格式类型确定。应用程序在对这些特定端口类型的使用上存在诸多问题。您将在本期(本系列的第一部分)后面一节中了解这些问题和不便性。

应用程序使用特定端口类型连接 ESB
应用程序使用特定端口类型连接 ESB

在本期的下一节中,我们将首先简单介绍 ESB,列出应用程序之间的点对点连接中固有的一些问题,以及如何使用 ESB 帮助解决这些问题。接下来,在本期的第三节中,您将了解当前可用 ESB 中各种连接的应用程序对不同端口类型的使用所引起的各种问题。本期最后一节将提供一些总结性评论。

ESB 核心功能

本节的目的在于简单介绍 ESB,简短描述使用点对点连接方法将应用程序与各种不同的服务相连接的 3 种核心功能和相关的问题。

 

连接可扩展性和路由

设想一下一家需要集成 6 个应用程序的中型公司。连接这 6 个应用程序所需的连接略图如图 2 所示。

使用点对点集成方法的 6 个应用程序连接
使用点对点集成方法的应用程序连接

您可以看到,本例中所需要的连接数目为 15 个。这一数目相当于集成模式中应用程序不同配对的数量。同样地,可以看到,如果此例中有 10 个应用程序,需要的连接数量将为 45。因此,我们可以得出结论,随着应用程序数量增加,需要的连接数量会以非线性方式迅速增加。这被称作一种毛团问题,因为它可能阻碍任何网络。事实上,可以发现,如果企业要集成 N 个应用程序,点对点方法中需要的连接数量为

N(N-1)/2

这很容易理解,因为应用程序不同配对数量也为 N(N-1)/2。因此,我们可以得出结论,点对点集成模式并不适用于大型企业中的集成,应该找到另一种扩展能力更高的解决方案。

企业服务总线为连接可扩展性问题提供了一个优秀的解决方案,因此适合需要集成大量应用程序的大中型企业。在企业服务总线交互样式中,应用程序之间不直接进行交互。相反,应用程序连接到总线,总线提供途径以供应用程序之间建立连接。这种间接交互如图 1 所示,其中展示了 6 个应用程序通过使用企业服务总线进行交互。图 1 要注意的最重要一点是,所需的连接数仅为 6。此数量比点对点模式中 6 个应用程序所需的连接数(即 15)少得多。在此图中要注意的另一点是,所需的连接数量等于集成的应用程序数量。因此,如果我们有 10 个应用程序,仅需要 10 个连接。相对于点对点方法中需要的连接数量(即 45),这个连接数量非常小。

ESB 通过提供基于内容和上下文的路由来实现间接连接应用程序的功能。因此,请求应用程序不需要知道目标应用程序的地址,或者甚至不用知道哪些应用程序在提供该服务。

 

协议错误匹配和协议转换

通信协议错误匹配问题出现的原因在于,大型企业中的各个应用程序通常会采用不同的协议进行通信。换句话说,在真实世界中,这些协议会不断增生,其中包括 HTTP、HTTPS、JRMP、IIOP 和 JMS。由于这种增生现象,服务用户应用程序与服务提供者应用程序之间有时会发生协议错误匹配。因此,没有一种工具来将一种通信协议转换为另一种,服务用户应用程序将无法调用服务提供者应用程序所提供的服务。此问题的图略如图 3 所示。

协议错误匹配问题
协议错误匹配问题

因此,ESB 中应该包含的另一个核心功能就是一个可将一种协议转换为另一种的协议转换工具。使用此转换工具,采用不同协议的应用程序就可彼此交互。值得指出的是,当前可用的商用 ESB 已提供协议转换支持。例如,我们常常看到从 HTTP(用于异步消息交换)到 MQ 异步消息的转换。出于此用途,可以使用一个关联 ID 来将请求和响应 MQ 消息联系起来。

消息/数据格式错误匹配和转换

另一种异构性问题是数据/消息格式错误匹配的问题。此问题指的是这样一个事实,有时服务用户提供的数据格式与服务提供者应用程序所需的数据格式不太匹配。这会阻止应用程序彼此交互,如图 4 所示。

数据格式错误匹配问题
流程摘要

因此,ESB 需要提供的另一种核心功能是数据或消息转换。大多数可用的商用 ESB 都采用不同技术提供了此功能。例如,可采用 XML 样式表实现不同 XML 格式(包括 SOAP)之间转换。当此功能与其他两种 ESB 功能相结合时,应用程序之间可以轻易地进行连接和交互,即使在它们的接口和协议不完全匹配时。

其他功能

除了满足这 3 种功能需求外,ESB 还实现了服务来满足非功能性需求,比如性能和可靠性、审计和安全性。此外,许多商业 ESB 产品还提供了其他一些可选的服务,比如数据扩充、消息分发、更正和监视。

这些功能和非功能需求可由单个产品或一组产品来满足。换句话说,ESB 基本来讲是一种模式,它没有必要实现为单个产品。

当前可用 ESB 的问题

在当前可用 ESB 中,每个应用程序使用一种特定的端口类型来连接 ESB,如图 1 所示。端口类型由应用程序用于公开其功能的服务类型决定。例如,通过 Web 服务公开其功能的应用程序必须使用这样的端口类型,它提供 HTTP 作为通信协议,提供 SOAP 作为消息格式。换句话说,给定的应用程序必须通过一种具体的端口类型连接 ESB,端口类型由应用程序使用的通信协议和消息格式确定。出于许多原因,这种应用程序通过特定类型的端口进行连接的方法既不灵活,也不方便。其中一些原因是:

  • 许多时候,由于需求或运行时环境改变,应用程序希望切换通信协议。但是,这也需要更改 ESB 一端的端口类型,而且几乎肯定需要构建另一种类型的端口。这无疑会消耗不少时间和资源。
  • 一种常见情形是,一个应用程序希望使用多种协议来公开不同的功能,大型机 COBOL 应用程序常常会遇到此情况,给定应用程序使用 Web 服务公开它的部分功能,而与此同时,它使用 MQ 等消息传递协议公开另一部分功能。再一次,这需要在 ESB 一端构建新的端口类型来同时提供两种类型的协议,这非常不方便,因为它会耗时又耗资源。
  • 在目前可用 ESB 中,很难将 ESB 的用途扩大到新构建的通信协议。这是因为,它需要同时更改应用程序一端和 ESB 一端。在 ESB 一端,需要开发全新的端口类型。
  • 因为每个应用程序必须通过一种特定类型的端口连接到 ESB,所以需要花许多工夫来配置 ESB,以供应用程序使用。这些工夫可能包括构建一种新端口类型、将它部署在 ESB 中,并配置 ESB 以使用这个特定的端口。所有这些都使得难以使用 ESB 连接大量应用程序,并进而导致可扩展性问题。
  • 另外,由于每个端口必须独立部署和配置,所以很难维护和更新 ESB。

 
 
 

UNIX文件系统分类

UNIX操作系统可由多个可以动态安装及拆卸的文件系统组成。
UNIX文件系统主要分为两大类:根文件系统和附加文件系统

根文件系统(the root file system)  每一个UNIX操作系统在其主硬盘上至少含有一个文件系统,它包含构成操作系统的程序和目录,一般由“/”符号来表示。

附加文件系统   除根文件系统外的其它文件系统,如/u文件系统,AFS文件系统等。

以后如无特别声明,本文都是针对根文件系统来进行说明的。

 

 

 

UNIX注销/退出

在每次使用完后,一定要进行注销,以防他人通过你的帐号进入系统,并保证系统的完整性。注销过程如下:在UNIX提示符下,运行:

$ exit

$ logout

或直接按键:

Ctrl+d。

由于UNIX操作系统的不同,注销的命令也可能不同。

 

 

 

UNIX命令简介

在Shell提示符下,就可以输入UNIX命令。UNIX命令的基本格式如下:

command  参数1  参数2  …  参数n

UNIX命令由一个命令(command)和零到多个参数构成,命令和参数之间,以及参数与参数之间用空格隔开。UNIX的命令格式和DOS的命令格式相似,但UNIX的命令区分大小写,且命令和参数之间必须隔开。如:对DOS来说是以下四条命令是相同的:

cd\tmp

cd \tmp

CD \tmp

cd \Tmp

对UNIX操作系统来说,改变目录的命令也是cd命令,以下是正确的UNIX cd命令:

cd /tmp

cd /Tmp

但tmp和Tmp是两个不同的目录。以下两条命令:

cd/tmp

CD/tmp

已经不是cd命令了。

一、UNIX常用简单命令

下表列出了几个简单的UNIX命令:

解释 UNIX命令 命令举例
帮助 man man date
查看日期 date date
显示日历 cal cal 1998
显示大字 banner banner “ABCD”
计算器 bc bc
修改口令 passwd passwd
查看谁在使用 who who
查看我是谁 who am i who am i
清除屏幕 clear clear

二、特殊键

在UNIX命令操作中有一些特殊键,列表如下:

Ctrl + d 结束键盘输入或退出当前shell
Del 0中断键,停止当前动作回到shell
Ctrl+s 暂停屏幕输出
Ctrl+q 继续屏幕输出
Ctrl+u kill键,删除光标所在行的所有字符
Esc 结束当前的操作状态(如vi)

三、UNIX用户间简单通讯命令

UNIX提供许多方式让用户相互通信,它允许你以文本的方式发送及接收信息。你可以传递信息给其他用户、所有用户、或自己。信息来源可以是文本文件或直接由键盘输入的内容。

(一)write 命令

可使用write 实用程序向已注册的另一个用户发送一条报文,当对方也使用write 命令时,双方之间就建立了通信。

当用户使用write 命令时,就在对方用户终端上显示提示信息。write 命令的格式如下:

write destination-user [terminal]

其中,destination-user 是你想与之通信的用户注册名,通常使用who 命令查看其注册名。如果对方在多台终端上登录,可通过用terminal 来控制write 的报文送向指定的终端。为了建立与其他用户的双向通话,用户和对方每次必须执行write 命令,且必须指定注册名。一般在使用UNIX 进行通话时,通信双方有一些约定:用“o” 表示结束一条报文,“oo” 表示结束这次通信,用ctrl-d 退出write 命令。

[例1] UNIX上两用户alex 和jenny 通过write命令通信。

在alex的所在终端上:

$ write  alex  <CR>

Hi Alex, are you there? o<CR>

Message from Alex (tty11)[Sat Jan 5 15:08]….

Yes Jenny, I’m here. o<CR>

Thank you ,Alex, bye! oo<CR>

Ctrl-d

$

该例说明了使用write 命令实现Alex 和Jenny 的通信过程。首先Jenny 使用前两行向Alex发送了一条报文,接下来的两行是Alex 发送的报文Jenny 收到了,省略号表示他们的通信继续。最后,Jenny 用thank you,Alex,bye!oo 告诉Alex没有话要说了,并在下一行开始键入ctrl-d 来退出write 并回到shell。

(二)使用talk与另一个用户对话

talk 命令是一个虚拟通信命令,它把用户终端上的信息一行一行的发送给另一个用户,其格式如下:

talk user-name [terminal]〈CR〉

注意,使用talk 进行双方对话时,双方使用的机器体系结构必须相同。当对方给出响应的talk命令后,双方终端上都显示

[connect established]

时,双方可双工通信了。双方可以以任意的速度从键盘输入,talk 把你的输入一行一行的显示在你和对方的屏幕上。用ctrl-d 退出talk 。

(三)使用mesg 拒绝和允许接收报文

mesg 命令允许或拒绝接收由其它终端发来的write 和talk通讯信息。mesg命令在本地终端运行,其使用格式如下:

mesg [y] [n]〈CR〉

其中,y 表示允许接收,n 表示拒绝接收。如既不给出y 也不给出n ,则报告现在的许可状态。例:

[例1] 显示状态:

$mesg <CR>

则命令的执行结果为:

is y

或      is n

[例2] 拒绝接收由其它终端发来的write 和talk通讯信息:

$mesg  n

$mesg

is n

(四)wall 广播式消息传递

所有登录用户都可收到该消息。仅超级用户使用该命令。wall命令有以下几种格式:

# wall

# wall filename

# wall “send a message to all the people。”

 

 

 

UNIX启动终端和登录

启动终端

对于专用终端,当打开终端电源后就会自动出现登录信息。
对于仿真终端,要先打开计算机,再运行TCP/IP协议驱动程序和终端仿真程序即可。

登录

当终端与UNIX系统连通后,在终端上会出现”login:”提示符。在”login:”提示符下输入用户名,
出现”password:”后再输入口令,如以abc用户登录的过程为:
Login: abc
Password:
输入的口令并不显示出来,输入完口令后,一般会出现上次的登录信息,以及UNIX的版本号。
当出现TERM一行时,要求输入所使用的终端类型。
最后出现UNIX Shell提示符,等待用户输入命令。
B Shell和K Shell的缺省提示符为”$”,C Shell的缺省提示符为”%”。
当以root用户登录时,系统提示符为”#”。

 

 

 

与UNIX有关的几个名词

与UNIX有关的几个名词

多用户(Multi-users)
允许多个用户同时使用计算机的能力

多任务(Multi-tasking)
为每一个用户同时执行多个任务的能力

终端(Terminal)
终端是用户和计算机进行实时交互的接口设备。终端一般由显示器、键盘和终端控制器组成,有的还带有鼠标
显示器和键盘与终端控制器相连,终端控制器通过通用端口(如串口)和计算机主机相连
用户通过终端和计算机交流
一台UNIX主机可以连多个终端
终端分为两类:字符终端和图形终端

仿真终端
在某计算机上运行某一特定程序,把计算机当作另一台计算机的终端使用。目前仿真终端与UNIX主机的连接方式主要有网络连接和串口连接

控制台(Console)
这是一种特殊的终端,由显示器、键盘(和鼠标)组成,分别连到主机的专用接口(监视器接口、键盘接口、鼠标接口)上
一般一台主机只能接一个控制台,控制台可以完成普通终端不能完成的工作:
非常重要的信息(如严重的错误信息),只能在控制台上显示,有些特殊的任务(如执行修复工作)也只能在控制台上完成
除了实现以上特殊功能外,控制台还可以象其它终端那样工作

用户名(User)
UNIX是多用户操作系统,它允许多个用户同时使用。每个用户拥有用户名、登录口令以及操作特权
用户每次使用UNIX时必须先登录:输入用户名和口令。一般用户的UNIX操作系统提示符一般为”$”

工作组(Group)
几个用户可以组成一组,同组内的用户可以共享信息

root用户
UNIX的超级用户,拥有其他用户没有的特权。root用户的UNIX操作系统提示符一般为”#”

 

 

 

解决IE缓存问题

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <%
 response.addHeader("Cache-Control","no-cache");
 response.addHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");
 %>
 

 
 
 

Cookie和session的区别

Cookie session
存储在客户端 存储在服务器端
两种类型

有声明周期

无声明周期

两种实现方式

依赖于cookie

url重写

父路径不能访问子路径的cookie 同一个session的窗口共享一个session
典型应用:

3个月不用再登陆

购物车(http://www.china-pub.com/)

典型应用:

用户登陆

购物车也可以用session实现。·

不可靠 可靠

 
 
 

关于乱码的问题

场合:页面本身有中文的时候
解决办法:servlet:resp.setContentType(“text/html;charset=gbk”);
Jsp: <%@ page contentType=”text/html;charset=gb2312″%>
注意:一定要写在PrintWriter out = resp.getWriter();之前

场合:解决get方式乱码问题:
解决办法:修改server.xml ?URIEncoding=”GBK”

场合:解决post方式提交内容的乱码
解决办法:request.setCharacterEncoding(“GBK”);
注意:一定要写在存取第一个参数之前
不要调用response.setCharacterEncoding(“GBK”);

场合:<jsp:param name=”user” value=”<%=s%>”/>,url地址包含中文参数
解决办法:<%request.setCharacterEncoding(“GBK”);%>
注意:

 
 
 

servlet生命周期

只有一个对象

第一次请求的时候被初始化,只一遍

初始化后先调用init方法,只一遍

每个请求,调用一遍service–>service–>doGet/doPost

以多线程的方式运行,不要在servlet中设计成员变量

卸载前调用destroy方法

 

 

 

字体大小: 减小一号 减小一号
▲ Back to top 繁體