可以在 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的主要内容,如果未能解决你的问题,请参考以下文章

Netweaver和Windows,Ubuntu的数据共享

让 SAP Netweaver AS 上的开发更舒适?

如何在 SAP NetWeaver Mobile First 适配器中传递标头

如何把某个网站的SSL Server certificate链导入到ABAP Netweaver系统里

ABAP Netweaver体内的那些寄生式编程语言

通过 JDBC 的俄语符号(SAP Netweaver 7.3.1、Oracle 12c)