1

我一直在使用带有 Hibernate 的 Spring MVC 3 开发 Web 应用程序以实现持久性。基本上,我的问题是需要有两个独立的项目(一个用于最终用户,另一个用于管理员)。但是,两个应用程序都应该引用同一个数据库。

我一直在考虑创建三个独立的项目:-一个基本上是带有模型、存储库和服务的 Hibernate 项目-第二个是管理员的 Spring MVC 项目-第三个是用户的 Spring MVC 项目

所以我的问题 - 是否有可能以某种方式从我的两个 Spring MVC 项目中引用这个 Hibernate 项目,因为我想要使用的只是那些用于数据访问的服务。

提前致谢!

4

2 回答 2

1

是的,您可以,但不是对 hibernate 项目本身的引用,您可以Jar使用 Ant 脚本轻松地在 Hibernate 项目中构建一些文件,该Jar文件将封装所有公共类和资源

然后您可以将此 Jar 添加到内部和管理项目构建路径

此解决方案的问题是,您需要记住Jar在公共类的每次更改时构建公共文件

查看本教程以了解如何使用 Ant 构建 Jar,您也可以使用 Maven

还有另一种使用SVN externals版本控制系统或任何映射功能的方法,通过将公共项目作为外部存储库并在两个项目(内部和管理)中检查它。但是使用这种方法会有以下问题:

  • 这个过程的配置并不像第一种方法那么容易
  • 您的代码被复制了 3 次,一次在 common 项目中,另外两次在 internal 和 admin project checkout 中,相同的代码相同的文件。
  • 当您发现自己编辑其中一个通用文件而在运行的项目中没有任何影响时,请不要感到惊讶,只是在最后一刻发现您正在编辑其他两个复制文件中的一个:)
  • 对这种方法有一些经验的人在这里写了他的糟糕旅程
于 2013-09-09T20:21:46.013 回答
1

除了 Ant,您还可以使用 Maven,它支持包含子项目的项目,并具有插件来为您生成和维护您的 Eclipse 项目。您可以将 Hibernate 内容制作为一个 JAR 子项目,然后制作两个站点的 WAR 项目,都在一个 POM 基础项目下。

如果您手动执行此操作,我建议您在 IDE 中将您的项目连接在一起,以便您的调试器工作。

遇到问题:如果您将 Hibernate JAR 设置为仅 Hibernate,则本质上您将运行 2 个指向同一个 DB 的 Hibernate,这不会开箱即用。问题是,默认情况下,Hibernate 喜欢控制数据库并进行大量缓存。因此,例如,如果您读入一次域对象,然后在另一段代码中读取相同的对象,理论上 Hibernate 将检查它是否已经缓存了该对象,如果是,则使用该对象。最终结果是,如果您有两个 Hibernate 读取和写入同一组表,它们很容易不同步。

有一些方法可以解决这个问题。一种方法可能是在两者之间设置共享缓存,以便读取将检查共享缓存。当您有集群环境时,这是典型的方法,其中相同的代码在多个应用服务器上运行,但都访问相同的表。这里的缺点是您现在将有一个更复杂的设置。

另一种方法可能是将 Hibernate 配置为更加偏执。这通常在您遇到应用程序之外的某些内容可以写入表的情况下完成,例如批处理或其他内容。Hibernate 可以配置为忽略缓存读取并在写入之前进行版本检查。这里的缺点是你放弃了一些,甚至可能很多,或者性能。

最后一种方法,在我看来是我个人更喜欢的一种方法,是编写一个服务层来访问作为独立应用程序运行的代码。如何做到这一点在很大程度上取决于您对什么感到满意、您希望如何集成以及您必须考虑的任何架构决策。在这种方法中,您将编写在后台使用 Hibernate 的服务层,并以某种方式发布您的 Web 应用程序可以使用的“API”。API 可以是来自 JMS(如果所有代码都在同一个应用服务器下运行,我更喜欢)、RESTful 或非 RESTful Web 服务,甚至是一些远程方法调用机制,如 RMI 或 CORBA。根据实现的不同,这确实可以增加将来扩展应用程序的能力。

于 2013-09-10T14:14:15.367 回答