Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个数据库上的两个Spring MVC项目(hibernate)_Hibernate_Spring Mvc_Configuration_Spring 3 - Fatal编程技术网

一个数据库上的两个Spring MVC项目(hibernate)

一个数据库上的两个Spring MVC项目(hibernate),hibernate,spring-mvc,configuration,spring-3,Hibernate,Spring Mvc,Configuration,Spring 3,我一直在使用SpringMVC3和Hibernate开发web应用程序,以实现持久性。 基本上,我的问题是需要有两个独立的项目(一个用于最终用户,另一个完全用于管理员)。但是,两个应用程序都应该引用同一个数据库 我一直在考虑创建三个独立的项目: -一个基本上是带有模型、存储库和服务的Hibernate项目 -第二个是针对管理员的SpringMVC项目 -第三个是面向用户的SpringMVC项目 所以我的问题是——有没有可能从我的两个Spring MVC项目中引用这个Hibernate项目,因为我

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

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

所以我的问题是——有没有可能从我的两个Spring MVC项目中引用这个Hibernate项目,因为我只想使用这些用于数据访问的服务


提前谢谢

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

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

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

检查此项以了解如何使用Ant构建Jar,您也可以使用Maven

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

  • 与第一种方法相比,此过程的配置并不容易
  • 您的代码被复制三次,一次在公共项目中,另两次在内部和管理项目签出中,相同的代码被复制到相同的文件中
  • 当您发现自己在运行的项目中编辑一个普通文件而没有任何效果,只是在最后一分钟发现您正在编辑另外两个复制文件中的一个时,请不要感到惊讶:)
  • 有经验的人写过他糟糕的旅程

除了Ant之外,您还可以使用Maven,它支持包含子项目的项目,并具有为您生成和维护Eclipse项目的插件。您可以将Hibernate stuff设置为一个JAR子项目,然后将两个Site WAR项目设置为POM基础项目

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

抓住机会:如果你让你的Hibernate JAR只运行Hibernate,你将运行两个指向同一个DB的Hibernate,这将直接运行。问题是,购买默认值时,Hibernate喜欢控制数据库并进行大量缓存。因此,例如,如果您在一个域对象中读取一次,然后在另一段代码中读取同一个对象,理论上Hibernate将检查它是否已经缓存了该对象,如果已经缓存了,则使用该对象。最终的结果是,如果您有两个Hibernate对同一组表进行读写,那么它们很容易失去同步

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

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


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

感谢您告诉我两种可能的解决方案,我一定会查看它们!我在.NETMVC平台上做了很多工作,在我看来,在那里做这样的事情要容易得多,而且没有太多的复杂性。。。然而,抱怨永远不是解决办法:)。再次感谢!使用maven多模块项目