可能各位看到这篇文章的标题时,脑子中都会浮现这样一个疑问:TIBCO是什么?
       首先我在这里简单介绍一下TIBCO,TIBCO 软件公司 (纳斯达克股票代码:TIBX) 的总部设在加利福尼亚州的帕罗奥多,该公司致力于研发企业软件,帮助各大公司在面向服务的架构 (SOA) 和业务流程管理 (BPM) 方面取得成功。TIBCO 拥有 3000 多家客户,在 40 个国家/地区设立了办事处,为世界顶级的企业创造了更好的知名度和敏捷度 - TIBCO 称之为“The Power of Now?”。 TIBCO 着眼于利用并拓展其软件能力,帮助各公司迈向 Predictive Business:这是一种令人欣喜而又新颖的业务运行方式,它能够让公司预见客户的需要、创造商机并避免潜在问题。作为在企业内部实时传输数据的基础,TIBCO 软件能够独一无二地将公司的运营和业绩信息与期望的业务表现和业务规则信息关联起来,使企业能够在出现威胁和机遇之前做出预测和响应。
       TIBCO BusinessWorks是第一个利用Web服务标准(如SOAP、WSDL、UDDI和WSFL)提供高级业务集成(包括业务流程集成、实时监控和企业门户)的解决方案。通过推出TIBCO BusinessWorks,TIBCO公司提供了这样一种组件式解决方案,使几乎所有的企业都可迅速进行业务集成,不论他们解决业务问题的方法如何。TIBCO BusinessWorks扩展了TIBCO提供的解决方案范围,并与所有TIBCO产品完全兼容,从而允许BusinessWorks客户可随着企业的成长逐步发展为一个企业级集成平台。TIBCO估计BusinessWorks 将使集成技术对全世界70%多的企业客户产生吸引力。
       使用TIBCO一年左右了,在这期间有不少的痛苦和感慨,和别的技术不一样,TIBCO在遇到问题的时候,Google基本是没有什么用的,网上相关的资料少之又少,好在TIBCO提供的帮助文档足够强大。
TIBCO环境的简单介绍
       TIBCO需要一个自己的Runtime Agent环境来支持整个系统的运行,其上通过BusinessWorks来提供高级业务集成,程序的部署通过TIBCO Administrator来实现。程序的开发有自己的一套IDE,称为TIBCO Designer
DesignerTIBCO Designer启动界面
       TIBCO Designer是一个基于流程的可视化开发环境,TIBCO里面封装了很多拖拽即可使用的适配器(组件),如JDBC、TCP、JSM、RMI、SOAP。。。(当然也可以自己添加adapter)。开发人员在开发的时候只需要根据自己的流程画出自己的“流程图”就好了,不需在去做底层的开发,这样使设计和开发人员可以把更多的精力用于实际业务的处理。大家看他的安装目录会发现Spring的部分组件和JDOM、log4J等Jar包含其中。其实他的基本实现原理还是基于IOC的,甚至就直接使用Spring的jar。这个相信你在使用的时候会发现的。
设计一个简单的Web Service
       首先新建一个Project,然后按照下图所示,建立好相应的文件夹:
Folder       在Resources/Connections/Http Connections目录下拖拽一个HTTP Connection组件进来,建立一个Http监听连接。
Http_Conn
注:图中红圈处可以选择端口号、是否使用SSL安全连接
       我们的需求是,用户传过来一个Name,我们根据这个Name到数据库中检索对应的记录,并将检索结果返回给用户,所以我们还需要建立一个JDBC连接,用来连接数据库。
JDBC_Conn_Type
注:图中红圈处可以选择连接类型,包括JDBC、JNDI等
JDBC_Conn
注:图中红圈处可以选择使用的JDBC驱动
       在对应的地方填写数据库地址、用户名、密码等,然后点击下方的“Test Connection”按钮,对JDBC连接进行测试。
JDBC_Conn_Test_Success
JDBC连接成功
JDBC_Conn_Test_Failed
JDBC连接失败
       现在我们来定义Web Service的输入、输出、失败数据结构,在这里我们使用XML Schema来定义,在/Resources/XMLSchema目录中拖拽一个XML的Schema组件,当然在这里我们也可以导入一个已经存在的xsd文件。
Add_XMLSchema
       双击拖拽过来的XML Schema组件,进入Schema的编辑界面,在这里定义数据结构
