ngdbc 2.3.33与JVM 8兼容吗?

2020-09-12 16:02发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在我们最近升级到HANA Express 2.0 SP03后,基于Spring Boot的模块无法再启动。

这是由于 java.lang.ClassNotFoundException:java.sql.ConnectionBuilder。导致的。在Spring创建DataSource Bean的过程中引发了异常:

无法为持久性元数据自检bean类[com.sap.db.jdbcext.DataSourceSAP]:无法找到它依赖的类
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:401)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:333)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:992)〜[spring-beans-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:523)〜[spring-beans-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 ...省略了37个通用框架
 引起原因:java.lang.NoClassDefFoundError:java/sql/ConnectionBuilder
 在java.lang.Class.getDeclaredMethods0(本机方法)〜[na:1.8.0_162]
 在java.lang.Class.privateGetDeclaredMethods(Class.java:2724)〜[na:1.8.0_162]
 在java.lang.Class.getDeclaredMethods(Class.java:1998)〜[na:1.8.0_162]
 在org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)〜[spring-core-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:489)〜[spring-core-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:431)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:397)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 ...省略了40个常见框架

此异常的根本原因是SP03使用的ngdbc 2.3.33中的 com.sap.db.jdbcext.DataSourceSAP.DataSourceSAP 正在实现JDBC 4.3 API(例如 com.sap.db.jdbcext.DataSourceSAP.createConnectionBuilder()或com.sap.db.jdbc.ConnectionSapDB.setShardingKey(ShardingKey))。 该API是Java 9中引入的!

由于我们正在SP03的标准JRE 8上运行,因此显然无法正常工作!

是否有解决此问题的解决方案?

作为一种解决方法,一个选择是在我们的胖子jar中提供较旧的ngdbc版本,并说服buildpack不要通过添加较新的驱动程序版本来覆盖此版本,这是当前的默认版本。 有人可以提示如何做吗?

@SAP:请提供与jre8完全兼容的ngdbc.jar!

最诚挚的问候,

Philipp

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在我们最近升级到HANA Express 2.0 SP03后,基于Spring Boot的模块无法再启动。

这是由于 java.lang.ClassNotFoundException:java.sql.ConnectionBuilder。导致的。在Spring创建DataSource Bean的过程中引发了异常:

无法为持久性元数据自检bean类[com.sap.db.jdbcext.DataSourceSAP]:无法找到它依赖的类
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:401)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:333)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:992)〜[spring-beans-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:523)〜[spring-beans-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 ...省略了37个通用框架
 引起原因:java.lang.NoClassDefFoundError:java/sql/ConnectionBuilder
 在java.lang.Class.getDeclaredMethods0(本机方法)〜[na:1.8.0_162]
 在java.lang.Class.privateGetDeclaredMethods(Class.java:2724)〜[na:1.8.0_162]
 在java.lang.Class.getDeclaredMethods(Class.java:1998)〜[na:1.8.0_162]
 在org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)〜[spring-core-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:489)〜[spring-core-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:431)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:397)〜[spring-orm-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
 ...省略了40个常见框架

此异常的根本原因是SP03使用的ngdbc 2.3.33中的 com.sap.db.jdbcext.DataSourceSAP.DataSourceSAP 正在实现JDBC 4.3 API(例如 com.sap.db.jdbcext.DataSourceSAP.createConnectionBuilder()或com.sap.db.jdbc.ConnectionSapDB.setShardingKey(ShardingKey))。 该API是Java 9中引入的!

由于我们正在SP03的标准JRE 8上运行,因此显然无法正常工作!

是否有解决此问题的解决方案?

作为一种解决方法,一个选择是在我们的胖子jar中提供较旧的ngdbc版本,并说服buildpack不要通过添加较新的驱动程序版本来覆盖此版本,这是当前的默认版本。 有人可以提示如何做吗?

@SAP:请提供与jre8完全兼容的ngdbc.jar!

最诚挚的问候,

Philipp

付费偷看设置
发送
6条回答
SC_Yao
1楼 · 2020-09-12 16:38.采纳回答

当您使用一个版本的JDK编译一个库(在这种情况下为ngdbc.jar)时,Java反射存在一个普遍问题,但要在较旧的版本下运行。 对于HANA JDBC 2.3.x(它是使用JDK 9构建的,但针对JDK 7和更高版本),这不是新问题。 如果您碰巧进行了特定的反射调用,则在JVM 6或7下使用2.2.x驱动程序(由JDK 8构建,但目标为JDK 6和更高版本)会遇到类似的问题。 对于试图支持多个JDK版本的库和框架,此问题非常普遍,以至于JDK 9中引入了新的"多发行版JAR文件"功能来解决这些类型的问题。 有关详细信息,请参见 http://openjdk.java.net/jeps/238

HANA JDBC 2.3.44和更高版本包含针对此问题的修复程序; 现在,该驱动程序已构建为多发行版JAR。 修复程序将出现在HANA 2 SPS 03 Rev 31中。不幸的是,在那之前没有解决方法(只能在JDK 9下运行)。

me_for_i
2楼-- · 2020-09-12 16:17

Hi Rich,

关于新的JDBC驱动程序的发货,我有一个问题。 当前有HANA 2 SP 3修订版33。 但是,最新的XSA运行时(1.0.88)仍包含2.3.33驱动程序。
请告知我们驱动程序何时可以进入XSA安装。

谢谢,
Eik

Cikesha
3楼-- · 2020-09-12 16:24

嗨,菲利普,也许是一种解决方法,然后是该问题的真正解决方案,您可以使用xs cli(xs delete- 运行时)

λxs运行时
获取运行时...
类型版本ID已解析活动描述绑定的应用程序
---------------------- -------------------------------------------------- -------------------------------------
...
hanajdbc2 0.6 7是 正确SAP HANA JDBC驱动程序2.0.6 31
hanajdbc2 3.33 9正确SAP HANA JDBC驱动程序2.3.33 14
...

λxs delete-runtime -i 9
真的删除运行时9(hanajdbc2 3.33)? (y/n)> y
删除了运行时" hanajdbc2"版本3.33。

λxs运行时
获取运行时...
类型版本ID已解析活动描述绑定的应用程序
---------------------- -------------------------------------------------- -------------------------------------
...
hanajdbc2 0.6 7是 真正的SAP HANA JDBC驱动程序2.0.6 32
...

但是,这仅使用较旧的jdbc驱动程序。 新驱动程序的问题就在那儿。
也许SAP的某人可以提供一些见解...

干杯,Eik

悻福寶寶
4楼-- · 2020-09-12 16:21

感谢您的提示。 禁用运行时也会有所帮助。

clever101
5楼-- · 2020-09-12 16:34

我无法使用可用信息来重现此行为。

使用JAVA 1.8检查当前的JDBC驱动程序会得到以下信息:

 C:\ Program Files \ SAP \ hdbclient> java -version
 Java版本" 1.8.0_171"
 Java(TM)SE运行时环境(内部版本1.8.0_171-b11)
 Java HotSpot(TM)64位服务器VM(内部版本25.171-b11,混合模式)

 java -jar ngdbc.jar版本
 包com.sap.db.jdbc,Java平台API规范,版本1.7,SAP HANA JDBC驱动程序,SAP SE,2.3.38-e41f3a2c36e40a8bf8e2308cd77ccdb8b9bb8c13 

您能否提供一个最小的可重现示例来创建错误?

hongfeng1314
6楼-- · 2020-09-12 16:22

到目前为止,我还没有时间对此进行研究。

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答