除了 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。根据实现的不同,这确实可以增加将来扩展应用程序的能力。