XMLSchema_Editor        建立WSDL,在/Resources/WSDL文件夹中拖拽一个WSDL组件
Add_WSDL       双击这个拖拽过来的WSDL组件,进入WSDL设计界面,在这里我们拖拽几个Message组件进来,用来添加Web Sevice的输入、输出、 失败等信息
Add_WSDL_Choose_Input
       再拖拽一个PortType组件进来,双击这个PortType组件,来定义相关的Operation
Add_WSDL_PortType
Add_WSDL_PortType_Operation        选中这个Operation,点击下方的Message Table右侧的“+”号,来添加输入、输出、异常的数据结构,这里的Message Details只能选择前面我们在WSDL中定义好的Message
Add_WSDL_PortType_Operation_Config        这样我们的WSDL文档就定义好了,现在我们来实现这个WSDL,我们在/MainProc目录中拖拽一个Process进来,TIBCO中的一个Process其实在运行的时候是相当于一个单独线程,每个Process都有一个“Strat”和一个“End”,表示Process的开始和结束。我们能够根据业务的流程通过可视化的操作方式来实现程序。
Add_Process       双击拖拽过来的Process组件,进入Process设计界面,由于我们需要实现一个Web Service,所以我们需要拖拽一个SOAP的SOAPEventSource组件进来,在SOAPEventSource这个组件中,我们需要选择刚刚定义好的WSDL、HTTP Connection、SOAP版本等,如果我们在一个WSDL文档中定义了多个PortType和Operation,那么在这里我们要选择实现哪一个PortType的哪一个Operation。
Add_Process_SOAP_Start         在SOAPEventSource这个组件的Advance选项卡中,我们还可以对Web Service的请求进行一些个性化定义(比如增加一个Header验证信息等等)
Add_Process_SOAP_Header        我们在SOAPEventSource这个组件的WSDL Resource选项卡中看到WSDL信息(里面的内容大家看着很眼熟吧?哈哈)
Add_Process_SOAP_WSDLResource        由于我们要根据用户的请求数据,对数据库进行检索,那我们拖拽一个JDBC Query组件进来,来实现对数据库的检索。在这个组件中我们要选择需要使用的JDBC Connection。
Add_Process_JDBCQuery        在组件中我们可以填写对应的SQL语句,在SQL Statement中可以使用“?”来实现数据的传入,如果在SQL Statement中使用了“?”,则需要在下面的Prepared Paramenters中增加对应的定义(注意:Prepared Paramenters中的定义顺序要和SQL Statement中的顺序一致)。
       打开JDBC Query的Input选项卡,对刚刚在Prepared Paramenters中定义的变量进行赋值。
 Add_Process_JDBCQuery_SetValue
Add_Process_SetValue_GlobalVariables
        打开JDBC Query的Output选项卡,可以看到ResultSet的输出结构,如果看不到的话,可以点击下方的“Fetch”按钮。
Add_Process_JDBCQuery_Output        下面进行异常处理,来防止Process僵死,首先我们要在End组件中添加自定义的ErrorSchema。
Add_Process_ErrorSchema        在这里我们选择如果没有检索到结果集,则抛出我们自定义的异常信息。我们需要拖拽一个Generate Error组件进来,在这个组件中我们可以选择刚刚在End组件中添加的自定义ErrorSchema。
Add_Process_ErrorSchema_Choose        在连接线中我们选择Condition Type,并填写判断条件信息
Add_Process_Condition_Context
Add_Process_Condition        捕获自定义的异常信息,有时候我们需要对异常信息进行处理(比如说做一些回滚什么的),在Catch组件中我们可以选择需要捕获的异常,当然也可以选择Catch All
 Add_Process_Catch_ErrorSchema
Add_Process_Catch_All
       返回相关信息,在异常情况下需要返回SOAPSendFault,正常情况下返回SOAPSendReply。在这两个组件中我们可以对返回值进行设置
Add_Process_ErrorSchema_SetErrorMessage
Add_Process_ErrorSchema_CopyValue        到这里一个Web Service就建立好了,在这个过程中各位会发现我们就写了一行SQL查询语句,没有写一行Java代码,这就是TIBCO的强大之处——Zero Code。
 
       好了,下次我会介绍一些对这个程序的优化,这个简单的程序可优化之处还是很多的,在后面我还会介绍如何使用TIBCO Administrator进行程序的部署等等……