Java 如何处理LDAP连接?

Java 如何处理LDAP连接?,java,ldap,Java,Ldap,我正在尝试实现以下内容: 我有一个导入器类,它注册所谓的Processors,然后通过迭代并调用execute来执行它们(Processor是一个接口,包含一个方法void execute()) 这些处理器所做的是连接到LDAP并执行某些任务,例如检索人员列表并将其存储到数据库中,或者读取某些权限并将其映射到组 这一切都很顺利。。。只是我不知道如何处理LDAP连接 以下是一些想法: 在构造函数中初始化连接(并将其分配给字段),并提供一个dispose()`方法,该方法关闭连接或 不要在构造函数中

我正在尝试实现以下内容:

我有一个导入器类,它注册所谓的
Processor
s,然后通过迭代并调用execute来执行它们(
Processor
是一个接口,包含一个方法
void execute()

这些处理器所做的是连接到LDAP并执行某些任务,例如检索人员列表并将其存储到数据库中,或者读取某些权限并将其映射到组

这一切都很顺利。。。只是我不知道如何处理LDAP连接

以下是一些想法:

  • 在构造函数中初始化连接(并将其分配给字段),并提供一个dispose()`方法,该方法关闭连接
  • 不要在构造函数中初始化连接字段,而是在
    execute()
    方法中初始化并关闭它
  • 在execute方法中创建连接,并将其传递给所有被调用的方法
  • 甚至更丑陋(在导入器中创建连接并将其传递给所有处理器,然后在执行后将其关闭)

  • 在其他地方构建它并将其注入到应用程序中

    如果您没有通过CDDI提供依赖注入的JEE6,那么您可以使用Spring框架作为解决方案

    它有两个好处

  • 连接的生命周期在使用它的类之外
  • 该连接可以替换为模拟或假连接进行测试
    使用作为必需参数的策略方法处理与LDAP服务器的连接。这将分离和隔离代码。对于这项工作,您应该更喜欢使用,SDK支持创建连接的功能,因此不需要使用“模拟”或“假”连接。此外,您还可以查看博客帖子。

    #2 imo,让导入者尽可能简单,不要让连接打开的时间超过需要的时间。+1我已经使用了Unbounded LDAP SDK以及InMemory DS-太棒了!你能详细介绍一下战略模式部分吗?我知道并经常使用策略模式,但不知道如何在这里应用它。只是一个想法。创建一个ServerConnectionStrategy接口,该接口定义必须由服务提供者提供的服务(其中服务提供者是一组提供必要LDAP服务的类)。该策略定义了在其他地方实现的服务。我正在考虑使用“execute()”方法来使用该模式。我不喜欢不使用任何参数来表示其函数的方法——多态性可能会走得太远,使代码变得脆弱。如果execute()接受一个策略参数,那么它的作用就更明确了。我还没有真正想清楚这一点。