Chinaunix首页 | 论坛 | 博客
  • 博客访问: 362713
  • 博文数量: 157
  • 博客积分: 3001
  • 博客等级: 中校
  • 技术积分: 1330
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 13:47
文章分类

全部博文(157)

文章存档

2011年(1)

2010年(28)

2009年(124)

2008年(4)

我的朋友

分类: WINDOWS

2009-06-12 16:50:18

SOA是现在非常热门的一个话题,许多公司都相继推出了自己的SOA产品,Oracle当然也不例外。我在这里要介绍的是Oracle SOA Suite 10.1.3.1 预览版。虽然正式版本还要有一两个月的时间才面世,相信这个预览版已经足够将大家带进SOA的真实世界了。

此预览版在Oracle OTN上可免费下载,同时还提供数篇参考文献。本文中的很多内容都源于这些参考文献,站在巨人的肩膀上总是好办事的。不过这些文档也有不尽如人意的地方,我曾经和几位作者联系过,改进了几个地方。每次从Oracle Employee树中查看他们的头衔,我总是冒着冷汗去写邮件,心里惴惴不安的担心他们会不会把我的信cc给哪个director或是VP级的人物,虽然后来发现他们都是很和善的家伙。

本文是翻译和原创的混合体,且把重点放在演示上,不会说很多的技术细节。

那就开始行动吧,相信你的旅程会是轻松愉快的。

搭建一个从开发到部署的完整的Oracle SOA环境,需要以下三个产品:

     Oracle数据库
支持版本有:9i、10g、olite和XE。
 
     JDeveloper(IDE)
JDeveloper是一款开发利器,里面不仅集成了Oracle自己的J2EE开发框架还提供了便捷的单元测试、Oracle数据库客户端和部署应用程序等功能。除了Oracle自己还有许多开源团队在不断奉献着精彩的plugin。但是坦白的说,Jdeveloper的性能不是十分理想,比较耗费内存,有时会发生窗口“白化”。我曾经问过几个Developer,他们给我的回答是:“一个东西功能太强大了,包含太多的东西,有时会…”,我知道这不是一个满意的答案,但是我清楚的知道,如果你将来的工作都是与Oracle的产品相关的话,JDeveloper绝对是正确的选择。这里我给出的,呵呵,应该Oracle官方给出的推荐的最小内存是512M。
 
     SOA Suite
下载地址
 
引用官方的一段话:
Oracle SOA Suite is a complete set of service infrastructure components for building, deploying, and managing SOAs. Oracle SOA Suite enables services to be created, managed, and orchestrated into composite applications and business processes. With Oracle SOA Suite's hot-pluggable components, organizations can easily extend and evolve their architectures instead of replacing existing investments.
请关注“hot-pluggable”,我给它的解释就是“热插拔”,因为包括BPEL、ESB、RULES和EM等在内的component(组件)都是作为应用程序部署在OC4J上的,你可以随意的start、stop、deploy或deploy。
下面这张图是Oracle SOA SUITE的架构图  
有关SOA的理论知识我就不多说了。你可以阅读有关书籍和文档。
#p#
第一部分:软件安装
 
数据库、JDeveloper和SOA SUITE可以安装在同一台机器上,也可以安装在不同的机器上。由于它们都是比较耗内存和CPU的,所以如果三者安装在一台机器上,建议最少提供1g的内存,2G或以上为佳。
 
本文选择安装在一台windows XP的个人电脑上。

DHCP情况的网络配置
如果你SOA SUITE将安装在有固定IP的机器上,可以忽略这一步。如果是DHCP方式的,就要做事先做一些配置,安装Lookback Adapter。
 
1、 通过ipconfig /all命令检查是否已经安装了Lookback Adapter,如果已经安装,可以直接进行第2步。
2、 在windows2000或windowsXP下安装的过程基本一致
1) 打开控制面板,选择添加新硬件
 
2) 选择手动添加网络适配器
3) 选择添加 Microsoft-lookback adapter
 
4) 打开网络连接面板,可以看到一个新创建的连接,例如“本地连接2”。配置属性:
其中IP可以是192.168.x.x (x可以为1到255之间的任意数字)或10.10.10.10,子网掩码必须是255.255.255.0,默认网关为空。
5) 重启机器
6) 在windows或winnt目录的system32\drivers\etc\hosts文件中添加:ip_address hostname.domain hostname。
其中ip_address就是我们在d)中指定的,hostname和domain可以从系统属性中获得。
 
