我一直在使用Spring MVC 3和Hibernate开发Web应用程序以保持持久性。 基本上,我的问题是需要有两个单独的项目(一个用于最终用户,另一个用于管理员)。但是,两个应用程序都应该引用相同的数据库。
我一直在考虑创建三个独立的项目: - 一个基本上是Hibernate项目,包括模型,存储库和服务 - 第二个是管理员的Spring MVC项目 - 第三个是用户的Spring MVC项目
所以我的问题 - 是否有可能以某种方式从我的两个Spring MVC项目中引用这个Hibernate项目,因为我想要使用的是那些用于数据访问的服务。
提前致谢!
答案 0 :(得分:1)
是的,你可以,但不是对hibernate项目本身的引用,你可以使用Ant脚本轻松地在你的Hibernate项目中构建一些Jar
文件,这个Jar
文件将封装你所有的公共类资源
然后,您可以将此Jar添加到内部和管理项目构建路径
此解决方案的问题在于,您需要记住在公共类的每次更改上构建公共Jar
文件
检查此tutorial以了解如何使用Ant构建Jar,您也可以使用Maven
通过将公共项目作为外部存储库并在两个项目(内部和管理员)中进行检查,可以在版本控制系统上使用SVN externals
或任何映射功能。但是,使用这种方法会产生以下问题:
答案 1 :(得分:1)
除了Ant之外,您还可以使用Maven,它支持包含子项目的项目,并且具有用于为您生成和维护Eclipse项目的插件。您可以将Hibernate内容设为一个JAR子项目,然后将两个站点作为WAR项目,所有这些都在POM基础项目下进行。
如果您手动执行此操作,我建议您在IDE中将项目挂钩,以便调试器正常工作。
关于问题:如果你只让你的Hibernate JAR进行休眠,你将基本上运行2个指向同一个数据库的Hibernates,它将 NOT 开箱即用。问题是,购买默认值,Hibernate喜欢控制数据库并进行大量缓存。因此,例如,如果您在域对象中读取一次,那么在另一段代码中读取相同的对象,理论上Hibernate将检查它是否已经缓存了对象,如果是,则使用该对象。最终结果是,如果您有两个Hibernates读取和写入同一组表,它们可能很容易失去同步。
有一些方法可以解决这个问题。一种方法可能是在两者之间设置共享缓存,以便读取将检查共享缓存。当您拥有在多个应用服务器上运行相同代码但所有访问相同表的群集环境时,这是典型方法。这里的缺点是你现在将有一个更复杂的设置。
另一种方法可能是将Hibernate配置为更偏执。这通常在您遇到应用程序之外的某些内容可以写入表格的情况下完成,例如批处理过程或某些事情。可以将Hibernate配置为忽略缓存读取并在写入之前进行版本检查。这里的缺点是你放弃了一些,甚至很多,或者表现。
最后一种方法,在我看来,我个人首选的方法是编写一个服务层来访问作为独立应用程序运行的代码。如何执行此操作将在很大程度上取决于您对自己的满意程度,集成方式以及必须考虑的任何架构决策。在这种方法中,您将编写使用Hibernate的服务层,并以某种方式发布您的Web应用程序可以使用的“API”。 API可以是JMS中的任何内容(如果所有代码都在同一个应用程序服务器下运行,则为首选),RESTful或非RESTful Web服务,甚至是一些远程方法调用机制,如RMI或CORBA。根据实施情况,这可以真正增加将来扩展应用程序的能力。