Исключение при поиске в LdapTemplate с параллельным потоком и LdapTemplate - PullRequest
0 голосов
/ 10 мая 2019

У меня проблемы, попробуйте поискать группы в LDAP с помощью поиска spring-ldap с параллелизмом.

Я выполняю пакетную обработку для загрузки данных из базы данных SQL в LDAP.Я использую spring-boot и spring-ldap.

Мой алгоритм пытается найти группу в ldap, используя ее gidNumber.Работает нормально при запуске без параллелизма (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 говорит, что этот метод должен возвращать экземпляр DirContextAdapter, если я не изменяю DirObjectFactory LdapContextSource.

Мой код похож на:

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.И open-jdk-zulu 11.

Мой алгоритм пытается найти группу в ldap, используя ее gidNumber.Работает нормально при запуске без параллелизма (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 говорит, что этот метод должен возвращать экземпляр DirContextAdapter, если я не изменяю DirObjectFactory LdapContextSource.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...