当访问某些 portlet 的时候,日志中报出如下错误:
[08-3-21 17:11:16:000 CST] 00000041 WCM_Workspace W IWKCW1006X: 连接到用户存储库时发生错误。原因:IWKMU1062X: 消息:EJPSG0015E: 数据后端问题 com.ibm.websphere.wmm.exception.AttributeNotDefinedException: 没有为成员类型“Person”定义属性“uid”,原因:com.ibm.wps.util.DataBackendException: EJPSG0015E: 数据后端问题 com.ibm.websphere.wmm.exception.AttributeNotDefinedException: 没有为成员类型“Person”定义属性“uid”。无法返回成员 id: cn=测试,cn=users,dc=sh,dc=ibm,dc=com
attributeSubset: null
memberIdentifier: [cn=测试,cn=users,dc=sh,dc=ibm,dc=com / 18f298bfdc1a1b41a3e950c5e36f92af]
attributes: {sn=sn:测试, userAccountControl=userAccountControl:66048, cn=cn:测试, createTimestamp=createTimestamp:2006-12-25 11:38:50.0, samAccountName=samAccountName:31000002, modifyTimestamp=modifyTimestamp:2007-07-03 02:58:57.0, givenName=givenName:31000002, displayName=displayName:测试}
objectID: [ExtIDImpl '9eAeH1EC6P47OHOC6IDCH9O23HH6H9O6JI57L1C6MQKCJHDCMS861JP0' [18f298bfdc1a1b41a3e950c5e36f92af / USER, Domain: [Domain: rel]]]
descriptor: com.ibm.wps.datastore.impl.PrincipalDescriptorImpl@a94f83a1
objectID: [ExtIDImpl '9eAeH1EC6P47OHOC6IDCH9O23HH6H9O6JI57L1C6MQKCJHDCMS861JP0' [18f298bfdc1a1b41a3e950c5e36f92af / USER, Domain: [Domain: rel]]]
created: 1167102764984
lastModified: 1206090655500
distinguishedName: cn=测试,cn=users,dc=sh,dc=ibm,dc=com
resourceType: USER
hasLoggedOut: true
lastLoginTime: 1206090655500
markupData: {html=<Placeholder: LazyLoad String(1)>}
stack: com.ibm.wps.puma.User
。
[08-3-21 17:11:16:031 CST] 00000041 WCM_InitTag W com.ibm.workplace.wcm.api.WCM_InitTag 处理请求时捕获异常。原因:p_user cannot be null.
[08-3-21 17:11:16:031 CST] 00000041 WCM_InitTag W com.ibm.workplace.wcm.api.WCM_InitTag
java.lang.NullPointerException: p_user cannot be null.
at com.aptrix.util.CodeIntegrityUtils.checkNotNull(CodeIntegrityUtils.java(Compiled Code))
at com.presence.connect.wmmcomms.UserManagementUtils.setUser(UserManagementUtils.java:159)
at com.ibm.workplace.wcm.api.WCM_Workspace.<init>(WCM_Workspace.java:206)
at com.ibm.workplace.wcm.api.WCM_Repository.getWorkspace(WCM_Repository.java:115)
at com.ibm.workplace.wcm.api.WCM_InitTag.doStartTag(WCM_InitTag.java:107)
at com.ibm._jsp._view._jspService(_view.java:250)
at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:91)
...
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
解答:
这是因为uid属性没有正确配置导致的。
解决方法如下:
<attributeMap wmmAttributeName="uid"
pluginAttributeName="uid"
applicableMemberTypes="Person"
dataType="String"
valueLength="256"
multiValued="true"/>
2. 拷贝下面文件:
i. <WP_root>\config\work\wmm\bin\setenv.bat拷贝后的副本文件名为mySetenv.bat(如果是Unix或者Linux平台,则为.sh文件);
ii. <WP_root>\config\work\wmm\bin\attributeLoader.bat拷贝后的副本文件名为myAttributeLoader.bat(如果是Unix或者Linux平台,则为.sh文件);
3. 修改mySetenv.bat(如果是Unix或者Linux平台,则为.sh文件),增加或者修改下面行:
set WP_root=E:\WebSphere\WPS
set WAS_root=E:\WebSphere\WAS
set SERVER_NAME=WebSphere_Portal
set DB_PASSWORD=db2admin
call %WAS_root%\bin\setupCmdLine.bat
set CS_HOME=%WP_root%\cloudscape\
注意:请用于您的环境匹配的值替换上面的值,这里给出的值只是例子。
4. 修改myAttributeLoader.bat(如果是Unix或者Linux平台,则为.sh文件),修改下面的行:
set TRACE_LOG=%WP_root%\config\work\wmm\bin\attrloader.log
echo Usage: myAttributeLoader.bat "%WP_root%\wmm\wmmLAAttributes.xml"
5. 打开一个命令窗口,进入<WP_root>\config\work\wmm\bin\目录,并且执行:
myAttributeLoader.bat <WP_root>\wmm\wmmLAAttributes.xml
6. 确认在第4步中设置的attrLoader.log中有如下信息:
...Loading attribute: newAttr
attribute newAttr is created with id=10105
memberType P is created for 10105
LookAside Attribute: newAttr is loaded.
如果执行的过程中报出如下错误信息: ...Loading attribute: uid
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0803N INSERT 语句、UPDATE 语句或由 DELETE 语句导致的外键更新中的一个或多个值无效,因为由 "2" 标识的主键、唯一约束或者唯一索引将表 "DB2ADMIN.WMMLAATR"的那些列限制为不能具有重复行。 SQLSTATE=23505
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:275)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:217)
表示数据库中已经有这个属性的配置,这时候可以重新启动Portal Server.
8. 重新启动Portal Server.