當訪問某些 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.