注意:OTN上有一篇详细的安装文档,里面把所有可能出现的情况都列举出来了,如果我在这里的叙述不能满足你的需要,可以参看那篇文档。
#p#
第二部分:安装数据库
 
SOA Suite可以安装在Oracle Enterprise Database、Oracle Standard Database、Oracle Express Edition或Oracle Lite(Olite)上。版本为9i以上(包括9i)。我在这里选用的是Oracle Enterprise Database 10.2.0.1。
安装过程非常简单,需要注意的是数据库的字符集,我推荐使用AL32UTF8。通俗的但可能不准确的说,AL32UTF8是所有字符集的超集,用它可以减小字符集转换的风险,也可以在同一个库中存不用语言下的字符。而如果使用ZHS16GBK时,存韩文或日文等的字符时就会garbage掉。
 
安装JDeveloper 10.1.3.1预览版
与SOA Suite 10.1.3.1配套,JDeveloper也推出了它的10.1.3.1 预览版,可以在Oracle OTN上下载:
这是一个zip包,直接解压缩就可以使用了,启动程序jdevw.exe就在根目录下。
 
安装SOA SUITE的数据库schema
这里提前要说的是,SOA SUITE有两种安装模式:基本安装和高级安装。如果选择高级安装,则要预先在第1步创建的数据库中创建SOA SUITE安装需要的schema,其中包括ORABPEL、ORAESM和ORAWSM三个schema。
安装脚本就包含在预览版中,请在OTN上下载:
这也是一个zip包,解压缩后,运行install\soa_schemas\irca子目录下的irca.bat脚本,脚本会提示你输入以上三个schema的口令,这里我们假定都设为welcome0。
 
安装SOA SUITE 10.1.3.1 预览版
上一步已经下载并解压缩,下面运行根目录下的setup.exe。安装过程如下:
1、第一页
这一页是选择基本(basic)安装还是高级(Advanced)安装,两者没有本质的区别,基本安装是一键式安装:随意输入AS实例名,指定管理员(oc4jadmin)的口令并确认后点击“安装”后就可以完成安装。这里特别要提出的是,基本安装方式是不需要事先安装数据库的,它会在安装过程中自动创建一个Olite数据库。不幸的是,我们在平时shiphome的测试中,发现SOA SuiteOlite上总是会有一些小问题,所以推荐不要选择基本安装,而使用高级安装。
选择“高级安装”点击“下一步”,会弹出一个警告,选择“是”:
这时,安装窗口会短暂消失,然后出现下面这个进度条:
 
2、第二页
有四个安装选项:
我们要选择第一种,可以看出其他三种都是第一种的子集。如果你想让产品支持除英语和安装所在机器的语言(本例中为简体中文)外其他国家的语言,可以点击“产品语言”按钮进行选择。最直观的收益是,在安装后,根据你浏览器语言设置的不同,组件的访问界面可以显示出相应的语言,如果没有安装这种语言,缺省会显示英文。
 
3、第三页
在这一页里要指定我们在1中创建的数据库的具体信息。具有DBA权限的用户选择sys,口令为创建数据库时指定的口令,例如welcome0;主机名和端口例如为wangbaolei.cn.oracle.com;服务名例如为soadb.cn.oracle.com。
注意,从这一页中可以看出,数据库可以不用和SOA SUITE安装在一台机器上,因为它是通过JDBC的方式访问数据库的。
 
4、第四页
输入我们在2.4节中使用的口令welcome0
 
5、第五页
这一页不需要任何改动。
 
6、第六页
这一页很关键,AS实例名随意输,管理员口令随意输。请一定选中“将此项配置为管理OC4J实例”的复选框(checkbox),如果不选中它的话,就无法在EMenterprise manager)里管理BPEL等应用程序了。OC4J实例名保留缺省值,这里请你牢记这个实例的名字,我们在下面会不只一次的用到。
 
7、第七
我们不作集群拓扑配置。
 
8、第八页
OK,这是一个summary的配置,你可以浏览前面所作的选择,必要时可以退回去重新选择,否则点击“安装”。
下面的安装不再需要人工干预,一路畅通直到最后安装结束。
#p#
第三部分:安装后的测试
 
