Java 如何在面向服务的体系结构中高效地使用ibatis?

Java 如何在面向服务的体系结构中高效地使用ibatis?,java,soa,ibatis,mybatis,Java,Soa,Ibatis,Mybatis,我们有几种服务,理想情况下,每种服务都应该彼此独立运行。这些服务的主要用途是支持我们的webapp。我们正在寻找在这些服务中使用ibatis的最佳方式 我们的第一种方法是使用SqlSessionFactory创建一个项目,并让所有服务实现使用该项目进行数据访问。这意味着项目依赖于数据对象的所有服务(我们必须将服务和impl分离以消除循环依赖),并且它包含所有sql映射。这样做的好处是可以随时使用一个SqlSessionFactory实例和一个要管理的配置。尽管如果一个服务像junits或其他实用

我们有几种服务,理想情况下,每种服务都应该彼此独立运行。这些服务的主要用途是支持我们的webapp。我们正在寻找在这些服务中使用ibatis的最佳方式

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

另一种方法是让每个服务都有自己的ibatis配置和SqlSessionFactory实例。这将避免依赖数据访问项目的麦加,但意味着webapp上有几个SqlFactory实例

我喜欢第二种方法,尽管我看到了两者的优点和缺点

你会怎么做?你对我的论点有什么补充或补充


请帮忙

尽管我认为您第一个论点的优点指出了SOA的弱点,但我认为如果您正在实施SOA,那么让所有服务相互依赖的目的就不可能实现


如果您正在实施SOA,那么您正在接受更低效的资源使用的折衷方案,以实现组件的解耦和隔离。

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


在我工作的地方,所有应用程序之间都共享通用代码。它都来自同一个源,但独立地构建到每个应用程序中。这可能不是最好的解决方案,但至少它使修改公共代码变得容易,而不用担心部署单独的应用程序。而且,随着更多应用程序的引入,它允许公共代码发生更改,而不会影响以前部署的应用程序。

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

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


毕竟,这是您的应用程序真正需要什么的问题。

谢谢您的回答,我正在尝试选择一条最佳路径,它既不能满足我们的应用程序现在的需求,也能为将来的需求做好准备。谢谢谢谢你的回答,伙计,我很感激你的回答。我很难选择最好的。