Configure Coherence for Oracle WebCenter Portal Framework Content Presenter Task Flow

Introduction

This guide aims to give you complete configuration overview for how to configure Coherence Cache for Oracle WebCenter Portal Framework Application using the Content Presenter Task Flow.

This document is intended for WebCenter Portal Application administrators who have to improve performance by configuring Coherence Cache for Content Presenter Task Flow.

For more information about the Coherence Cache for Content Presenter have a look at the following link:

http://docs.oracle.com/cd/E21764_01/webcenter.1111/e12405/wcadm_documents.htm#BABHFCJH

Main Article

The Content Presenter and the Content Management Interoperability Service (CMIS) are delivered out of the box with in-memory Coherence cache. This cache is NOT enabled by default. You can enable it by adding the content-coherence-cache-config.xml file to the application class path of the WebCenter Portal Application. This guide describes how to configure the cache when you deploy applications based on WebCenter Portal Framework.

If you use Bundle Patch 6 on WebCenter 11g Patchset 5 (11.1.1.6.6) and above you have to add one more cache mapping to the content-coherence-cache-config.xml file:
<cache-mapping>
<cache-name>binaryContentTypeCache.*</cache-name>
<scheme-name>ContentBinaryCaches</scheme-name>
</cache-mapping>

The Content Coherence Configuration file below uses the distributed cache mode in combination with local cache mode depending on the type of objects to be cached. Here the example Coherence cache file to use for the configuration:

<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
<cache-config>
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.nodeUidCache.*</cache-name>
      <scheme-name>ContentNodeCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.nodePathToUidCache.*</cache-name>
      <scheme-name>ContentNodeCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.securityInfoCache.*</cache-name>
      <scheme-name>ContentNodeCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.typeNameCache.*</cache-name>
      <scheme-name>ContentTypeCaches</scheme-name>
    </cache-mapping>
   <cache-mapping>
      <cache-name>repo.ucm.typeNamesCache.*</cache-name>
      <scheme-name>ContentTypeCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>binaryCache.*</cache-name>
      <scheme-name>ContentBinaryCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.searchCriteriaCache.*</cache-name>
      <scheme-name>ContentSearchCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name> repo.ucm.indexedFieldsCache.*</cache-name>
      <scheme-name>ContentSearchCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.securityUserCache.*</cache-name>
      <scheme-name>ContentSecurityCaches</scheme-name>
    </cache-mapping>
    <cache-mapping>
      <cache-name>repo.ucm.profileTriggerValueCache.*</cache-name>
      <scheme-name>ContentProfileCaches</scheme-name>
    </cache-mapping>
  </caching-scheme-mapping>

  <caching-schemes>
    <distributed-scheme>
      <scheme-name>ContentNodeCaches</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-ref>BM_ContentNodeCaches</scheme-ref>
        </local-scheme>
      </backing-map-scheme>
      <backup-count>0</backup-count>
      <autostart>true</autostart>
    </distributed-scheme>

    <distributed-scheme>
      <scheme-name>ContentTypeCaches</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-ref>BM_ContentTypeCaches</scheme-ref>
        </local-scheme>
      </backing-map-scheme>
      <backup-count>0</backup-count>
      <autostart>true</autostart>
    </distributed-scheme>

    <distributed-scheme>
      <scheme-name>ContentBinaryCaches</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-ref>BM_ContentBinaryCaches</scheme-ref>
        </local-scheme>
      </backing-map-scheme>
      <backup-count>0</backup-count>
      <autostart>true</autostart>
    </distributed-scheme>

    <distributed-scheme>
      <scheme-name>ContentSearchCaches</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-ref>BM_ContentSearchCaches</scheme-ref>
        </local-scheme>
      </backing-map-scheme>
      <backup-count>0</backup-count>
      <autostart>true</autostart>
    </distributed-scheme>

    <distributed-scheme>
      <scheme-name>ContentSecurityCaches</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-ref>BM_ContentSecurityCaches</scheme-ref>
        </local-scheme>
      </backing-map-scheme>
      <backup-count>0</backup-count>
      <autostart>true</autostart>
    </distributed-scheme>

    <distributed-scheme>
      <scheme-name>ContentProfileCaches</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-ref>BM_ContentProfileCaches</scheme-ref>
        </local-scheme>
      </backing-map-scheme>
      <backup-count>0</backup-count>
      <autostart>true</autostart>
    </distributed-scheme>

    <local-scheme>
      <scheme-name>BM_ContentNodeCaches</scheme-name>
      <expiry-delay>5m</expiry-delay>
      <high-units>100</high-units>
    </local-scheme>

    <local-scheme>
      <scheme-name>BM_ContentTypeCaches</scheme-name>
      <expiry-delay>30m</expiry-delay>
      <high-units>50</high-units>
    </local-scheme>

    <local-scheme>
      <scheme-name>BM_ContentBinaryCaches</scheme-name>
      <expiry-delay>5m</expiry-delay>
      <high-units>1000000</high-units>
      <unit-calculator>
        <class-scheme>
          <class-name>com.tangosol.net.cache.SimpleMemoryCalculator</class-name>
        </class-scheme>
      </unit-calculator>
    </local-scheme>

    <local-scheme>
      <scheme-name>BM_ContentSearchCaches</scheme-name>
      <expiry-delay>5m</expiry-delay>
      <high-units>50</high-units>
    </local-scheme>

   <local-scheme>
      <scheme-name>BM_ContentSecurityCaches</scheme-name>
      <expiry-delay>10m</expiry-delay>
      <high-units>50</high-units>
    </local-scheme>

   <local-scheme>
      <scheme-name>BM_ContentProfileCaches</scheme-name>
      <expiry-delay>1h</expiry-delay>
      <high-units>100</high-units>
    </local-scheme>
  </caching-schemes>