安装后通常进行简单的测试,看看各个component的状态是否正常。
获得http port和component的URL
获得Http Port是非常重要的,因为SOA SUITE中很多component的console都是通过浏览器访问的。
其实在上面安装结束的最后一页,你已经看到了Http Port。这里要说的是一个正式保存的文件,即SOA SUITE的%ORACLE_HOME%/install\readme.txt。文件里除了列出http port外,还列出了很多component的URL,本例中:
Welcome Page
80/
 
URL Oracle Http Server:
80/j2ee
 
 URL Oracle Enterprise Manager 10g Application Server Control:
80/em
 
Access the Oracle Web Services Manager through the following URL
80/ccore
 
Access the Oracle Business Rules Author through the following URL
80/ruleauthor
 
Access the Oracle Enterprise Service Bus through the following URL
80/esb
 
Access the Oracle BPEL Process Manager Control through the following URL
80/BPELConsole
 
 
因为本文中所有的操作都是在server本地进行的,故使用localhost即可;而port为80时也可以省略点。
注意,上面这些componentURLport后面的部分是大小写敏感的,就是说如果你不小心输入了错误的大小写,将会得到404的错误。
登陆welcome page
在浏览器中打开,
这是一个信息十分丰富的页面,左边的公告牌中列出了四个经常使用的component的链接,下面列出了一些OTN上相关资料的链接
访问EM,获得runtime port
EM 就是Application Server Control,为什么会用EM做缩写,我也不太清楚了,老板们的决定了。其实Oracle的很多产品中都有EM的身影,比如说大家熟悉的Oracle Database。另外,如果你曾经访问OTN的话,你还会发现EM其实还是一个单独的产品。
EM相当于一个中控台,它管理着整个Application Server,比如说start|stop|stop OC4j instance,创建connection pool等等,在下面的3.2.2小节你会用它来配置许多东西。
 
主页
在浏览器中敲入/em,用oc4jadmin/welcome0登陆。安装时我已经说过,oc4jadmin是缺省的一个超级用户,welcome0是安装时指定的口令。
注意:在advanced安装模式下,有两个oc4j instance:home和oc4j_soa。其中EM是部署并运行在home下的,BPEL、ESB等都是运行在oc4j_soa下的。这点与 basic安装模式不同,在basic安装模式下,只有一个home instance,所有东西都是部署并运行在home下的。
获取runtime ports
1、拖动滚轮,把主页拉到最下面,你会看到一个Administration区,点击Runtime Ports链接
 
2、从这个列表中,找到“OPMN Request”的port和“oc4j_soa RMI”的port
这里,“OPMN Request”的port是6003,“oc4j_soa RMI”的port是12401。
记住这两个port,在3.2.3小节里用到。
访问BPEL console
BPEL console是BPEL自己的中控台,它能完成一些EM完成不了的功能。
在浏览器里敲入/BPELConsole,以oc4jadmin/welcome0登陆。你还可以使用 bpeladmin/welcome0登陆,bpeladmin是BPEL的超级用户。至于oc4jadmin和bpeladmin在权限上有什么区别,就在此讨论了。
呵呵,Dashboard上有很多东东嘛!不好意思,这张图是我在部署了一些Processes,并运行了一段时间之后才抓取的。你在安装后第一次登陆时,是不会看到这么多东西的。通过这个console我们可以管理部署的process,并观察process instance运行的情况。
如果有机会,让我们来单独讨论BPEL。
访问ESB console
ESB console是ESB自己的中控台,它能完成一些EM完成不了的功能。
在浏览器里敲入/esb,用oc4jadmin/welcome0登陆。
最开始显示的Services页,左边的列表中会列出当前所有可用的service,除了DefaultSystem外,其他都是我后来部署上去的。也就是说当安装后第一次登陆时,只有DefaultSystem。
点击工具条上的 可以转到instances页,该页提供搜索条件让你查询instance,选中某个instance,还会给出它的运行细节。
 
如果有机会,让我们来单独讨论ESB。
 
访问Rules console
在浏览器中敲入/ruleauthor,用oc4jadmin/welcome0登陆。
我们可以在这个console上完成很多事情,包括管理Repository,定义ruleset等。这些都是在EM里无法完成的。
 
 
访问OWSM console
顾名思义,OWSM是管理web service的。
在浏览器里敲入/ccore,用admin/oracle登陆。
本文不会用到OWSM,故不做详细说明。
 编写设置环境变量的脚本
