2

我有一个使用 JPA 2/Hibernate 3.5.6 进行数据访问的 java 项目,它在 JBoss 应用服务器上运行良好。现在我正在尝试在 Coldfusion 9 环境中运行它,我看到 CF 9 已经具有其 ORM 实现所需的 hibernate3.jar 和相关 jar。但是,我想在 CF 上使用我的 java 项目,为此,我需要在 CF 上使用相同的 hibenate 3.5.6 jar 和相关 jar。因此,我移动了所有需要的 jar,在 CF 中创建了一个新文件夹并更新了 jvm.config 以包含这个新路径。效果很好!!但现在担心的是,这是否会与 CF9 使用的默认 Hibernate/ORM 行为相冲突。这会导致任何其他问题吗?(类加载、冲突等)?

选项 2:另外,为了避免任何“可能”的问题,我决定创建一个 web 服务应用程序,打包我需要的所有 jar 并将其部署为 CF9-JRun4 上的 war 文件,效果很好。在这种情况下,我不必担心 clasloading,因为它在 Web 应用程序的范围内。但是,我不希望来自 CF 应用程序的调用真正通过 Web 服务层,因为它所要做的只是访问数据库并取回数据。所以我真的希望我的选项 1(上一段)能够工作。

因此,在此之前可能从事过类似设置的任何人都可以提供一些见解。感谢帮助!

4

1 回答 1

2

我目前正在处理该设置(在 CF 应用程序中运行的 spring/hibernate/jpa 应用程序)。唯一的区别是我在 Railo 上,但我以前也用 Adob​​e ColdFusion (ACF) 做过同样的事情。在 ACF 和 Railo 中,使用自己的 Hibernate 肯定会遇到问题。共识似乎是,只要您不使用 ACF 的内置 ORM 功能,您就可以移除/替换 ACF 的 Hibernate。

像你一样,我只看选项 2 并且不太喜欢它。如果你想正确地将你的 Java 应用程序与你正在运行的 CF 容器分开,你应该使用JavaLoader。它提供了一个子类优先的类加载器,它可以在您的应用程序中加载 JAR,并从那里解析类和资源,而不是沿着链向上到 ACF 中提供的类。

我要提到的唯一问题是许多现代框架(尤其是 Spring)使用线程上下文 Classloader 来获取资源,因此在从 Java 代码构造对象时可能需要切换类加载器。这在 JavaLoader 文档中有所介绍,但值得知道的是,当您的代码抱怨无法从您的 JAR 等加载属性文件时,这可能是原因。我倾向于创建一个 CFC 来隐藏构建 Java 对象和让您的应用程序代码的其余部分保持简单。您可以查看 CFSpreadsheet 的 Railo 实现,特别是这个类作为示例。

希望这一切都适合你

于 2012-06-29T08:57:15.893 回答