从Java应用程序连接到AD时出现错误80004005

从Java应用程序连接到AD时出现错误80004005,java,tomcat,active-directory,com4j,Java,Tomcat,Active Directory,Com4j,我们有一个来自ApacheTomcat6的Java web应用程序。我们的用户存储在Windows 2008 R2 active directory中。 应用程序使用org.jvnet.COM4J.typelibs库版本1.0中的COM4J连接到AD 例如,我们使用以下命令搜索用户属性: public <T> T getValueFromAD(Filter filter, String atributes, ADObjectMapper<T> mapper, T null

我们有一个来自ApacheTomcat6的Java web应用程序。我们的用户存储在Windows 2008 R2 active directory中。 应用程序使用org.jvnet.COM4J.typelibs库版本1.0中的COM4J连接到AD

例如,我们使用以下命令搜索用户属性:

public <T> T getValueFromAD(Filter filter, String atributes, ADObjectMapper<T> mapper, T nullValue)
{
        _Connection con = com4j.typelibs.ado20.ClassFactory.createConnection();
        try
        {

        con.provider("ADsDSOObject");
        con.open("AD-Anon-Search", "", "", -1/*default*/);

        _Command cmd = com4j.typelibs.ado20.ClassFactory.createCommand();
        try
        {
            cmd.activeConnection(con);
            cmd.commandText("<GC://" + this.domain + ">;" + filter.encode() + ";" + atributes + ";SubTree");
            _Recordset rs = cmd.execute(Variant.getMissing(), Variant.getMissing(), -1/*default*/);
            try
            {
                if (rs.eof())
                    return nullValue;
                else
                    return mapper.mapRecordSet(rs);
            }
            finally {
                rs.close();
                rs.dispose();
            }
        }
        finally {
            cmd.dispose();
        }
    }
    finally {
        con.close();
        con.dispose();
        COM4J.cleanUp();
    }
}

任何人都知道这个问题的原因,或者,至少,我们应该怎么做才能找到原因

我们发现使它再次正常工作的唯一方法是重新启动tomcat


谢谢。亲切问候。

最后,我们发现了问题。这是由Microsoft的以下场景造成的:

考虑以下场景:

  • 您可以在域中创建托管服务帐户
  • 在运行Windows 7或Windows Server 2008 R2的计算机上安装托管服务帐户
  • 将服务配置为使用计算机上的托管服务帐户
在此场景中,服务将成功启动。但是, 托管服务帐户身份验证在30天后失败

注意:托管服务帐户会自动更新密码 每30天


这正是我们的问题,因此应用web中描述的修补程序解决了问题。希望这能帮助其他人

特权不足?privilegios Insufficients?用户必须拥有足够的权限才能正常工作。这种情况偶尔会发生,并且会一直失败,直到我们重新启动tomcat,它再次开始正常工作。那么我猜它正常工作了。不,它不正常工作。我会试着更好地解释:第一天:一切正常。第二天:很好。。。第20天(例如):停止处理我之前发布的异常;然后我们重新启动tomcat,并开始正常工作。但X天后,它可能会再次停止工作。
com4j.ComException: 80004005 Error no especificado : Error no especificado : .\invoke.cpp:517
    at com4j.Wrapper.invoke(Wrapper.java:166)
    at $Proxy108.execute(Unknown Source)
...
Caused by: com4j.ComException: 80004005 Error no especificado : Error no especificado : .\invoke.cpp:517
    at com4j.Native.invoke(Native Method)
    at com4j.StandardComMethod.invoke(StandardComMethod.java:35)
    at com4j.Wrapper$InvocationThunk.call(Wrapper.java:340)
    at com4j.Task.invoke(Task.java:51)
    at com4j.ComThread.run0(ComThread.java:153)
    at com4j.ComThread.run(ComThread.java:134)
com4j.ComException: 80072116 Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : .\invoke.cpp:517
    at com4j.Wrapper.invoke(Wrapper.java:166)
    at $Proxy116.set(Unknown Source)
...
Caused by: com4j.ComException: 80072116 Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : .\invoke.cpp:517
    at com4j.Native.invoke(Native Method)
    at com4j.StandardComMethod.invoke(StandardComMethod.java:35)
    at com4j.Wrapper$InvocationThunk.call(Wrapper.java:340)
    at com4j.Task.invoke(Task.java:51)
    at com4j.ComThread.run0(ComThread.java:153)
    at com4j.ComThread.run(ComThread.java:134)