您如何在面向服务的架构中高效地使用ibatis?

时间:2010-11-05 01:40:09

标签: java soa ibatis mybatis

我们有几项服务,每项服务理想情况下应相互独立运作。这些服务的主要用途是支持我们的webapp。我们正在寻找将ibatis与这些服务结合使用的最佳方式。

我们的第一种方法是使用SqlSessionFactory创建一个项目,并让所有服务实现都使用该项目进行数据访问。这意味着项目依赖于数据对象的所有服务(我们必须分离服务和impl以消除循环依赖),并且它包含所有sql映射。优点是随时可以使用SqlSessionFactory的一个实例,以及一个要管理的配置。虽然如果像junits或其他实用程序一样使用一个服务,但无论如何都会加载所有sql映射,并且所有服务都是依赖项。

另一种方法是让每个服务都拥有自己的ibatis配置和SqlSessionFactory实例。这将避免需要依赖数据访问项目的圣地,但意味着Web应用程序上的几个SqlFactory实例。

我喜欢第二种方法,但我看到两者都有好处。

你会做什么?你从我的论点中添加或删除了什么?

请帮助!!!

3 个答案:

答案 0 :(得分:2)

虽然我认为你的第一个论点的优势总体上指向SOA的弱点,但我认为如果你正在进行SOA,那么它就会破坏整个目的,从而使所有服务相互依赖。

如果您正在进行SOA,那么为了解耦和隔离组件,您接受了更低效的资源使用的权衡。

答案 1 :(得分:1)

老实说,在发现性能瓶颈或应用程序变得过大之前,请保持简单。也就是说,除非您希望服务按照自己的时间表独立更新。

在我工作的地方,有一个共同的代码在所有应用程序之间共享。它们都来自同一个来源,但是每个应用程序都是独立构建的。这可能不是最好的解决方案,但至少可以轻松修改公共代码,而无需担心部署单独的应用程序。并且它允许在引入更多应用程序时更改公共代码,而不会影响以前部署的应用程序。

答案 2 :(得分:0)

如果两个解决方案都适用,您可能在同一个JVM上运行所有服务。在我看来,您应该考虑在单独的JVM中运行组件。真正的服务组件体系结构是一种在多个组件(例如EJB)中运行的组件,它们在集群环境中运行并以松散耦合的方式(例如通过JMS,或Webservices或RMI等)相互通信。每个组件都是独立的,可能在远程服务器中运行。

在这种情况下,我当然会使用第二种方法。但是如果你的应用程序不需要这种解耦,你应该使用第一种方法,因为它的内存效率更高。

毕竟,这是一个关于你的应用程序真正需要什么的问题。