由于Oracle DB和SOA Suite都安装在一台机器上,注册表里会有两个Oracle Home,同时系统的path环境变量里也会它们的bin目录等加进去,后安装的SOA SUITE的目录会放在前面。所以,如果你要使用Oracle DB的话,应该写一个简短的设置环境变量的脚本,例如:
set ORACLE_HOME=D:\oracle\OraDb
set J2EE_HOME=%ORACLE_HOME%\j2ee\home
set ORACLE_SID=tina03
set PATH=%ORACLE_HOME%\jdk\bin;%ORACLE_HOME%\bin;%PATH%
set LD_LIBRARY_PATH=%ORACLE_HOME%\lib;%ORACLE_HOME%\ctx\lib
call d:
cd d:\
 
总结-SOADEMO中要用到的东东
在第3章中,我们要演示SOADEMO系统,里面有许多配置参数都是与你安装的instance有关的,现在总结如下:
Host name
Localhost or the full name, eg: wangbaolei.cn.oracle.com
oc4j instance name
oc4j_soa
http port
80
Opmn request port
6003
Oc4j_soa RMI port
12401
Password of oc4jadmin
Welcome0
 #p#
第四部分:SOADEMO系统
 
从OTN可以下载到一个soademo_101310_preview.zip,这是SOADEMO的源码包,可以在JDeveloper中打开。
下载地址
 
注意,这个包可能有点问题:如果这个包的根目录下有一个叫decisionservices的文件夹,请把它删除掉,因为它可能会造成编译无法通过,错误原因是duplicate class。

简介
这里我们虚构了一个叫做Global Company的公司,它的主要业务就是在网上卖电子产品,比如MP3等。从功能的角度来说,SOA Order Booking系统实现了“从客户登陆web client端填写订单,到后面的可能的人工批示,再到选择supplier(供货商),最后到选择自动选择发货方式和通知客户”。从技术的角度来说,它充分的展示了如何将现有的企业内部应用程序和企业外部应用程序组装在一起构成一整套流程。
下面这副图就是SOA Order Booking系统的一个overview,从中你可以看出它的大致流程。请注意,很多应用程序都“松耦合”的参与其中,它们不只是可以在SOA Order Booking系统中使用,也可以被别的系统使用。
 流程详解
1、   客户使用SOADEMO-CLIENT浏览货物并填写订单(order),订单发出后会自动调用OrderBookingESB服务
2、   OrderBookingESB服务接到请求后调用SOAOrderBooking BPEL应用,该应用定义了SOA Order Booking系统的主要流程。
3、   SOAOrderBooking把订单插入到数据库中
4、   SOAOrderBooking调用CustomerService服务从数据库中提取客户信息
5、   SOAOrderBooking调用CreditService服务来检查客户的信用卡(credit card)是否合法。如果不合法,自动取消这个订单;否则,将订单和客户的具体情况一起发给RULES引擎(决策服务)
6、   SOAOrderBooking通过RULES引擎(决策服务)定义的规则来决定是否需要人工审批:
a) 如果用户的status是白金(platinum),无需人工审批
b) 如果用户的staus是金(gold),当订单的总额超过1000美元时需要人工审批
c) 如果用户的status是银(silver),不管订单大小都需要人工审批
7、   如果订单需要人工审批,SOAOrderBooking调用人工流程(human workflow),并给有关人员发送消息。
8、   如果订单需要人工审批,有关人员登陆到worklist应用程序,批准或拒绝。SOAOrderBooking收到拒绝回复时,取消该订单,否则进行下一步。
9、   SOAOrderBooking同时向SelectManufacturer服务和RapidService服务请求报价,这里:
a) SelectManufacturer是一级代理商,所以报价比较低,但是它响应不是非常及时,即它是异步返回报价
b) RapidService不是一级代理商,所以报价比较高,但是它以快取胜,会同步返回报价
10、              SOAOrderBooking收集两个供应商返回的报价,选择给出低报价的那个供应商。
11、              SOAOrderBooking调用ESB服务FulfillmentESB来决定发货(ship)的方式
12、              FulfillmentESB检查订单的大小
a) 如果订单小于500美元,选择USPS,这个系统是从一个目录下取订单的,所以要用File adapter(文件适配器)把订单写到指定的目录下。
b) 如果订单大于等于500美元,选择 Fedex,这个系统等待订单出现在一个指定的数据库表中,所以要使用Db adapter(数据库适配器)把订单写到此表中
c) 所有订单,不论发货商是谁(USPS或Fedex),都保存在一个临时的JIMS queue中(写入过程由JMS adapter实现),并在前一天晚上以批处理的方式upload。
13、              SOAOrderBooking保存订单的状态在数据库
14、              SOAOrderBooking通过BPEL提供的邮件(email)功能发邮件给客户。
 
