2011-11-22 76 views
1

我需要做的是连接到LDAP,然后将此连接传递给几个类,它们执行各种处理步骤。在类之间共享LDAP连接 - 最佳实践?

我面对的问题是,如果我应该通过构造函数传递这些类的连接,或者每个类都应该管理自己的连接。

我在第一种方法中看到的问题是,调用者可能不知道他自己负责关闭流。第二种方法似乎也不合适,因为打开/关闭/重新打开连接也没有意义。

对此的任何想法?

回答

1

我不知道为什么你会有几个类处理LDAP。也许您应该考虑将这些分散的操作组合到一个对LDAP操作负有全部责任的类中。

如果这是不可能的,你的直觉是正确的。打开连接的类应该在finally块中关闭它。这应该是基于接口的POJO服务类,它知道该用例的工作单元。毫无疑问责任在哪里。如果你没有这样的服务,请创建一个。

如果操作不是单个工作单元的一部分,那么它们应该由单独的服务来管理。上一段的评论仍然适用。

您是否在池中存储LDAP连接?但愿如此。

我建议您看看Spring LDAP module,尤其是如果您已经是Spring用户。它使得处理LDAP资源变得简单,就像处理JDBC一样。

1

构建工具类或提供各种服务的任何其他类是一种不好的做法。类应该提供单个服务或一组严格控制的服务,否则你可以回到FORTRAN垃圾公共块。要在类之间共享LDAP连接,请封装连接(这也将用于隐藏API详细信息)。然后通过使用目录服务器上的帐户进行身份验证来保护方法。例如,应该要求使用close()方法来验证具有密切特权的帐户,或者是密切组的成员,或者您喜欢的任何authn/authz。您应该使用UnboundID LDAP SDK进行此类工作。另见“LDAP: Programming Practices”。