|
|
|
Все запросы к LDAP завершаются exception
|
|||
|---|---|---|---|
|
#18+
Заранее спасибо! Для учебного построения своего велосипеда, есть необходимость делать запросы к LDAP. В реальности стоит MS AD LDAP реализация от 2008 сервера. На ней и тренируюсь. Запросы делать получилось. Ответы верны :) Загвоздка в том, что в отличие от SQL-запросов, все запросы завершаются ошибкой (exception). Для некоторых ошибок помогло с помощью гугла добавление таймаута. Но теперь "лезут" другие... Может я нашел "неудачный пример"? Или это "нормально"? Источник, код и последняя ошибка ниже: источник примера Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: firma.UA:389 [Root exception is java.net.ConnectException: Connection timed out: connect]] at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:242) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreReferrals(LdapNamingEnumeration.java:380) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:226) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreReferrals(LdapNamingEnumeration.java:380) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:226) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMore(LdapNamingEnumeration.java:189) at LdapBasicExample.main(LdapBasicExample.java:41) Caused by: javax.naming.CommunicationException: firma.UA:389 [Root exception is java.net.ConnectException: Connection timed out: connect] at com.sun.jndi.ldap.LdapReferralContext.<init>(LdapReferralContext.java:92) at com.sun.jndi.ldap.LdapReferralException.getReferralContext(LdapReferralException.java:150) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreReferrals(LdapNamingEnumeration.java:357) at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:226) ... 6 more Caused by: java.net.ConnectException: Connection timed out: connect at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.<init>(Socket.java:425) at java.net.Socket.<init>(Socket.java:208) at com.sun.jndi.ldap.Connection.createSocket(Connection.java:366) at com.sun.jndi.ldap.Connection.<init>(Connection.java:201) at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:136) at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1600) at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2698) at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:316) at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193) at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:152) at com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(ldapURLContextFactory.java:52) at javax.naming.spi.NamingManager.getURLObject(NamingManager.java:601) at javax.naming.spi.NamingManager.processURL(NamingManager.java:381) at javax.naming.spi.NamingManager.processURLAddrs(NamingManager.java:361) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:333) at com.sun.jndi.ldap.LdapReferralContext.<init>(LdapReferralContext.java:111) ... 9 more СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 21 секунды) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 10:57 |
|
||
|
Все запросы к LDAP завершаются exception
|
|||
|---|---|---|---|
|
#18+
Вероятно некоторые запросы действительно долго выполняются. 500ms это совсем мало для удаленных запросов. Поставьте несколько секунд. Возьмите любую готовую тулзу для LDAP и посмотрите в ней сколько ваши запросы выполняются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 12:10 |
|
||
|
Все запросы к LDAP завершаются exception
|
|||
|---|---|---|---|
|
#18+
olexandeЗаранее спасибо! env.put(Context.PROVIDER_URL, "ldap://192.168.1.1:389/dc=firma,dc=ua"); // Адрес сервера ... env.put(Context.REFERRAL, "follow"); .... Caused by: java.net.ConnectException: Connection timed out: connect .... at com.sun.jndi.ldap.LdapReferralContext.<init>(LdapReferralContext.java:111 есть мнение, что в условия Вашего поиска попадают рефералы, которые находятся на других узлах AD, а к этим узлам у вас доступа нет, варианта борьбы два: подключаться к глобальному каталогу (нужно установить у какого сервера есть такая роль и соответственно подключаться по порту 3268, в приницпе можно огрести проблем из-за того, что в глобальный каталог попадают не все атрибуты), использовать Context.REFERRAL, "ignore" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 13:53 |
|
||
|
Все запросы к LDAP завершаются exception
|
|||
|---|---|---|---|
|
#18+
Blazkowicz500ms Пробовал и секунду. не помогало. Пробовал и заведомо "короткий запрос" - получаю ответ. программа ждет. получаю эксепшн. Пробовал и на "объемном запросе" ставить разное время - ексепшн всегда появлялся. При очень коротком времени сессии, получал только часть данных. При более длинных - больше информации. Попробовать сделать короткий запрос с разным временем и скинуть логи? Наверно, таки попробую. Может, что интересное покажет. BlazkowiczВозьмите любую готовую тулзу для LDAP и посмотрите в ней сколько ваши запросы выполняются. Можете что-то "по проще" порекомендовать. "Что-то" нашел, но с запросами напрямую разобрался быстрее, чем с той тулзой ... Андрей Панфиловиспользовать Context.REFERRAL, "ignore" - спасибо, попробую и отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 23:08 |
|
||
|
Все запросы к LDAP завершаются exception
|
|||
|---|---|---|---|
|
#18+
Был слегка занят некоторое время другими задачами. Попробовал: Андрей Панфиловиспользовать Context.REFERRAL, "ignore" - спасибо, попробую и отпишусь.[/quot] ИМХО стало хуже. Появились "промежуточные" исключения. Так же получил неожиданные для себя результаты: Работает: Код: java 1. Выдает ексепшн: Код: java 1. javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name '' at com.sun.jndi.ldap.Filter.encodeSimpleFilter(Filter.java:437) at com.sun.jndi.ldap.Filter.encodeFilter(Filter.java:146) at com.sun.jndi.ldap.Filter.encodeFilterString(Filter.java:74) at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:539) at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1985) at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1847) at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1772) at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:386) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:356) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:339) at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:267) at LdapBasicExample.main(LdapBasicExample.java:42) СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 6 секунды) А отличаются-то они всего-навсего пробелами вокруг знака "=" в теле фильтра. Относительно много нервов и времени потерял, пытаясь найти причину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 22:43 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=187&tid=2127671]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 418ms |

| 0 / 0 |
