IBM Support Tools portlet for IBM Web Content Manager
- JCR nodes
- Node hierarchy
- XPath Query
- WCM Seed List Generator
- Utility JSP pages
- Display Type
- Execute SQL queries
- Validate database nodes
- Clear Caches
- Display EventLog
- Display Thread Stacks
- Count Items
- Display Node
- Clear Persistence Service Table
- Launch Text Search Utilities
- TextSearch Index Status
- Reindex a node
- Search Index Reorg Check
- Enable access code
- XPath expressions
- Example 1: Could not save item
- Example 2: Locked WCM libraries
- Example 3: Items not syndicating
The IBM Support Tools portlet for IBM Web Content Manager is used to troubleshoot JCR repository issues, allowing one to...
Download IBM Support Tools from the IBM WCM Support page. Install and configure on a page as you would any standard portlet
Browse JCR nodes
Find library items in JCR nodes by either...
- Searching for UUID/IID of an object
- Browsing JCR hierarchy links
Browse library items by clicking links...
.content-staging Staging content contentRoot Default content filestore Themes, skins and CSS
Example node hierarchy.../ (icm:rootNodeType) contentRoot (icm:contentRoot) icm:libraries (icm:documentLibrary) content (ibmcontentwcm:webFolder) exampleData(ibmcontentwcm:siteArea) example (ibmcontentwcm:siteArea) test1 (webContent) element (textElement) element (dateElement)
contentRoot library items are mapped to the Authoring portlet view...contentRoot Library Content Authoring templates Presentation templates Components Taxonomies Workflow Workflows Actions Stages System Deleted items Drafts UIControls Content Site management Taxonomy Component library Authoring template Presentation template Workflow
The Node Locks field displays nodes currently locked. To view, enter the unlock access code.
The Node Information field contains:
Count children Number node children. Get IID Item ID Get References References to the library
When access codes are enabled, Node Actions are rendered.
Search the node using UUIDs, the external reference, found in SystemOut.log. JCR database tables are linked using IIDs, the internal reference. IID-to-UUID mapping is in the ICMSTJCRWSNODES table
Run XPath Query to search the JCR repository. XPath queries are translated to SQL.
For example, to query for a particular UUID, use the XPath expression...//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = '7fab41004d873d72a994fbb569f96be1']
WCM Seed List Generator
Use the Portal Search Engine WCM Seed List Generator to create search URLs for use within content sources.
Select a single library or multiple libraries, select a SiteArea, then generate the URL...
JCR nodetypes define properties and child nodes for WCM data objects...
Example child types and properties...
Items can be created, deleted, and searched for in user workspaces...
Workspace Application Description ROOTWORKSPACE WCM All libraries EVENTWORKSPACE PZN Personalization RULESWORKSPACE PZN Personalization jcr:versioning Versions All versions
Item versions can be automatically saved when published, or we can select when to save a version of the item. Items can be restored individually, or in sets that either have the same label or were versioned at, or before, a specified date and time.
Follow links on right-hand side to see actual versioned item...
Namespace prefixes, delimited with a colon (:), prevent naming collisions among items and node types that come from different sources and application domains.
Utility JSP pages
Display type with corresponding properties...
Execute SQL queries
Run SQL queries
Validate database nodes
Validate database nodes for a given IID.
Results in first section shows information about the database, including schema...
Next we get results based on the different types of tables...
Common tables validated include...
ICMSTJCRWSNODES Nodes in the repository, by UUID and IID ICMSTJCRLINKS Parent-child relationships. Used to build node path. ICMSTJCRNODELOCKS
External Locked by specific user Internal Locked by workspace or running process ICMSTJCRNODETYPES Node types. Single-value properties in a table whose name is defined by the NODETYPECOMPTYPEID column. ICMSTJCRPROPDEFS Property definitions. Multi-value properties are stored in a table whose name is defined by the MULTIVALCOMPTYPEID column ICMSTJCRGLBLPROPS Property definitions ICMSTJCRNSPREFIXES Namespace prefixes ICMSTJCRWS Workspaces in the repository
Data tables validated include...
Table ICMUT01097001 Column ATTR0000001097
Clear the following WCM Dynacaches
Export the event log...
Display Thread Stacks
Display JVM stack traces. Search by thread ID or display all threads by selecting state.
If we search for a WAITING thread, for example, we see the thread information
Count total number of WCM content items in a library
If counting a large number of items, increase session timeout...
Application Servers | WebSphere_Portal | Container Settings | Web Container Settings | Session Management
Search a node with different options like UUID, path, or query. Display children, properties, locks, access control, and references.
Clear Persistence Service Table
Drop persistence table index. Equivalent to...
Launch Text Search Utilities
JCR text search
TextSearch Index Status
Status of the search index, last run, and index directory
Reindex a node
Search Index Reorg Check
Find the number of documents deleted from an index. See: Java content repository TextSearch Support tools for IBM WebSphere Portal
Enable access codeWCM Support Engineers can provide an access code to unlock update features within the Support Tools portlet. These access codes are temporary and should be used only to repair the database problems as directed by the Support Engineer. Any other updates to the database should be done through either WebSphere Portal administration or WCM Authoring.
Once you receive and enable the access code, such as write_all, we will see a message like...
Write Access Enabled: write_all
Each step in a location path may have a predicate that selects from the node list at that step in the expression. The predicate contains a Boolean expression, which is tested for each node in the context node list. If the expression is false, then that node is deleted from the list. Otherwise, it's retained.
For example, to find all profession elements whose value is "engineer", use expression...
//profession[. = "engineer"]
Here the period stands for the string value of the current node, the same as would be returned by xsl:value-of. We can use single quotes around the string instead of double quotes, which is often useful when the expression appears inside a double-quoted attribute value, for example...
<xsl:apply-templates select="//profession[.= 'engineer']" />
To ask for all person elements that have a profession child element with the value "engineer"...
To find the person element with id p4567, put an @ in front of the name of the attribute...
To locate person elements in the document with a born attribute whose numeric value is less than or equal to 1976.
If this expression is used inside an XML document, escape the less-than sign as <, for example...
<xsl:apply-templates select="//person[@born <= 1976]"/>
If the expression appears outside of an XML document, for example, with XPointer, you may not need to escape the less-than sign.
To select person elements with born attribute values between 1910 and 1920 inclusive
//person[@born<=1920 and @born>=1910]
To select name elements that have a first_name child with the value of either Richard or Dick...
//name[first_name="Richard" or first_name="Dick"]
Predicates that evaluate to numbers are true if they're equal to the position of the context node, otherwise false. Predicates that indicate node-sets are true if the node-set is nonempty and false if it's empty. String values are true if the string isn't the empty string, false if it is.
The expression //name selects all name elements.
To only name elements that have middle_initial child element. For example, to return Afred E. Neuman, but not Charles Babbage...
Any or all of the location steps in a location path can have predicates. For example, the expression...
/people/person[@born < 1850]/name[first_name = "Charles"]
...first selects all people child elements of the root element. Then from those it chooses all person elements whose born attribute has a value numerically less than 1850. Finally, from that group of elements, it selects all name child elements that have a first_name child element with the value "Charles."
Example 1: Could not save item
Syndicating from HostA --> HostB. Getting errors.
- WebSphere_Portal log has...Could not save item with id DepRef(id:c6e601804d873d73a9a0fbb569f96be1 type: com.aptrix.pluto.site.SiteArea nonDraft:true draft:false purged:false parentId:7fab41004d873d72a994fbb569f96be1 timeStamp:1238183752676 stateUpdate: false versions:null moved: false) because it could not find its parent.
- From XPath Query Analyzer on HostA, we search for UUID...//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = '7fab41004d873d72a994fbb569f96be1']
- From XPath Query Analyzer on HostB we search for same parentID and find nothing.
- On HostB delete accounting site area and all children of accounting site area.
- On HostA, edit accounting site area and all accounting site area children. Save each to update time stamp.
- Re-syndicate using "Update" button.
Example 2: Locked WCM libraries
Vault_Content_Library on HostB is showing up as locked after restart.
- Unlock libhttp://hostb:10040/wps/wcm/connect?MOD=UnlockLibrary&library=Vault_Content_Library
- Set trace...com.ibm.workplace.wcm.services.library.*=finest
- Restart server.
- Check log files for...s_log.log(Level.FINER, "Entering deleteLibrary() for library: " + p_library.getName()); 11:14:37 AM
- Using library name derived from trace, pull up page for locked library:
Current path: [Root]/contentRoot/icm:libraries [PAC]
icm:capabilities[library.enabled=true, security.inheritance=TRUE, admin.deletable=false, admin.live.item.gatherer=7c9649004d50079a99a49b86d280d817, admin.all.item.gatherer=7c9649004d50079a99a39b86d280d817, LANGUAGE=en]
icm:created[2009-03-13T19:11:46.333Z - 1236971506333]
icm:effectiveDate[ - 0]
icm:expirationDate[ - 0]
icm:lastModified[2009-03-20T22:55:12.460Z - 1237589712460]
jcr:created[2009-03-13T19:11:46.333Z - 1236971506333]
jcr:lastModified[2009-03-20T22:55:12.460Z - 1237589712460]
- Unlock library
Example 3: Items not syndicating
Some WCM items are not syndicating from hosta --> hostb.
In hostb SystemOut.log, messages like...# grep DepRef SystemOut.log | cut -d" " -f7-100 | sort | uniq
Could not save item with id DepRef(id:127e0f804d814af39094dbb569f96be1 type: com.aptrix.pluto.site.SiteArea nonDraft:true draft:false purged:false parentId:edad42004d81483d9076dbb569f96be1 timeStamp:1238016447593 stateUpdate: false versions:null moved: false) because it could not find its parent.
On hostb, we run XPath query...//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = '(id:127e0f804d814af39094dbb569f96be1']
We disable automatic syndication and do a Rebuild.Subscriber ID: 78cac3004d90851db616f72461e8faba Name: hostbSubLive Subscriber URL: http://hostb.int.clienty.com:10040/wps/wcm/connect/?MOD=Subs Syndicator Name: hostbSyndLive Syndicator ID: 6692c7804d7209418571bf1eec0f03e1 Syndicator URL: http://hosta.int.clienty.com:10040/wps/wcm/connect/?MOD=Synd Current State: 7c9649004d50079a99a49b86d280d817:1238605822693,29b855004ba24a639624d71c959cad1d:1238601233357 Enabled: true Type Full update Result Update completed with errors Detail IWKSY1030X: Syndication completed with 5 item related errors. Subscriber's old state ICE-ANY Subscriber's new state 7c9649004d50079a99a49b86d280d817:1238605822693,29b855004ba24a639624d71c959cad1d:1238601233357 Update Summary 45736 total updates sent 45695 updates succeeded 41 updates failed Update Details 44218 item updates attempted 43881 items did not require updating 3 items created 324 items updated 10 updates failed 1518 item removals attempted 1479 items were already removed 8 items removed 31 item failed to be removed
Unlock hostb libraries...
On hosta, capture invalid items from logs...grep re-creating SystemOut.log > recreate.log
Problem uuids//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = 'edad42004d81483d9076dbb569f96be1']
//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = 'cc8647804d81494a907cdbb569f96be1']
//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = '127e0f804d814af39094dbb569f96be1']
//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = '633c58004d814c1a90aadbb569f96be1']
//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = '1a6edb004d8158799120dbb569f96be1']
//element(*, ibmcontentwcm:siteArea)[@jcr:uuid = 'b71253004d92ee058d22dfb569f96be1']
//element(*, ibmcontentwcm:webContent)[@jcr:uuid = '822a16004d93e1f7bff8ffb569f96be1'] ???
//element(*, ibmcontentwcm:webContent)[@jcr:uuid = '098123004d967f858a0bbe234711edaf']
//element(*, ibmcontentwcm:webContentLink)[@jcr:uuid = 'a93287804d93dbfabf63ffb569f96be1']
Parent id of each of the above is different on hostb. Deleted each of the above items on hostb, edit and save items on hosta, re-run syndication.
JCR explorer search on hosta//element(*, ibmcontentwcm:webCategory)[@jcr:uuid = '08da99004d92f6a28e23dfb569f96be1']
We now have a clean syndication...Result Update succeeded Detail IWKSY1029X: Syndication completed with no errors. Subscriber's old state 7c9649004d50079a99a49b86d280d817:1238705375303,29b855004ba24a639624d71c959cad1d:1238702912684 Subscriber's new state 7c9649004d50079a99a49b86d280d817:1238705787941,29b855004ba24a639624d71c959cad1d:1238709255196 Update Summary 150 total updates sent 150 updates succeeded 0 updates failed Update Details 141 item updates attempted 52 items did not require updating 12 items created 77 items updated 0 updates failed 9 item removals attempted 0 items were already removed 9 items removed 0 item failed to be removed