利用Oracle9i XML DB来解决复杂编码问题
开发互联网应用程序是非常复杂的:你不仅要实现定义应用程序的行为和逻辑,还必须在分布式环境下将多种产品、技术层次和标准结合在一起。示例代码展示了多种解决互联网应用程序开发的方法。
例如,考虑一个几乎任何希望进行在线销售的Web站点(PayPal等类似的)都必须实现的特性:信用卡校验。主要包括如何验证用户、联系验证公司并安全地进行交易处理--所有这些都将一个基于Web的瘦客户端、一个数据库、一个应用服务器和独立验证公司提供的功能之间的交互很好地结合起来。
OTN提供了示例应用程序,使用不同的产品、技术和标准组合来解决这样复杂的问题。一些示例采用了它们自己的验证机制;另一些则利用了内置到Oracle 9i应用服务器(Oracle 9iAS)中的单一登录(Single Sign-On , SSO)特性。OTN还提供了一个利用了Oracle 9i数据库的XML DB特性的后端应用程序示例。
Web服务这一技术被用于每个信用卡示例应用中。通过使用Web服务,OTN开发人员可以有效地将需要的功能内置到分立的组件中。这种方法实现了应用程序的模块化而不是整体化,因此更加灵活且更易于维护。开发人员可以在不影响主应用程序的情况下改变组件的实施,或者只需修改几行代码就可以使用不同的组件。因此,Web服务可以在应用程序之间被共享和重复使用,并且在时机成熟时可以轻松地被移植到企业级网格计算环境。
OTN会员可以下载以下示例代码(和OTN上任何其他示例代码),研究它们,根据自己的开发需求混合和搭配使用这些解决方案。
使用J2EE设计模式的VSM
虚拟购物商场(Virtual Shopping Mall,VSM)示例应用程序使厂商能够建立在线商店,客户可以浏览所有商店,系统管理员则可以批准和拒绝新商店的申请并维护商店类别列表。为了构建VSM,OTN开发人员实现了几个有名的J2EE设计模式,包括Session Fa?ade和模型-视图-控制器(Model-View-Controller, MVC)。
VSM指南系列的一个模块描述了OTN开发人员如何通过Web服务重复使用一个软件组件。VSM的信用卡服务组件通过三个Java文件来实现:一个定义了该组件方法的接口(CCServices),一个实现了该接口的类(CCServicesImpl),以及另一个负责处理信用卡校验失败时抛出的异常的类(CCException)。关键操作--校验信用卡号由方法CCServicesImpl.validateCard来执行,该方法使用了LUHN算法(也被称为模10算法)。银行、企业和其他实体现在在公共领域中广泛采用了这一规则来生成和校验信用卡、账户和身份证号码。
使用框架的VSM
BC4J-VSM示例应用程序提供与VSM相同的功能性,但它是使用用于构建组件和基于组件的应用程序的Oracle框架Oracle 9i JDeveloper Business Components for Java (BC4J)来实现的。BC4J提供了现成的J2EE设计模式的实施,否则你将需要手工编写代码。在BC4J-VSM中,信用卡服务组件通过多个文件实现。然而,OTN开发人员只需创建并填写一个表并为一个Java类编写一个方法,JDeveloper就可以生成所有需要的东西。
表CC_MASTER是通过脚本webstore.sql创建和填写的,如下所示:
CREATE TABLE cc_master (
provider VARCHAR2(10),
ccstart NUMBER(5)
);
INSERT INTO cc_master VALUES('VISA',11111);
INSERT INTO cc_master VALUES('MASTER',22222);
INSERT INTO cc_master VALUES('DINERS',33333);
INSERT INTO cc_master VALUES('AMEX',44444);
接下来,OTN开发人员使用JDeveloper向导来创建一个基于CC_MASTER表的实体对象(CcMaster)。这些向导还为相应的视图对象(CreditCardValidationView)和视图对象实现(CreditCardValidationViewImpl)生成代码。
关键操作--校验信用卡号由方法CreditCardValidationViewImpl.validateCard来执行。在这个示例应用程序中,并不是像在商业应用程序中那样对信用卡号进行校验。然而,校验代码却保证了用户输入数字的正确位数等。
在线产品商店和Web服务安全性
在线产品商店(Online Product Store)是另一个示例应用程序,它显示了如何确保Web服务的安全。有两个方法可以实现这个目标:
XML级别的安全性: 选项包括XML加密、XML数字签名API、XKMS(XML密匙管理规范)和SAML(安全性声明标记语言,Security Assertion Markup Language)。
传输级别的安全性:通过确保Web服务通信所使用的网络协议的安全来实现。SSL是业界认可的通过TCP/IP进行安全加密通信的标准协议。在这个模型中,Web服务客户端使用SSL来打开一个到Web服务的安全套接口。然后,客户端在这个安全套接口上通过HTTPS发送和接收SOAP消息。SSL实现通过对套接口上所有的网络通信进行加密而确保了私密性。SSL还可以利用PKI基础架构来验证提供给客户端的Web服务。
因为在XML级别实现安全性的标准仍然在制定当中,所以OTN开发人员选择使用SSL和PKI基础架构在传输级别实现安全性。Oracle 9iAS利用基于Apache的Oracle HTTP 服务器、Oracle 9iAS Containers for J2EE(OC4J)和Oracle 9iAS 门户为构建和部署Web应用程序提供了一个坚实的框架。这些产品都使用了由Oracle 9iAS基础架构提供的高级安全功能性。 (Oracle 9iAS基础架构包括Oracle 9iAS 元数据信息库、Oracle 互联网目录、Oracle 9iAS SSO和Oracle 管理服务器。)
通过提供正确的用户名和密码,在线产品商店的用户可以查看产品目录,并向购物车中添加产品。在为购买的产品付账时,用户应输入信用卡号,应用程序就会通过SSL与信用卡Web服务建立联系,从而说明如何安全地访问一个Web服务。
在线产品商店和单一登录
为了阐明另一种方法,一个独立的在线商店模拟使用了Oracle 9iAS SSO来验证用户。SSO使用户只需注册一次就可以登录到Oracle 9iAS及其他Web应用程序。这个示例应用程序使用数字证书来注册到通过JAZN被置于Oracle 9ias SSO服务器的保护之下的Web应用程序。JAZN是Oracle对Java验证和授权服务(Java Authentication and Authorization Service ,JAAS)的实现,JAAS则是使服务能够对用户进行验证并授权他们使用应用程序资源的Java包。
SSO服务器使用一个加密的SSL通道为客户端Web浏览器提供一个cookie,应用程序可以使用这个cookie对用户进行验证,而无需用户登录。一旦用户通过了验证,授权过程就会启动,为用户授予访问特权资源的权限,如在数据库中插入行或对文件进行写操作。
这个示例提供了一个要求用户登录到在线办公用品商店的Web应用程序。访问该应用程序主页URL的用户被重定向到SSO服务器,由JAAS进行验证。这个示例使用数字证书对用户进行验证,用户无需提供用户名和密码就可以登录。
成功登录后,用户可以购买产品并通过信用卡支付。这个示例使用一个信用卡Web服务来校验用户的信用卡号。它还确认用户拥有足够的资金额来购买产品。Web客户端通过SSL通道与Web服务通信,并使用数字证书来验证Web服务。
使用XML DB的信用卡支付网关
信用卡支付网关示例应用程序使用了Oracle 9i XML DB (在Oracle 9i数据库第2版及更高版本中提供)的特性来模拟信用卡公司在互联网上提供的一些后端功能。这个应用程序在XMLType表中以XML文档的方式管理客户简档、账户余额和信用卡持有者及商家的其他数据,通过模拟实际商店中的信用卡采购而生成购买请求。
对于每次购买,经销商都会使用一个客户端应用程序来提交具体数据,包括信用卡号和金额以及商家的账号。客户端调用Web服务,由Web服务根据信用卡持有者的账号对请求进行校验并返回结果。
Web服务是部署到OC4J上的用Java编写的无状态、远程过程调用形式的Web服务。客户端Java类通过JSP接收输入数据并调用Web服务的方法。然后,Web服务调用一个PL/SQL过程来校验请求,并将来自PL/SQL过程的结果回复给客户端。该应用程序将合法的交易存储在事务处理表CPG_TRANSACTIONS中。