我有一个使用JPA 2 / Hibernate 3.5.6进行数据访问的java项目,它在JBoss应用服务器上运行良好。现在我试图在Coldfusion 9环境中运行它,我发现CF 9已经有了hibernate3.jar及其ORM实现所需的相关jar。但是,我想在CF上使用我的java项目,为此,我需要在CF上使用相同的hibenate 3.5.6 jar和相关的jar。所以,我移动了我需要的所有jar,在CF中创建了一个新文件夹并更新了jvm.config以包含这个新路径。它工作得很棒!!但现在关注的是,这是否会与CF9使用的默认Hibernate / ORM行为发生冲突。这会导致任何其他问题吗?(类加载,冲突等)?
选项2: 另外,为了规避任何“可能”的问题,我决定创建一个webservice应用程序,打包我需要的所有jar文件并将其作为war文件部署在CF9-JRun4上,它运行得很好。在这种情况下,我不必担心clasloading因为它在Web应用程序的范围内。但是,我不希望来自CF应用程序的调用真正通过Web服务层,当它所要做的就是明白地访问数据库并获取数据。所以我真的希望我的选项1(前一段)能够发挥作用。
任何可能在类似设置上工作的人都可以提供一些有关此问题的见解。感谢帮助!
答案 0 :(得分:2)
我目前正在研究这种设置(在CF应用程序中运行的spring / hibernate / jpa应用程序)。唯一的区别是我在Railo上,但我之前也用Adobe ColdFusion(ACF)完成了同样的事情。在ACF和Railo中,你带来自己的Hibernate肯定会遇到问题。一致认为,只要你没有使用它的内置ORM功能,你就可以删除/替换ACF的Hibernate。
和你一样,我只是看着选项2而不是非常喜欢它。 如果要将Java应用程序从正在运行的CF容器中正确分离,则应使用JavaLoader。它提供了一个子级优先级的类加载器,它可以在您的应用程序中加载JAR,并将从那里解析类和资源,而不是将链上升到ACF中提供的类。我要提到的唯一问题是,许多现代框架(特别是Spring)使用线程上下文Classloader获取资源,因此您可能需要在从Java代码构造对象时切换类加载器。这是covered in the JavaLoader documentation,但值得一提的是,当您的代码无法从JAR等加载属性文件时,它可能是原因。我倾向于创建一个CFC来隐藏构建Java对象的大惊小怪。让其余的应用程序代码保持简单。您可以查看CFSpreadsheet的Railo实现和this class in particular的示例。
希望一切为您服务