可以在 NetWeaver 7.3 上使用 Hibernate 4.3
Posted
技术标签:
【中文标题】可以在 NetWeaver 7.3 上使用 Hibernate 4.3【英文标题】:Can Hibernate 4.3 be used on NetWeaver 7.3 【发布时间】:2014-10-13 02:28:51 【问题描述】:有没有人能够在 NetWeaver AS Java 7.3 上运行的应用程序中使用 Hibernate 4.3。我按照这里的示例:http://scn.sap.com/docs/DOC-1349 通过创建包含以下 jar 文件的 Hibernate 应用程序库容器项目来使用 Heavy Resources 类加载器:
antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.6.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar jandex-1.1.0.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.3.GA.jar jboss-logging-annotations-1.2.0.Beta1.jar jboss-transaction-api_1.2_spec-1.0.0.Final.jar xml-apis-1.0.b2.jar然后我部署 Hibernate.ear 并将其作为参考添加到我的应用程序 application-j2ee-engine.xml 文件中:
<reference reference-type="hard">
<reference-target provider-name="sap.com" target-type="application">Hibernate</reference-target>
</reference>
我的应用程序可以找到 hibernate jars 并使用它们,但我收到以下错误:
java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey
当 Hibernate 使用旧版本的 JPA api 时会发生这种情况。 Hibernate 4 使用 2.1 版本的 JPA api,因此需要 hibernate-jpa-2.1-api-1.0.0.Final.jar 文件中的类,而不是 NetWeaver 提供的 JPA 1.0 类。
我相信应用程序正在获取 JPA 类的 1.0 版本,因为 Heavy Resources 类加载器在查找 javax.persistence.* 类时首先委托其父类加载器,因此它在那里找到 1.0 JPA api 类而不是像我希望的那样从 Hibernate.ear 应用程序中定义的 jar 中获取它们。
有没有办法指定Heavy Resources 类加载器成为child first type 类加载器?或者有没有人找到另一种在 NetWeaver 7.3 中使用 Hibernate 4.3 的方法。我对 NetWeaver 完全不熟悉,因此不胜感激。
谢谢
【问题讨论】:
【参考方案1】:我是一名 SAP NetWeaver 顾问,我讨厌带来坏消息:由于 SAP NetWeaver 7.3 基于 Java EE 5,它目前仅支持 JPA 1.0...
自 2011 年 (http://scn.sap.com/thread/2028916) 以来,SCN 上有一个关于这个主题的生动话题,并且至今仍在更新(值得所有 cmets 阅读!)
如果我可以引用 Rolf Paulsen 在 2014 年 1 月 15 日关于该主题的帖子:
最后,有趣的 4 年 SAP 声明总结:
2009 年 12 月 14 日: “随着 Java EE6 的推出,现在是时候 将其引入我们的开发,但没有可用的计划(一个 标准发布后的一周),这将告诉我们什么时候 标准将成为产品的一部分。”2012 年 4 月 4 日: “它也是 计划将 Neo 的功能引入本地环境 然后。我无法回答何时会发生这种情况。”2014 年 1 月 14 日: “实施正在开发中,并计划看到 今年上半年亮了。” “那是带web的插件 轮廓。从那时起,我们将与云协调 更新。”
不要太快。 SAP 从 SAP 中插入一些 Tomcat EE 6 Cloud 进入旧版 Java EE 5 NetWeaver Java?而且只有这个插件 将与 SAP Cloud 协调(这对 Java 来说已经足够好了 EE 6 Web Profile)并支持 Java EE 6 功能?
听起来像 Tobias 对“SAP AS Java EE 6/7 何时将推出”问题的回答“从不” 见光”仍然正确。SAP NetWeaver AS Java 本身将保留 永远在 Java EE 5 上。
【讨论】:
感谢 Qualiture。我希望我可以通过将重资源类加载器配置为不首先查看父类加载器(可以说是子优先类型类加载器)来避免使用容器提供的 javax.* 类。由于我不依赖任何 NW JPA 服务,我想我可以将 2.1 JPA jar 捆绑到引用的 Hibernate.ear 文件中,但是由于 HeavyResources ClassLoader 在加载类时首先查看其父级,因此它正在加载 JPA 1.0 jar那里而不是我提供的罐子。我选择并使用了 Hibernate 的 3.3.2.GA 版本,它使用了 JPA 1.0。以上是关于可以在 NetWeaver 7.3 上使用 Hibernate 4.3的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SAP NetWeaver Mobile First 适配器中传递标头