Я использую WildFly 8,2 и настройки следующих внешнего контекстаWildFly Внешний контекст - LDAP
<subsystem xmlns="urn:jboss:domain:naming:2.0">
<bindings>
<external-context name="java:global/ldap" module="org.jboss.as.naming" class="javax.naming.ldap.InitialLdapContext" cache="true">
<environment>
<property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<property name="java.naming.provider.url" value="ldap://example.com:389"/>
<property name="java.naming.security.authentication" value="simple"/>
<property name="java.naming.security.principal" value="CN=exampleuser,DC=example,DC=com"/>
<property name="java.naming.security.credentials" value="examplepassword"/>
</environment>
</external-context>
</bindings>
<remote-naming/>
</subsystem>
Я пытаюсь использовать этот внешний контекст для подключения к Active Directory с этим кодом:
@Resource(lookup = "java:global/ldap")
private LdapContext ldapCtx;
NamingEnumeration<SearchResult> enumeration = ldapCtx.search();
Я получаю следующие ошибки:
Caused by: java.lang.IllegalArgumentException: JBAS016081: Error injecting resource into CDI managed bean. Can't find a resource named java:global/ldap defined on private javax.naming.ldap.LdapContext com.example.LdapClient.ldapCtx
Если я изменить код
@Resource(lookup = "java:global/ldap")
private InitialDirContext iniCtx;
LdapContext ldapCtx = (LdapContext) iniCtx;
NamingEnumeration<SearchResult> enumeration = ldapCtx.search();
я
Caused by: javax.naming.NamingException: JBAS011878: Failed to lookup ldap [Root exception is java.lang.RuntimeException: java.lang.NoSuchMethodException: javax.naming.ldap.LdapContext.<init>(java.util.Hashtable)]
как вы, наконец, получили эту работу? Я столкнулся с одной и той же проблемой, и это очень помогло бы вам решить ваше решение. – Tommy