Java 在SOA设计中使用数据访问层(DAL)

Java 在SOA设计中使用数据访问层(DAL),java,soa,data-access-layer,Java,Soa,Data Access Layer,由于我们正处于将应用程序更新为SOA设计的开始阶段,我有一些问题无法得到明确的答案/图片 我已经读了很多书,主要是关于Thomas Erl的书,并遵循了解任务服务、实体服务和实用服务是什么的设计模式 我所绊倒的是整个DAL的概念,那将是什么样子。因此,这更多的是对理解的验证或澄清,以帮助为我们的平台制定最佳方法 所以背景。目前,我们有几个基于web的电子商务应用程序,这些应用程序基本上都是在筒仓中构建的,并且彼此之间也是一个副本。我们有支持应用程序,如守护进程和其他web服务。其中许多应用程序的

由于我们正处于将应用程序更新为SOA设计的开始阶段,我有一些问题无法得到明确的答案/图片

我已经读了很多书,主要是关于Thomas Erl的书,并遵循了解任务服务、实体服务和实用服务是什么的设计模式

我所绊倒的是整个DAL的概念,那将是什么样子。因此,这更多的是对理解的验证或澄清,以帮助为我们的平台制定最佳方法

所以背景。目前,我们有几个基于web的电子商务应用程序,这些应用程序基本上都是在筒仓中构建的,并且彼此之间也是一个副本。我们有支持应用程序,如守护进程和其他web服务。其中许多应用程序的使用年限超过5年,并且仅基于技术(型号1)。我们的所有应用程序都以进行拍卖销售为中心。因此,在销售活动期间,我们将从用户处获取出价,确定谁获胜,并显示该信息。每个销售活动都有一定的时间供用户使用

该公司正朝着SOA解决方案迈进,因为我们最终做的很多事情不仅可以在我们的团队中共享,还可以在其他团队中共享

因此,我对DAL的理解是,它本身就是一种服务,它将位于数据之上,在本例中是不同的数据库-MSSQL、ORACLE、MSSQL。每个数据库都有不同的模式(Oracle)等

因此服务(任务、实体、实用程序和表示层,如果需要)将调用DAL来检索数据。DAL有责任从消息的内容中了解,以确定它需要做什么来满足请求

例如,我们有一个安全服务候选者。此服务需要使用LDAP进行身份验证,并从为给定应用程序存储的数据进行授权

这里的想法是,将创建一个实用程序服务来封装与LDAP通信所需的所有操作,安全服务将调用实用程序服务和DAL来获取授权数据。DAL然后负责转到正确的数据库/模式以检索信息。信息将采用XML格式(标准SOA通信)

那么,我走对了吗?其他人有没有做过类似的事情?还有什么其他的事情需要我考虑(目前得到的统计数据,我们在一个小时内平均买入多少)。 每个服务是否应该有自己的DAL?例如,安全服务是否应该将DAL作为服务的一部分,或者DAL应该是所有服务都可以使用的共享服务?

我曾经与(开发)一个使用“数据服务”的soa项目合作过。那是一段时间以前的事了,我只参与了一小部分,但我的记忆是,事情最终变得太复杂和缓慢了

特别是,我们对数据服务没有真正的需求——将相同的抽象放在库层会更有意义,这样会提供更好的效率,并且不会真正失去功能(针对我们的特殊需求)。数据往往以许多小“块”的形式被请求,这一事实加剧了这种情况


我想这可以归结为实现过程中的权衡。在我们的例子中,有了一个相对封闭的系统和单一的底层数据库技术,我们可以很容易地利用数据库提供的对分布式访问的支持;相反,我们最终在一个更慢、更通用的消息总线中复制了它,这只增加了复杂性。但我可以很容易地想象不同的情况下,对数据的访问更加“遥远”。

在您的情况下,用于基于SOA的完整部署的方法将是使用ESB、身份提供者和数据服务解决方案

要分解它,DAL应该使用数据服务来实现,这样,该服务将以语言中立的方式成为一个全局可访问的服务,并且将支持重用和松耦合。因此,所有数据访问逻辑都可以作为数据服务中的web服务操作来实现

因此,对于身份验证和授权管理,在SOA世界中,有一个名为的标准,用于细粒度授权管理。因此,您需要的是一个XACML服务器,它将根据特定的标准对用户进行授权,其中还应具有使用LDAP进行身份验证的能力

然后,您的“安全服务”将在ESB的一个服务中实现,该服务将查询身份提供者进行身份验证/授权,并根据其响应调用数据服务中的适当操作,使用适当的参数获取数据,然后将其返回给用户


上述场景可以分别使用WSO2数据服务服务器、WSO2标识服务器和WSO2 ESB来实现,它们都是开源产品,可以自由使用和找到。

在设计中如何使用SOA取决于its需求

通常,您可以编写粗粒度服务并将其公开为web服务。在您的情况下,您可以编写一些服务来调用数据库并生成结果。在这种情况下,还可以使用服务逻辑编写授权逻辑

另一种方法是使用ESB或BPEL引擎编写集成逻辑,并将集成服务公开为web服务。在本例中,您可以使用一些数据服务以xml格式公开数据库数据并将其集成。您可以将服务用于不同的sachem,并使用请求数据调用正确的服务。授权逻辑也可以添加到服务集成逻辑中

安全方面,如身份验证