[轉帖]WebSphere Portal 6.0 針對一個大庫運行refreshAllItems任務會導致事務超時

[標題]
針對一個大庫運行refreshAllItems任務會導致事務超時 

環境:(產品,平臺,機型,軟件版本,等)
產品:Workplace Web Content Management
平臺:AIX, HP-UX, Linux, Linux iSeries, Linux Red Hat - iSeries, Linux SUSE - iSeries, Solaris, Windows 
軟件版本:6.0.1, 6.0.0.2, 6.0.0.1, 6.0 

問題描述:
當您針對一個大的庫運行refreshAllItems任務時,您可能會碰到事務處理超時,並且在日誌中報這樣的錯誤:

[12:14:13:061 CDT] 00000055 ServletWrappe E SRVE0068E: Could not invoke the service() method on servlet WCM Framework. Exception thrown : java.lang.IllegalStateException: 
Session Object Internals: 
id : ZjPjtHUzlRSKcDMniJrpeP3
hashCode : 29826728
create time : 12:00:19 CDT 2007
last access : 12:00:23 CDT 2007
max inactive interval : 600
user name : anonymous
valid session : false
new session : false

overflowed : false

app name : default_host/wps/wcm

non-serializable app specific session data : null
serializable app specific session data : []

at com.ibm.ws.webcontainer.httpsession.SessionData.getValueGuts(SessionData.java:825)
at com.ibm.ws.webcontainer.httpsession.SessionData.getValue(SessionData.java:1251)
at com.ibm.ws.webcontainer.httpsession.SessionData.getAttribute(SessionData.java:1131)
at com.ibm.ws.webcontainer.httpsession.HttpSessionFacade.getAttribute(HttpSessionFacade.java:104)
at com.presence.connect.wmmcomms.UserManagementUtils.getUser(UserManagementUtils.java:96)
at com.presence.connect.Connect.initialiseRequest(Connect.java:377)
at com.presence.connect.ConnectServlet.process(ConnectServlet.java:242)
at com.presence.connect.ConnectServlet.doGet(ConnectServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1572)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:762)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:89)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1924)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:98)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:472)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:411)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:288)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:950)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:582)
at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext.handleAsyncComplete(SSLReadServiceContext.java:506)
at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext.read(SSLReadServiceContext.java:468)
at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext.read(SSLReadServiceContext.java:306)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.readyInboundPostHandshake(SSLConnectionLink.java:655)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyHandshakeCompletedCallback.complete(SSLConnectionLink.java:364)
at com.ibm.ws.ssl.channel.impl.SSLUtils.handleHandshake(SSLUtils.java:760)
at com.ibm.ws.ssl.channel.impl.SSLHandshakeIOCallback.complete(SSLHandshakeIOCallback.java:70)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1471)

接下來還會報很多有關JCR文本搜索的異常信息,如下:
[12:29:34:735 CDT] 0000002f JCRCFLLoggerI E com.ibm.icm.ts.tss.JCRCFLLoggerImpl com.ibm.icm.ts.tss.app.IndexMaintainer.handleError [java.lang.ThreadGroup[name=icmciWorkManager: icmjcrear,maxpri=10]]: error processing pending event name: ' (node not currently found in workspace) ' event: Event: action='Delete_Node(2)', timestamp='2007-04-24 17:00:45.29769', document id=<workspace: 1, itemid: AB001001N07D23C21100235554>', parentID: <workspace: 1, itemid: AB001001N07B25B437000C1C71> com.ibm.icm.ts.tss.ls.DatabaseException: com.ibm.icm.ts.path.StorageException: java.lang.IllegalArgumentException
at com.ibm.icm.ts.tss.app.IndexMaintainer.reindexWorkspace(IndexMaintainer.java:344)
at com.ibm.icm.ts.tss.app.IndexMaintainer.processPendingUpdates(IndexMaintainer.java:202)
at com.ibm.icm.ts.tss.app.IndexMaintainer.runIndexMaintenance(IndexMaintainer.java:137)
at com.ibm.icm.ts.tss.app.IndexMaintainer.checkForUpdates(IndexMaintainer.java:105)
at com.ibm.icm.ts.tss.app.IndexMaintenanceService.checkForUpdates(IndexMaintenanceService.java:65)
at com.ibm.icm.ts.tss.app.IndexMaintenanceService.access$000(IndexMaintenanceService.java:27)
at com.ibm.icm.ts.tss.app.IndexMaintenanceService$Notifiee.onEvent(IndexMaintenanceService.java:114)
at com.ibm.icm.ts.act.ActivityImpl$ManagerImpl$ActivityRunner.runActivity(ActivityImpl.java:333)
at com.ibm.icm.ts.act.ActivityImpl$ManagerImpl$ActivityRunner.run(ActivityImpl.java:303)
at com.ibm.hrl.workmanager.RunnableWrapper.run(RunnableWrapper.java:44)
at com.ibm.hrl.workmanager.impl.was.WasWork.run(WasWork.java:75)
at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:258)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:320)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118)
at com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:325)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:709)
at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:218)
at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:154)
at java.lang.Thread.run(Thread.java:534)
Caused by: com.ibm.icm.ts.path.StorageException: java.lang.IllegalArgumentException
at com.ibm.icm.ts.tss.JCRDocumentImpl$Manager.lookupChildren(JCRDocumentImpl.java:323)
at com.ibm.icm.ts.tss.JCRDocumentImpl$Manager.access$000(JCRDocumentImpl.java:246)
at com.ibm.icm.ts.tss.JCRDocumentImpl.children(JCRDocumentImpl.java:83)
at com.ibm.icm.ts.tss.JCRIndexerImpl.indexSubtreeRecursive(JCRIndexerImpl.java:72)
at com.ibm.icm.ts.tss.JCRIndexerImpl.indexSubtreeRecursive(JCRIndexerImpl.java:74)
at com.ibm.icm.ts.tss.JCRIndexerImpl.indexSubtreeRecursive(JCRIndexerImpl.java:74)
at com.ibm.icm.ts.tss.JCRIndexerImpl.indexSubtree(JCRIndexerImpl.java:57)
at com.ibm.icm.ts.util.ReindexWorkspace.addEventsForAllNodes(ReindexWorkspace.java:142)
at com.ibm.icm.ts.util.ReindexWorkspace.addEventsForAllNodes(ReindexWorkspace.java:127)
at com.ibm.icm.ts.util.ReindexWorkspace.reindexWorkspace(ReindexWorkspace.java:65)
at com.ibm.icm.ts.tss.app.IndexMaintainer.reindexWorkspace(IndexMaintainer.java:342)

問題分析:
當refreshAllItems任務運行的同時,JCR 搜索也在嘗試重建索引,這便導致refreshAllItems任務超時,在瀏覽器端也報掛起的錯誤。JCR在此期間重建索引的對象是在任務運行這段時間被重新保存了的文檔。結果便是當事務超時之後瀏覽器報掛起的錯誤。

解答:
請暫時禁用文本搜索,再運行refreshAllItems任務。 編輯以下文檔:

WebSphere\PortalServer\jcr\lib\com\ibm\icm\icm.properties
修改以下屬性:
jcr.textsearch.enabled=
把這個值改成false,直到任務運行完。
當refreshAllItems任務成功運行完畢,您可以重新啓用這個設置,再重建文本索引,具體請參考以下步驟:
1. 停止PortalServer
2. 備份 <wp_home>/jcr/search 目錄
3. 刪除<wp_home>/jcr/search 目錄
4. 重啓PortalServer

注: 重建索引需要一些時間,取決於需要更新多少文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章