我遇到问题,尝试使用具有并行性的spring-ldap搜索在LDAP上进行搜索。
我正在进行批处理,以将数据从SQL数据库加载到LDAP。我使用spring-boot和spring-ldap。
我的算法尝试使用其gidNumber在ldap搜索组。在没有并行性的情况下运行时可以正常工作(stream.parallelStream)。但是,当我使用parallelStream迭代列表时,有时会捕获以下异常:
java.lang.ClassCastException: class com.sun.jndi.ldap.LdapCtx cannot be cast to class org.springframework.ldap.core.DirContextAdapter (com.sun.jndi.ldap.LdapCtx is in module java.naming of loader 'bootstrap'; org.springframework.ldap.core.DirContextAdapter is in unnamed module of loader java.net.URLClassLoader @4f0f76b4)
我已将对象从ContextMapper#mapFromContext强制转换为DirContextAdapter。 Spring-ldap参考指出,如果我不更改DirObjectFactory LdapContextSource,则此方法应返回DirContextAdapter的实例。
我的代码类似于:
ldapTemplate.search(
query().base(groupName()).where("gidNumber").is(Long.toString(gid)),
(ContextMapper<GroupLdap>) ctx -> {
DirContextAdapter context = (DirContextAdapter) ctx;
return new GroupLdap(context, true);
})
我的应用程序是一个批处理,用于将数据从SQL数据库加载到LDAP。我使用spring-boot和spring-ldap。
我正在使用spring-boot 2.1.4,OpenLdap和ORACLE到SQL-DB。然后打开jdk-zulu 11。
我的算法尝试使用其gidNumber在ldap搜索组。在没有并行性的情况下运行时可以正常工作(stream.parallelStream)。但是当我使用parallelStream()迭代列表时,有时会捕获到ClassCastException:
我放了一个ldap池连接,但它不起作用。
我的代码类似于:
ldapTemplate.search(
query().base(groupName()).where("gidNumber").is(Long.toString(gid)),
(ContextMapper<GroupLdap>) ctx -> {
DirContextAdapter context = (DirContextAdapter) ctx;
return new GroupLdap(context, true);
})
groupName是一个引用“ ou = groups,dc = fff,dc = br”的名称;
gid是带有gitNumber个搜索组的数字。
GroupLdap是LDAP上组的内部表示形式。
由于并行性,有时我会收到例外情况:
java.lang.ClassCastException: class com.sun.jndi.ldap.LdapCtx cannot be cast to class org.springframework.ldap.core.DirContextAdapter (com.sun.jndi.ldap.LdapCtx is in module java.naming of loader 'bootstrap'; org.springframework.ldap.core.DirContextAdapter is in unnamed module of loader java.net.URLClassLoader @4f0f76b4)
我已将对象从ContextMapper#mapFromContext强制转换为DirContextAdapter。 Spring-ldap参考指出,如果我不更改DirObjectFactory LdapContextSource,则此方法应返回DirContextAdapter的实例。
答案 0 :(得分:0)
我们与团队确认,将stream()
更改为parallelStream()
可解决ClassCastException
的问题。肯定是一些openJdk缺陷。找不到与https://bugs.openjdk.java.net相关的任何内容。重现孤立的问题后,我将进行报告。目前,parallelStream并不总是能正常工作(在少数几个设置上它不能正常工作)
我使用并可以使用parallelStream:
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T09:58:13 + 02:00) Maven主页:C:\ Program Files \ apache-maven-3.5.2 \ bin .. Java版本:11.0.5,供应商:Oracle Corporation Java主页:C:\ Program Files \ Java \ jdk-11.0.5 默认语言环境:en_US,平台编码:Cp1252 操作系统名称:“ windows 10”,版本:“ 10.0”,拱门:“ amd64”,家族:“ windows”
同事有并且遇到问题: Apache Maven 3.6.1(d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T21:00:29 + 02:00) Maven主页:C:\ tools \ ideaIU-2019.2.3.win \ plugins \ maven \ lib \ maven3 Java版本:13.0.2,供应商:Oracle Corporation,运行时:C:\ Program Files \ Java \ jdk-13.0.2 默认语言环境:en_US,平台编码:UTF-8 操作系统名称:“ windows 10”,版本:“ 10.0”,拱门:“ amd64”,家族:“ windows”