linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > WEB开发 >
栏目导栏
资料搜索
热门文章
·JSP三种页面跳转方式的比较
·LOG4J快速入门及参考资料
·Javascript设计网页中的下拉菜
·什么是PHP
·Win2003下APACHE+PHP5+MYSQL4+
·apache 的httpd.conf 文件
·MQSeries 入门手册
·php上传文件大小限制大全
·solaris 10 安装jsp大全
·半小时教你学会正则表达式
·[硬件 通讯]PHP使用RS232串口通
·如何利用JBuilder2005开发Web应
·网页技巧二十例
·JSP应用语法大全
·Linux下jsp开发环境,apache,t
最新文章
·通过Apache访问svn代码库的配置
·apache 进程数与PHP的加密
·Linux系统上WebLogic安装调试的
·在Fedora8系统下搭建JSP开发环
·Web开发设计的五大准则
·使用PHP开发SCA和SDO
·用rsync实现网站镜像和备份
·能得到你是从什么页面过来的,
·使用PHP批量生成随机用户名
·linux下编译php的配置参数总结
·在debian下为PHP5.0.3安装pdo模
·apache为用户开启主页服务
·Linux下常用php编辑工具
·java在Linux下的web应用
·面向站长和网站管理员的Web缓存
Google
 
使用PHP开发SCA和SDO
[ 作者:  加入时间:2007-12-27 21:48:30  来自:51CTO ]

由开放的面向服务架构联合组织(OSOA)发起的,面向组件的架构(SCA)和服务数据对象(SDO)已经成为了开发面向服务的架构的最新方法。开始时这些开发只是集中在一些通用的开发环境中,如Java和C++,目前SCA和SDO已经开始进入到其他一些平台,在这里我们将讲解如何在PHP上包含一些SOA技术。

首先我们看看SDO能提供给你什么。在一个典型的PHP应用中,数据一半来自关系数据库,但是如果这个应用程序后来不仅仅只是从这儿获取数据,而是从一个普通文本文件或者Web服务中获取数据呢?这个问题很复杂,因为每种数据源都会要求有自己的获取方式。

在这种情况下,PHP中SDO提供了一种处理数据源的透明方式。它不是单独的处理每种数据源,而是提供了一种统一的访问数据对象的方式。这种过程是通过数据访问服务(DAS)来完成的,它是SDO架构上的一种中介方式。让我们看看一个PHP中的SDO请求。

<?phpvTcLinux联盟
$providers = $company->shippingByGround;vTcLinux联盟
foreach ($providers as $name => $value) {vTcLinux联盟
 echo "$name: $value\n";vTcLinux联盟
}vTcLinux联盟
?>

注意最后的请求是如何处理未知的数据源的,你不知道这里数据是从哪里提取来的,只是使用了PHP的SDO格式来做一个查找,而细节是由DAS完成的,PHP目前能够支持获取XML和关系数据库的数据源。

SDO关心的是数据,而SCA使用了更加通用的类和组件来完成同样的透明方式。从任何PHP类中访问已有的业务逻辑需要强制开发者来围绕一类特定的假设来做设计吗?逻辑是否已在另外一个本地PHP类中?是否在网络中存在了?是使用PHP编写的吗?

当以上提到的场景在各自的要求中是可满足的话,那么每个都需要使用不同的方法处理。

使用SCA方式,逻辑在哪里存放就无关紧要了,更不要提使用何种语言来实现。那你一定会说:“这不是和一个普通的Web Service差不多吗?没什么不同啊!”那么我们举个例子来看看PHP SCA组件里包含了什么。

<?php

include "SCA/SCA.php";

/**vTcLinux联盟
* Calculate a shipment price for a given customer using a specific providervTcLinux联盟
*vTcLinux联盟
* @servicevTcLinux联盟
*/vTcLinux联盟
class ShipmentQuote {

 /**vTcLinux联盟
 * The customer discount fee service to use.vTcLinux联盟
 *vTcLinux联盟
 * @referencevTcLinux联盟
 * @binding.php ../DiscountFeeRate/DiscountFeeRate.phpvTcLinux联盟
 */vTcLinux联盟
 public $discountFee;

 /**vTcLinux联盟
 * The shipping service to use.vTcLinux联盟
 *vTcLinux联盟
 * @referencevTcLinux联盟
 * @binding.wsdl ../Shipper/ShipperQuote.wsdlvTcLinux联盟
 */vTcLinux联盟
 public $shipper;

 /**vTcLinux联盟
 * Get a quote for a given customer using a specific providervTcLinux联盟
 *vTcLinux联盟
 * @param string $shipping The shipping company vTcLinux联盟
 * @param string $customer The customer requiring shipment, in order to obtain discount ratevTcLinux联盟
 * @return float The quote for a given customer using a certain shipping provider. vTcLinux联盟
 */vTcLinux联盟
 function getQuote($shippingCo, $customer)vTcLinux联盟
 {vTcLinux联盟
$rateShip = $this->shipper->getShippingPrice($shippingCo);vTcLinux联盟
$rate = $this->discountFee->getDiscountRate($customer);vTcLinux联盟
return $rate * $rateShip;vTcLinux联盟
 }vTcLinux联盟
}vTcLinux联盟
?>

上文中最关键的就是包含@的语句部分,它们每个都提供了一种特定的SCA行为。最上层的@service标识,表示暴露一个类作为服务。在这个例子里,最后的getQuote函数将会是服务暴露的唯一操作,通过使用@param和@return标识。

这个最后的服务的执行或者部署——将会被委托为一个PHP SCA运行时——将会将我们带入一个创建WSDL合同的访问点,就像你可以在网络服务中看到的那样。除了这种部署服务的方式的简单性以外,SCA模型的真实优势将会在你检查getQuote代码时越发体现的明显。

注意到两个语句$this-<shipper->getShippingPrice($shippingCo)和$this->discountFee->getDiscountRate($customer),它们是基于类中前面的应用。每个应用被其支撑服务锁支持(由@reference和@binding标识来具体操作)在$discountFee用例中,这将是一个PHP类,而在shipper的用例中,这将是一个标准的WSDL基础的服务。

尽管PHP的简单和大量用户群体的支持使得它成为构建web应用的一个好的选择,但是它在企业应用的很多场景中能力有限,现在通过增加SCA和SDO,提供了对PHP和以往技术的强力支持,它也和其他主流语言一样,可以参与到面向服务的潮流中了。

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Linux+Apache+PHP+JSP 的Resin解决方案  (2007-12-17 17:07:17)
 ·用PHP文件上传的具体思路及实现  (2007-12-03 16:25:21)
 ·PHP经典的给图片加水印程序  (2007-12-03 16:22:23)
 ·使用PHP往Windows系统中添加用户  (2007-12-03 16:02:29)
 ·轻型数据库SQLite结合PHP的开发  (2007-12-03 16:00:56)
 ·PHP实现自动刷数和“灌水”机  (2007-12-03 16:00:21)
 ·PHP实现网页自动更新块  (2007-12-03 15:59:55)
 ·用PHP读写NTFS文件系统下的文件摘要信息  (2007-12-03 15:57:11)
 ·PHP中通过Web执行C/C++应用程序  (2007-12-03 15:55:58)
 ·PHP下实现端口复用/劫持  (2007-12-03 15:54:52)