2016-03-02 5 views
1

Вот что я хотел бы достичь:ApacheDS - Пользовательские SearchHandler (Java)

С одной стороны, у меня есть база данных Oracle. С другой стороны, «простое» Java-приложение (назовем его «App»).

И в середине встроенный ApacheDS в Java. Идея заключается в доступе к этой базе данных через встроенный сервер LDAP.

В настоящее время я могу подключить «приложение» к встроенному серверу LDAP, отправить ему параметры и выполнить некоторые sql в базе данных Oracle.

Но проблема в том, что я не могу вернуть результат в «Приложение». Видимо, я должен использовать свой собственный «SearchHandler», но я не могу понять, как это сделать.

Надеюсь, мои объяснения достаточно ясны. Если нет, я могу попытаться дать более подробную информацию.

server.setSearchHandler(new LdapRequestHandler<InternalSearchRequest>() { 
     @Override 
     public void handle(LdapSession ls, InternalSearchRequest t) throws Exception { 
      //Getting data from Oracle database 
      System.out.println(dataFromDatabase);     
     } 
}); 
+0

Ну, у нас нет идеи? Или ссылку на туто, объясняющую, как создать пользовательский SearchHandler. – AdriLoulou

ответ

0

Немного поздно, но вы на правильном пути.

Я делаю более или менее то же самое (но с BindRequestHandler), используя ApacheDS в качестве прокси-сервера LDAP. Я делаю это, используя версию 2.0.0-M23.

Я продлил его так:

public class LoggerBindRequestHandler extends BindRequestHandler { 
    private static final Logger LOGGER = LoggerFactory.getLogger(LoggerBindRequestHandler.class); 

    @Override 
    public void handle(LdapSession session, BindRequest request) throws Exception { 
     LOGGER.debug(session.toString()); 
     LOGGER.debug(request.toString()); 

     super.handle(session, request); 
    } 

    @Override 
    public void handleSaslAuth(LdapSession session, BindRequest request) throws Exception { 
     LOGGER.debug(session.toString()); 
     LOGGER.debug(request.toString()); 

     super.handleSaslAuth(session, request); 
    } 

    @Override 
    public void handleSimpleAuth(LdapSession session, BindRequest request) throws Exception { 
     LOGGER.debug(session.toString()); 
     LOGGER.debug(request.toString()); 

     super.handleSimpleAuth(session, request); 
    } 
} 

Затем я установил сервер LDAP

ldapServer.setBindHandlers(new LoggerBindRequestHandler(), new LoggerBindResponseHandler()); 

И это все.

Насколько я заметил, вам не хватает ResponseHandler. Вот почему вы можете отправлять команды оракулу, но не отправляйте ответ.