</cache-config>

The cache entries are described in the following documentation:

http://docs.oracle.com/cd/E21764_01/webcenter.1111/e12405/wcadm_documents.htm#BABEDDBI

You have to put this file into the application classpath. If you use put the file in the managed server class path or node manager class path it will NOT work.

Step by Step Installation Process

Step 1: Create JAR file with the Coherence Cache Config file

Create JAR file which contains the example content-coherence-cache-config.xml shown above. For how to create JAR files follow the tutorial from the Java documentation here:

http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

You will use this JAR file to put it inside your WebCenter Portal Framework Application. As mention above this works only if this JAR file is part of the WebCenter Portal Framework Application class path.

Step 2: Create WebCenter Application EAR Lib folder

To put the created JAR file into the APP-INF/lib you have to update your project settings:

  • From the JDeveloper WebCenter Portal Application Project click on Application->Application Properties.

  • From the new window select Deployment. From the deployment profile select the EAR profile you want to use and then click on Edit button.

  • From the new window select File Groups and then click on New button. From the new opened window select Packaging and type a name for the file group as shown bellow. Then click OK to add your new packaging file group. Click then OK again the save the changes.

  • Create the APP-INF/lib folder into your project. Go to the file system where you create the WebCenter Portal Application Project as shown bellow

  • You have to create the APP-INF/lib folder under the src/ folder:

 

  • Inside the newly created APP-INF/lib folder you can place your JAR file with the Coherence Cache configurations.

  • To make sure that the file will be picked go back to JDeveloper and open the Application Properties again by clicking on Application->Application Properties and then click on Deployment. Select the EAR Profile which you used to add the Packaging File Group and click on Edit button. Inside the new window you should see that your APP-INF/lib folder is selected and inside there, there is also the JAR file you copied.

  • WebCenter Portal Framework Application is ready for deployment now. Redeploy your application and bounce it once (load your application once in an browser) to make sure that the configurations are loaded.

Step 3: Check your configuration

You have to open your application once to make sure that the Coherence Configuration is loaded. Best approach would be to open a page where the content presenter is used.

To be able to see the Coherence MBean in Enterprise Manager you should set -Dtangosol.coherence.management=all. To see the Coherence log set -Dtangosol.coherence.log=<filelocation>/coherence.logThe coherence.log file will be automatically created from Coherence Cache once Content Presenter is in use.

Make sure that you open the application once in the browser then open your <managed_server>_diagnosting.log file and search for coherence inside. If you see message like this:

[APP: AviTrustSamplePortal#V2.0] Unable to load Coherence configuration file content-coherence-cache-config.xml. Using in-memory (local) caches.

… then it means that your application did not find the configuration file. The reason for this is that the JAR file was not inside the application classpath. In this case you maybe used the Managed Server Classpath which is not working. You have to place the JAR file inside the application classpath as described above.

 

If you don’t see the message above you can go for the next step and look for the Coherence configuration inside the MBean.

To do so open your Enterprise Manager and go to the application configuration like shown bellow:

 

From the Application Deployment click on the System MBean Browser to have a look in the MBeans. Inside the MBean Tree search for the word <coherence>:

You should be able to see the configurations as shown bellow. If Coherence does not appear under the Application Defined MBeans then the coherence configuration was not successful.

Another very good why to check if the cache works is to have a look inside the WCC request audit. It will help you to analyse if queries were fired against the Content Server.

Login as Administrator to Webcenter Content.

After you login in as administrator select System Audit Information and from the Active Sections select only system and requestaudit as well as Full Verbose Tracing checkbox.

Click on Update button to update the configuration.

Click from the upper right menu on View Server Output to trace the Content Presenter queries to the Content Server. If there is some output then click on Clear button to clean it.

If you open a example page where the content presenter is used, like as shown bellow:

You can see after that in the audit log the queries used by the content presenter to get the information:

Refresh the page by using F5 or by clicking on the browser refresh button. There’re should be no new queries visible in the audit log anymore, since the content presenter should use the coherence cache at the second load.

Step 4: Configuration for Cluster Environment

If you run your application in cluster environment you have to make sure that the coherence is configured to work inside the cluster. If you have two managed servers in one application cluster you can configure following parameters in the start-up arguments. If Node Manager is used to start the Managed Servers, you can put the argument in the Server Start argument option.

First Server:

-Dtangosol.coherence.management=all
-Dtangosol.coherence.log=server_path/coherence.log
-Dtangosol.coherence.wka1=server1.mycompany.com
-Dtangosol.coherence.wka1.port=8088
-Dtangosol.coherence.wka2= server2.mycompany.com
-Dtangosol.coherence.wka2.port=8088
-Dtangosol.coherence.localhost= server1.mycompany.com
-Dtangosol.coherence.localport=8088

Second server:


-Dtangosol.coherence.management=all
-Dtangosol.coherence.log=server_path/coherence.log
-Dtangosol.coherence.wka1=server1.mycompany.com
-Dtangosol.coherence.wka1.port=8088
-Dtangosol.coherence.wka2=server2.mycompany.com
-Dtangosol.coherence.wka2.port=8088
-Dtangosol.coherence.localhost=server2.mycompany.com
-Dtangosol.coherence.localport=8088

If the two servers are running on the same physical machine, you have to make sure that they use different ports.

Comments

  1. Ravi Polishetty says:

    Hello,

    Thank you for the info, It is very useful article, We have clustered environment, Implemented Coherence as explained in this blog. should we able to see two managed server instances in MBean Browser->Cache ? We see only one server instance shown in MBean Browser and second one doesn’t shows up in MBean Browser.
    Though we have implemented as you mentioned in the blog, all the calls are going to UCM server, Any idea ?

    Thanks
    Ravi

Add Your Comment