5. 重构XML
对XML文档进行处理的业务过程终于接近了尾声,现在我们要储存网格中的数据,或将其共享给其它应用或服务。如果要把数据存储到关系数据库中,那么后台就会有关系映射操作对象以不参与服务与应用网格之间的实际交互的方式存在。
对于任何索物标签模式的实现来说,都要注意所有相关的服务其目的都是实现这个模式所能带来的优点。最终这个过程还需要与无法或尚未支持索物标签模式的的服务传递信息,因此还需要图5中的"转换和路由"这步来把数据串行化回XML在线格式。虽然在这种情况下还会产生边界成本,但是步骤1、2、3的效率已经提高了很多。
列表6显示的是使用应用网格API通过关键字搜索所有对象和使用JAXB创建XML的技术。这只是一个简单的使用Java创建XML的示例,但是大家可以从中受到启发,使用XSLT样式表,通过对网格的多次查询获得样式表所需的数据。另外,还可以利用流技术重新组成分散的XML,避免完全具体化内存DOM树。
列表6:重组组成XML以转交给外部服务
Filter theFilter = new LikeFilter("getProductName", Constants.PRODUCT_FILTER);
Set filtered = itemCache.keySet(theFilter);
// Create a blank Purchase Order and populate it. The non-cached // parts could come from elsewhere and merged using XSLT
ObjectFactory of = new ObjectFactory();
PurchaseOrderType po = of.createPurchaseOrderType();
po.setItems(of.createItems());
// Loop over items and add to an object
for (Iterator it = filtered.iterator(); it.hasNext();) {
Object key = it.next();
Item i = (Item) itemCache.get(key);
po.getItems().getItem().add(i);
}
总之,应用网格可以极大地提高处理大量数据的SOA应用的效率和可扩展性。使用水平可扩展的应用网格存储、处理服务请求负载,我们能在可计量的延迟范围内对应用进行扩展。而且,通过应用网格的强大功能,我们还能以内存读取速度执行分布式并行查询和更新。数据变大之后,我们只要扩展网格即可适应需求。这让我们通过更少的硬件基础获得了比以往更高的处理能力,而且可以从一开始就打好扩展的基础,而无须每次碰壁时重新拿出应用的设计图纸。