我们有一个来自ApacheTomcat6的java web应用程序。我们的用户存储在windows2008r2activedirectory中。应用程序使用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();
}
}
它使用find right well,但有时(不是固定的时间),它会停止工作,对ad的查询会以如下访问错误进行响应:
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)
有人知道这个问题的原因,或者至少知道我们应该怎么做才能找到原因吗?
我们找到的使它再次正常工作的唯一方法是重新启动tomcat。
谢谢。谨致问候。
1条答案
按热度按时间pwuypxnk1#
最后,我们发现了问题。这是由当时的情况造成的http://support.microsoft.com/kb/2494158 微软公司:
考虑以下场景:
在域中创建托管服务帐户。
在运行windows 7或windows server 2008 r2的计算机上安装托管服务帐户。
将服务配置为使用计算机上的托管服务帐户。
在此场景中,服务成功启动。但是,托管服务帐户身份验证在30天后失败。
注意:托管服务帐户每30天自动更新一次密码。
这正是我们的问题,因此应用web中描述的修补程序解决了问题。希望这能帮助其他人。