当前位置: 首页 > 知识库问答 >
问题:

带有并行流和LdapTemplate的LdapTemplate搜索捕获异常

艾国安
2023-03-14

我在使用spring LDAP search with parallelism在LDAP上尝试go搜索组时遇到问题。

我正在进行批处理,以便将数据从SQL数据库加载到LDAP。我使用spring boot和spring ldap。

我的算法尝试在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);
            })

我的应用程序是一个批处理程序,用于将数据从SQLhtml" target="_blank">数据库加载到LDAP。我使用spring boot和spring ldap。

我正在使用Spring 2.1.4、OpenLdap和ORACLE来SQL-DB和open-jdk-zulu 11。

我的算法尝试使用它的gidNumber在ldap上搜索一个组。当没有并行性(stream.parallelStream)时,它运行得很好。但是当我用并行流()迭代一个列表时,我有时会遇到一个ClassCastExctive:

我设置了一个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的实例。

共有1个答案

潘向明
2023-03-14

我们与团队确认,从parallelStream()改为stream()解决了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 home:C:\Program Files\Java\jdk-11.0.5默认语言环境:en_US,平台编码:Cp1252操作系统名称:“windows 10”,版本:“10.0”,拱门:“amd64”,系列:“windows”

同事有,和经验的问题:Apache Maven 3.6.1(d66c9c0b3152b2e69ee9Bac180bb8fc8e6af555; 2019-04-04T21:00:29 02:00)Maven主页:C:\工具\ideaIU-2019.2.3.win\plugins\maven\lib\maven3Java版本:13.0.2,供应商:Oracle Corporation,运行时:C:\Program Files\Java\jdk-13.0.2默认区域设置:en_US,平台编码:UTF-8操作系统名称:windows 10,版本:10.0,arch:amd64,系列:windows

 类似资料:
  • 我正在尝试使用Spring LDAPTemplate控制OpenLDAP。 在LDAP中,我有组和用户组织单位。我正在尝试将新用户绑定到具有组关联的LDAP中。(通用用户帐户)因此,当我尝试绑定新用户时,我还将的属性对象中放入。但是我得到了这样的错误: 到目前为止,我一直在尝试: 以下是我的模式:

  • 在企业活动目录中具有以下组织结构; DC=foo,DC=bar,DC=com OU=员工 CN=员工1 CN=雇员2 CN=intern1 CN=实习生2 我需要检索一个列表; 具有“A”属性但不具有“B”属性的员工,以及具有“B”属性但不具有“A”属性的实习生。 生成Spring LDAP的通过设置DC=foo,DC=bar,DC=com作为基础,我在上看不到任何用于设置具有单个过滤器的多个搜索

  • 使用Spring LdapTemboard在组中添加成员的最佳方法是什么。我已经成功创建用户并删除用户ex。但我正在尝试添加成员,然后我面临问题。 添加成员代码: } addMemberToGroup异常:Class Class org。springframework。ldap。果心DirContextAdapter必须具有类级接口组织。springframework。ldap。odm。注释。条目

  • 我有一个使用SpringLDAP 1.3.1的应用程序。它在启动时在Spring上下文中创建LdapTemplate,并将其传递给我的应用程序。我连接的LDAP字符串实际上是一个VIP设备,后面有多个Active Directory服务器。 该应用程序用于创建组层次结构,并分几个步骤进行。首先,它创建任何新组,然后删除任何删除的组,然后更新和更改组,最后更新任何新组或移动组的父级。 在最后一步中,

  • export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status