每个服务用到的技术
上面已经说过SOADEMO中有近10project,下面给出每个project使用到的技术。我们在这篇文章中不会谈太多的技术实现细节,而是focus在演示上。
Project
Technology and Techniques Used
CustomerService
     Uses EJB 3.0 entity objects that are generated from database tables. JDeveloper is used to generate the entity objects.
     Uses JSR-181 Web Services Metadata annotations.
     Uses a stateless session bean as the session facade. The session bean is generated by JDeveloper.
CreditService
Shows "top-down" implementation of web services: starting with a WSDL file, you use JDeveloper to generate Java classes from the WSDL file.
RapidService
     Shows "bottom-up" implementation of web services: starting with Java classes, you use JDeveloper to generate a WSDL file.
     Uses JSR-181 Web Services Metadata annotations in the Java files
SelectManufacturer
Shows a simple asynchronous BPEL process with Receive
and Invoke activities.
FulfillmentESB
     Shows routing services that use filters to check input data. The filters then direct the requests to the appropriate targets.
     Uses transformation rules to transform data appropriately for writing to databases and files. Database adapters and file adapters perform the writes.
     Shows a routing service that routes to a JMS adapter.
SOAOrderBooking
     Shows how to use BPEL to orchestrate a flow sequence.
     Invokes the services provided by all the projects (except for OrderBookingESB).
     Invokes other BPEL flows (the SelectManufacturer BPEL project).
     Invokes ESB project (the FulfillmentESB project).
     Shows how to integrate Oracle Business Rules with BPEL.
     Shows Decision Service.
     Sends email through the Email service.
     Uses the flow activity to send requests to RapidService and SelectManufacturer.
     Uses the human task to set up a step that requires manual approval
OrderBookingESB
Invokes a BPEL project (the SOAOrderBooking project) by
using a SOAP service
SOADemo-Client
     Shows how to invoke an ESB project from an ADF application (the "place order" button invokes the OrderBookingESB project).
     Shows how to call the CustomerService project from the "login" button.
#p#
第五部分:安装与部署
 
注意,以下所有的配置都是安装

安装SOADEMO的数据库schema
系统用到的所有数据库表都包含在一个方案(schema)中。soademo_101310_preview目录下有三个脚本createSchema.sqlc、createSchemaObjects.sql 和populateSchemaTables.sql。
1) 以sys用户连接sqlplus,运行createSchema.sql,会提示你输入要创建的用户名和口令,均输入soadem,即创建用户soademo并赋予一定权限。
2) 以soademo 用户登陆sqlplus,先后运行createSchemaObjects.sql 和populateSchemaTables.sql,分别创建表对象并向其中插入一些数据。createSchemaObjects.sql脚本时可能会出现一些drop table的ORA错误,请忽略这些错误,因为此时根本没有这些表,之所以要加drop table的语句是为了在需要时可以重复运行。
 
配置SOA SUITE instance
请回忆一下我们在2.6.8小节中总结的SOA SUITE中的参数,下面我们要不只一次的用到它们来进行配置。
 
创建connection pool(连接池)和data source(数据源)
1、访问EM的主页/em,用oc4jadmin/welcome0登陆。
 
2、点击“oc4j_soa”的链接,在这个页面里有五个tab(选项卡),点击“administration”
 
3、在这一页选择“services->JDBC Resources”一栏的Go to Task链接
 
4、下面点击“create”按钮创建一个connection pool(连接池)
 
5、创建的第一页保持缺省值不变
 
6、在这一页上输入name为 soademo_pool,JDBC URL为jdbc:oracle:thin:@//localhost:1521/soadb.cn.oracle.com,username为soademo,password为soademo。
建议点击“Finish”按钮前,先点击“test connection”按钮测试是否可以连接成功。
 
7、回到JDBC Resources页面,下面来创建一个data source(数据源),
 
8、创建的第一页保持缺省值不变:
 
9、在这一页指定name为soademoDS,JNDI Location为jdbc/soademoDS,connection pool选择我们刚才创建的soademo_pool,Login Timeout(second)可以保持缺省值0或根据你的情况指定一个大于0的数值,点击“finish”按钮完成:
(未完待续)
 
责任编辑 吴北 jiaoxq#51cto.com TEL:(010)68476636-8004
阅读(2347) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~