Saturday, September 29, 2012

Skin Analysis on WebCenter Spaces Page Template

Oracle WebCenter Spaces provides framework and resources that ready for business users to use after installation and configurations. But we all know the default look and feel of the site is really not appealing. I’ve seen prospective customers direct eyes on the WebCenter great features but step back because of the look and feel. I will have to confirm them that the site can be skinned and customized to whatever you want the site to look like. And that’s true, there are indeed great looking sites out there using sophisticated CSS and JavaScript (e.g. JQuery). Those sites are mostly designed from a HTML markup perspective and mixed with ADF components, which could make the source codes of the pages hard to read and maintain. Hard to read? Who cares, as long as it works for what the customer wants. But one of the drawbacks I’ve seen and it’s worthy to mention is it breaks the partial page rendering because of the mix of html and ADF components. Most of the pretty WebCenter public sites so far don't have the PPR feature - every navigation is a full page refresh - which doesn't surprise me (If anyone knows any public sites with PPR enabled, please let me know). Therefore, I will do a few analyses on the standard WebCenter Space page template and make a few changes on the CSS file to improve the look and feel of the WebCenter Spaces site. It might not be good enough for your needs, but should be a good start to begin with.

The default page template widely used in WebCenter Spaces is the one called “Top Navigation”. Please note there is another version of top navigation but stretchable. I will take the non-stretchable one to present as it is the default one being used. Here is the screenshot of it using the default top navigation page template. 

Page Structure

I’ve marked four regions which will represent on the page definition later on. To grab the source codes for the page template, just go to the administration section -> resources, from the ‘page template’ group, make a copy of the top navigation template and rename it whatever you like, from the edit link, you will be able to see the ‘Edit Source’ link enabled and that’s how you can grab the source code easy and quick. You can paste the source codes into JDeveloper which will help us to understand the page template structure. Here is the screenshot of the page structure:

As you can see, the page template starts with a panelGroupLayout in a scroll layout, and this is how this template is a flow layout template (fixed width of the page). For a stretchable layout, you will see it starts with the ‘panel stretch layout’.

Next you will find two Spaces tags <wcdc> and we will skip that.

Next is a decorative box component and it’s the template header part and the A region in the first image. This region contains site logo, a search inputbox region and several command/go links. You are definitely free to customize those components if you like. One thing you may consider to do is to upload your site logo to content server and put the image url to an ADF image component for the site logo. Decorative box comes with two facets: center and top. By default, the top facet doesn’t have any background (white color), but the center has some light gray background on the top edge of it. See the following:


Besides, decorative box provides an additional property for styling call “theme”.

Tips: About Theme

The purpose of themes is to provide a consistent look and feel across multiple components for a portion of a page. A common usage for themes is in a page template where certain areas have a distinct look. For example, a page may have a branding area at the top with a dark background and light text, a navigation component with a lighter background, and a main content area with a light background.
A component that sets a theme exposes that theme to its child components and therefore the theme is inherited. Themes can be set (started or changed) by the following components:

·         af:document
·         af:decorativeBox
·         af:panelStretchLayout
·         af:panelGroupLayout

By definition, themes are cascaded down through all child components. All HTML elements that are rendered by a rich component within a themed component will have the theme added to its list of style classes. Themes are not compatible with tonal styles and therefore only one method can be used per page (themes or tonal styles). A blank theme will remove the current theme, and a value of "inherit", null or not setting a theme will use the current theme. Skins are the sources of the themes. Some skins may have no themed definitions. Suggested theme names include "dark", "medium", "light", and "default".

Besides decorative box, Spaces have additional theme styling, such as “webcenter” is applied to the decorative box by default. If you want to have your own background and styling, I suggest avoiding using the decorative box simply by dragging its direct child out of the decorative box. In this case it’s ‘panel border layout’. Just drag the panel border layout out of the decorative box and comment it. You can apply your styling directly on the panel border layout.

Next component is the navigation panel region which is marked as ‘B’. The region is referring a build-in navigation task flow. To examine the source codes of it, please refer to another blog I posted here.

Next part is the content which is just a facet in a page template. It’s marked as ‘C’.

The last part is the ‘panel border layout’ component again wrapping the footer of the page template. It’s marked as ‘D’.

Styling

Spaces template uses style class for styling purpose, which comes with “WC” as its prefix. Now I will list all the style class that are used in the top navigation template by what effect it could take for styling in the page.

Here I am going to change the background to white:
/*override the background*/
.WCSiteTemplateBackground{
    background: #FFFFFF !important;
}

Change the navigation background to dark gray color:
/*change the styling of the page template top navigation*/
.WCSiteTemplateTopNavPanel {
    background: #666666 !important;
}

To change the navigation links text color to white:
af|commandMenuItem.WCSiteTemplateTopNavPanel::bar-item-text {
    color: #FFFFFF !important;
}

You can add hover effect if you want by defining:
af|commandMenuItem.WCSiteTemplateTopNavPanel::bar-item-text:hover {}


Define the background of the navigation link when it’s selected:
/*the styling when tab is selected*/
.WCSiteTemplateTopNavPanelSelected {
    background: #FF8000 !important;
}

You can define the text color to change when it’s selected by:
af|commandMenuItem.WCSiteTemplateTopNavPanelSelected::bar-item-text {}

Define the navigation link to change color when hovering:
/*the styling when mouse hover*/
.WCSiteTemplateTopNavPanel:highlighted {
    background: #7A7A7A !important;
}

Change the footer background:
/*change the background of the page template footer*/
.WCSiteTemplateFooter {
    background: #666666 !important;
}

Change the header and footer font color:
/*change the font color on the template header*/
.x106, .x107 {
    color: #FFFFFF !important;
    font-weight: bold !important;
}

By the above few CSS changes and some minor change on the template, you will find your pages could look like this:



Is it nice and neat? Besides, you won’t have your ppr navigation broken. Enjoy!

ContentiD - the iPhone app for Oracle WebCenter Content

Hey all, 

We've officially announced the release of our WebCenter Content mobile app ContentiD!

 It will have the ability to execute searches, save searches, execute saved searches, review search results, view content metadata, and review and process workflow assignments.

The app is currently in the approval queue with Apple and will be available soon. Once it is released, we will announce it right here and provide you the link for the download in the iTunes store. If you’d like to receive an email when the app is available, please send an email to info@aurionprosena.com with the subject line “ContentID Notification”.

For more information, please see: http://www.aurionprosena.com/mobile/webcenter

For more of our mobile offerings: http://www.aurionprosena.com/mobile

Thanks all!

-ryan

Tuesday, September 25, 2012

Launching News Articles Using WebCenter Navigation Model’s Display Options



Custom WebCenter Portal  Application - 11.1.1.6.0 (PS5)

One of our customers had a requirement to display news articles on their custom
WebCenter Portal. On the home page of the portal, user can see a list of news articles
and clicking on any of them, displays the full news article. User can click on a “Send
Email” link on the full news article page and type in an email id to send the link to. The
recipient can then click on the email link to view the full article. This is a very common
behavior in most of the news sites today.

In our solution, the news articles are created and stored as HTML documents in the
WebCenter Content store. Creation and management of the news articles is out of
scope for this blog.

WebCenter Portal provides many out of the box document management task flows for
displaying and managing HTML content. We used Document Viewer, for displaying the
articles (HTML content stored in the WebCenter Content) and also for providing
comments and Likes features available with Document Viewer task flow. Using the
“featuresOff” parameter, we can hide all the other features not required on the
Document Viewer task flow.

To provide additional customer specific functionality like “Send Email” and calendar
events, a custom ADF task flow was created as a wrapper for the Document Viewer taskflow.  The task flow defines an input parameter “newsId” to identify the article to be
displayed and passes this input parameter value to the document viewer task flow’s
input parameter “resourceId”.

For making the page accessible through a link in the email, WebCenter Navigation
Model‘s display options “ExternalId” attribute was used.

Here’s a step by step implementation for creating the article page and using the
navigation model to make it accessible externally.


  1. Create a custom task flow called “NewsArticle” and define input parameter as “newsId”. Map the value to #{pageFlowScope.currentNewsId}
  2. Add a view activity and map it to view.jsff file.
  3. In the view.jsff add Document Viewer task flow and map the bind parameter resourceId to #{‘UCMConnection#dDocName:’}#{pageFlowScope.currentNewsId}where UCMConnection is the name of the connection to the WebCenter Content server.
  4. Create a WebCenter page “newsarticle.jspx” under /oracle/webcenter/portalapp/pages/news. (Note: This page could be anywhere in the Web Content folder, but to make it manageable at runtime; it must reside under /oracle/webcenter/portalapp folder.)
  5. Add the custom task flow “NewsArticle” to the newsarticle.jspx page and map its input parameter “newsId” to ${facesContext.externalContext.requestParameterMap['newsId']} This code retrieves the value of the newsId request parameter and passes it to the NewsArticle Task Flow.
  6. Define a new navigation model e.g. link-navigation-model.xml under /oracle/webcenter/portalapp/navigations folder in the WebCenter project. This is mainly to avoid the page appearing on the main portal navigation. This can be also handled by using default navigation model and hiding the newsarticle node programmatically. But if there are many such pages used in the portal, then using a separate navigation model is more efficient.)
  7. Add the newsarticle.jspx page to the new navigation model by opening the navigation model and dragging and dropping the newsarticle page in the model.
  8. Select the page in the model and click on the plus sign under URL Attributes and select ExternalId. Specify the Display Value as “MyNews”.
This completes the display part. Let's take a look at the link creation.

  1. “ExternalId” is “an ID to enable a direct reference to a node in the navigation model from a static link in the page”. This attribute can also be used with a non-default navigation model to make a node in the non-default navigation model accessible through static links.
  2. The URL to use is /faces/wcnav_externalId/MyNews?wcnav.model=/oracle/webcenter/portalapp/navigations/ link-navigation-model&newsId=<newsId>
    Where
    MyNews – is the externalId attribute value, specified for the newsarticle node.
    wcnav.model value is the full path to the non-default navigation model (without the xml extension)
    newsId – is the id of the news article currently being viewed by the user. In our case, the navigation from the home page to full news page was implemented using “Resource Action Handling” framework.
  3. One challenge we faced, in implementing this solution, is that the Oracle documentation has the parameter name as “wcnav.modelPath” where as the actual parameter required to specify the model path is “wcnav.model”. We found it the hard way, but hope this blog helps others.
  4. Append host, port and web context root information at the beginning of the URL to form an absolute URL. Send the URL in an email body using Java Mail API.
  5. When the recipient clicks on the link, WebCenter framework can identify the page by looking at the wcnav.model and ExternalId attributes. The article id passed in the “newsId” request parameter identifies the article to be displayed, which is passed to the Document Viewer task flow.

    By using WebCenter navigation model’s display option attribute “ExternalId”, we can make a WebCenter page accessible externally. Using a simple request parameter approach and a Document Viewer task flow, we can display news articles that are accessible from the external URLs.
Note: Document Viewer task flow displays some additional document information like 
name of author and last updated date. This can be easily hidden by using skinning
techniques.

Wednesday, September 19, 2012

Considerations on WebCenter/ADF Performance


This post is originally posted here.

Performance for WebCenter/ADF is always a hot topic. For every application (ADF web apps, WebCenter Portal/Spaces apps, or others), you will be ended up to deal with it sooner or later. Sooner is of course better, it's recommended to be considered at the time the project is plotted out since you will need to consider your budget for hardware/software acquisitions. I have experienced with couples of clients that requested to tune performance after the application went to production which is still OK but not the ideal time, simple because there are so many restrictions dealing with performance tuning after it went on production. The performance no doubt is a broad topic. This article will try to include a checklist of areas you need to bear in mind for the matter of performance in the WebCenter/ADF world, but will not go into very detail on each section.

Performance is limited by many factors, such as hardware resource and the application architecture. The CPU type/speed, physical memory directly determines if there is any bottleneck to maintain the application performance at an expected level. The application architecture defines the interaction between applications, middleware components, databases and various business domains. It is a potential high-level constraint for the application performance if the application architecture is not laid out for best practice in performance, scalability and high availability. It is also important for business users or stock holders to understand user expectations. One way to set the expectations is to perform a capacity planning with assessment of system performance goals. Such information can be obtained to help understand the goals: anticipated number of concurrent users, amount of data and consistency, target CPU/memory usage, number and size of requests, network latency, etc.

Ideally, for a typical WebCenter/ADF application, consider the following setup in terms of performance, scalability and availability.
·                     Clustered Managed Servers
·                     Cache Servers (e.g: Web Cache Server)
·                     Hardware Load Balancer (and/or software load balancer)
Setting up the clustered environment will help performance by distributing loads over several managed servers. Besides, JVM garbage collection impact can be reduced and the response stability can be improved.

1. Caching 

Caching is another broad topic and can be addressed alone for another article. Basically caching can be implemented on various components on various layers. Caching can be implemented in the following areas:
·                     Client browser caching
·                     Web Cache Server caching
·                     Weblogic Server caching
·                     Database caching
Client browser caching and compression can be enabled to cache the compressed requested objects locally.  This way it saves the trips to fetch the cached objects from the server and performance can be greatly improved. To configure, Apache Http Server needs to be installed (Oracle Http Server is one type of Apache Server). Caching is enabled by defining the http header field "Cache-Control". Refer to here for details. The syntax could be:

Header set Cache-Control "cache-request-directive, cache-response-directive"

Apache uses mod_deflate module to compress. Refer to this link for details. Here is a list of MIME type that can be compressed:
·                     text/plain
·                     text/xml
·                     application/xhtml+xml
·                     text/css
·                     application/xml
·                     image/svg+xml
·                     application/rss+xml
·                     application/atom+xml
·                     application/x-javascript
·                     text/html
A file with extension ".conf" needs to be created for the caching and compression. The file needs to be put under $WebTier_Directory/instances/instance_name/config/OHS/ohs_name/moduleconf to be taken by OHS when the next time server starts.

Oracle Web Cache is the primary caching mechanism provided with Oracle Fusion Middleware. It improves the performance, scalability, and availability of Web sites that run on Oracle Fusion Middleware by storing frequently accessed URLs in memory. To use Web Cache, it needs to be installed and configured. You will need to configure the memory size for caching, define the caching rules, define the expiration policies, etc. Once the configuration is done, restart the web cache server and the caching activity can be monitored by the request statistics and popular requests. From there, you can also tell whether your caching rules are caching efficiently otherwise update or add new caching rules.

There are other caching available, like enable coherence on the weblogic server and database caching which will not be covered in this article. I would like to blog something on coherence in a later effort.

2. JVM Tuning 

JVM Tuning is another broad topic. Jrockit JVM is the default one for Fusion Middleware currently. It is the first JVM to adopt adaptive memory management system whose behavior is based on runtime feedback. The foremost advantage of automatic memory management is its contributions to the speed of the software development cycle. An additional advantage is that an adaptive memory manager may pick the appropriate garbage collection strategy for an application based on its current behavior, appropriately changing the number of garbage collection threads or fine turning other aspects of garbage collection strategies whenever needed. The question for which garbage collection algorithms is suitable for your WebCenter/ADF cannot be answered without investigation and analysis. A best way to analyze is to test your application with experiments. Try with different combination of GC policy, heap size, nursery size, and other parameter if applicable (eg: pause time target). Jrockit mission control provides a great graphic way to monitor the JVM performance. You could watch the JVM performances online or record the activities by flight recordings.

3. Application Tuning

Source codes with quality will be wrote with considerations of performance. There are so many places you can mess around with performances. Code refinement or code reviews by peers from time to time are always good practices. 

3.1 ADF BC/Faces Tuning

If you are working on an ADF project using BC as the model layer, there are a few declarative options to tune VO and AM pooling. ADF application should always be tested to ensure it's activation-safe by disabling AM pooling.

There are many tips on this sub-topic. I would refer to this Oracle document for details - Oracle ADF performance tuning.

3.2 WebCenter Portal/Spaces Application Tuning

There are numbers of factors that could impact the WebCenter Spaces/Portal performance inside application configurations. The following configuration files can be examined:
• adf-config.xml - Stores design time application-level settings, such as which discussions server or mail server the WebCenter Portal application is currently using.
• web.xml - Stores initialization parameters, custom tag library locations, and security settings.
• connections.xml - Stores connection details for WebCenter Portal services.

CSS/JavaScript can be heavily used in WebCenter portal/spaces applications. It's recommended to centralize those files to reduce the possibilities of duplicate usages. Since every page is based on a page template, the page template is a good start to be examined for any code refinement. Here is just an example list of items could be checked when examining a page.

a. Consolidate inline styling into one CSS file by converting all inline styles into class style.
b. Centralize CSS files if multiple CSS files exist
c. Consolidate individual JavaScript functions (from template, individual pages and custom task flows) into one centralized JavaScript file.
d. Identify and remove duplicate/redundant CSS, JS, ADF and HTML code (this is common in CSS especially).
e. Check the security permissions on the user visibility and rendered attributes for ADF component tags to make sure they are not making incorrect or duplicate calls.
f. Examine the following improvement points in the page source codes:
  1. Component id attribute value length – if longer than 7 characters then change it less.
  2. Client component attribute set to ‘true’ – This should be set to false most of the time unless there is a specific need for the component to be added in the DOM at the render time.
  3. Immediate attribute – determines load behavior of the button to button (load immediately upon page load, or lazy ‘after’ page load).
  4. Other property attributes – any other unnecessary or incorrectly configured attributes and ADF tags.

g. Search for render=”false” and visibility=”false” and remove if not needed.
h. Check all code – including the page definition for the template for any external references to resources and task flows that are not being used.

4. Others

4.1 OID/LDAP authenticator can be tuned and I would refer to this blog - Tuning Weblogic LDAP Authenticator Providers.

4.2 CDN is now supported in PS5. Check out 
this link for a How-to example.
Also, Logs can be helpful to determine performance issues.

To end, performance tuning is not one time job. Performance should be considered at the beginning of a project (before development) and carried on multiple times during development. After the development is done, stress test should be run at least once to make sure the application performance meets the business's expectations. 

Thursday, September 13, 2012

WebCenter Content - 101 syllabus


There are a number of posts in the forums looking for starter information. Don't worry. There are many resources out there that can be easily accessed online.

The first place to go is the application's documentation. It is a resource that should be each and every person's first line of defense. At least read through the table of contents before you start to code.

WebCenter Content Documentation Home:
http://www.oracle.com/technetwork/middleware/webcenter/content/documentation/index.html

The WebCenter community page also has dozens of resources that are publicly available:

http://www.oracle.com/technetwork/middleware/webcenter/content/community/index.html

A key asset is the 2006 "Definitive Guide to Stellent Content Server Development" written by Bex Huff: http://www.apress.com/9781590596845

And, a number of sample components can be found from the Downloads page:
http://www.oracle.com/technetwork/middleware/webcenter/content/index-092832.html

and, also on the "Sample Code" page:

http://www.oracle.com/technetwork/indexes/samplecode/webcenter-contentsamples-1352729.html

Each of those links can be found from the product's homepage on Oracle.com. There are many, many resources out there, but you're only going to get out of them what you put in!

The Oracle team and a number of people in the community (forums & blogs) have put a vast amount of information out there for everyone's reference and knowledge. All you have to do is search and absorb.

Once you've put some of your own time into your skill set, then the next step is putting together a forum post or support ticket. Each will be similar in content. You'll need to supply a basic amount of information so that others will have some idea of your situation (remember that we haven't been over your shoulder for the last 10 hours debugging with you! :) )


  • Your basic environment (os, application version & build #, application server version, whether you're using a web server or any other application layers, database version and type, and any other pertinent information)
  • Your requirement - what you're expecting the system to do
  • Your Error - the error message, screenshots, full stack traces, etc
  • Your Use-Case - how did you trigger the error. is it regular or is it random? do some cases work, but other fail? Was this working in the past, but recently stopped working? 

Always error on the side of too much information.

I bet that there's at least a 50% chance that you'll uncover your own solution when you go through that last scan of due diligence!

The links and information above will send you on your journey.

Good luck!
-ryan

Friday, August 3, 2012

WebCenter Content - Instance Architecture


A common question is,  “Can I have a single WebCenter Content instance to serve my enterprise?”


First, an instance is defined as an installation of WebCenter Content (WCC) with a unique URL location, database, and file system.  All of these attributes are defined during the installation process.   Instances cannot share a database or a file system.[1]  A clustered install does not count as separate instances because they share the same URL, the same database, and the same file system.

This post also uses the term “application”.  The term application is used to define a WCC implementation scope that is targeted to a specific user community, line of business, or set of capabilities.  A WCC instance may support multiple “applications”.  For example an instance may be configured with the appropriate metadata, security, components, etc. to support an HR policies and procedure “application”.  It may also be configured to support a marketing collateral application.

So, the answer to the question posed above is “perhaps”, but there are many things to consider when deciding if you should use one single instance or deploy multiple instances.  For enterprises of any significant size or complexity the answer will almost always be that multiple instances are effective and recommended.

This blog post covers specific topics to consider when making the choice about how many instances should be deployed, and why.  This blog post also discusses the hardware infrastructure best practices associated with multiple instance architectures.

1.       Multiple Instance Considerations 

This section enumerates the most common topics of discussion when determining an instance-architecture.  These are presented without value qualification in that any of these may or may not be important to your organization.

1.1      Architectural Considerations

1.1.1          Internal, DMZ, External


Some applications require access by external parties.  This is most common for web content management related projects, but is not limited to those.  This architecture will require a DMZ presence of some sort, which may be a reverse proxy – or it may mean having a UCM instance within the DMZ.  This can be a significant architectural difference from applications that are intended to be entirely internal – such as HR or legal documents.  In addition, external applications may require the use of HTTPS, while internal applications do not.

1.1.2          Capacity Requirements


Some applications are extremely heavy users of resources, including CPU, I/O, database, and network.  Applications that fall into this category are often of an archiving nature, but not always.  For example, an application may be developed that captures a constant stream of “documents” coming from a mainframe print spool.  We often describe such an application as being “high volume”.  There are a number of other reasons an application may be “high volume”, including a significantly large consumer population, a significant publishing process, or a significant ingestion rate.  Such applications will frequently be put on dedicated infrastructure so that they can be tuned and configured completely independently from other WCC instances and applications.

1.1.3          Contribution and Consumption


It is a best practice in web content management deployments to use two instances – one for contribution and one for consumption.  This is a best practice for several reasons. 

First, it separates the resource usage (CPU, I/O, Network, etc.) of the contributors from the consumers.  The authoring and editing of content, workflow and approval processes, document conversion, and other processing is isolated from the consumption environment – which is likely to be tuned for optimal performance for consumers.

Second, it provides a separation of security models.  The internal contribution instance will often have a finer grained security model (definition of who can edit what) than is required in consumption.  In fact, it is often the case in consumption environments that everything is converted to public and read-only (although certainly not always).

Third, it allows for a separation of security integrations.  The internal contribution instance will likely be integrated with a corporate directory such as LDAP or Active Directory.  The external consumption instance may not be (again, another level of security) or may be integrated with a separate LDAP that contains external consumers.

Fourth, it allows the disabling of contribution activity on the consumption server so that it is generally more secure.

Fifth, it can provide a level of failover support in the event of a considerable “disaster” since the entire site is operational on the contribution server as well.

1.1.4          Service Level Agreements



Different applications will likely have different overall value to the business or organization.  That is to say, some applications may be deemed mission critical, while others are not.  Mission critical applications will often require redundant components throughout the architecture as well as tier-1 storage.  The infrastructure for such applications can be costly and may not be necessary for all applications.  Other instances may be departmental or have lower service level agreements in terms of recovery times.  Such applications can be deployed on instances with fewer redundant components and lower tier storage to save cost.

1.1.5          Geography


Many businesses are geographically disbursed, and are sometimes comprised of multiple data centers.  It is usually the case that applications are best deployed “near” the user community to achieve the best performance.  This also means that usually application support and administration is “local”.

1.2      Functional Considerations

1.2.1          Incompatibilities


Each instance of WCC has its own set of components that are deployed and its own set of system-wide configuration settings.  Sometimes these components and/or configuration settings are not compatible with different applications.  For example, it is possible to configure an instance of WCC to use what is referred to as “Fast Check-In”[2].  This streamlines the check-in process to bypass some of the normal processing in exchange for speed.  This includes bypassing the check for workflow, bypassing the check for notifications, etc.  This behavior is likely not desirable in an application that is used for general document management.

These types of incompatibilities may include such things as document conversion definitions; rendition set definitions, components, security integrations, retention policies, customizations, and many others.

1.2.2          Application “Personalities”


While less concrete than other considerations discussed, this will often have a bearing.  Instances are sometimes established around the application capabilities they intend to support.  For example, a number of applications that tied to scanning, fax, and other types of similar ingestion, that require workflow routing, are often a good candidate for combining on an instance.

However, disparate applications such as records management vs. web content management may not share much in common.  This will be evident in the architecture, the components required, the metadata, the security, and many other facets of the instance.

1.3      Metadata Considerations

1.3.1          Metadata Differences


While it is a good idea (and strongly recommended) to have a corporate-level governance structure around taxonomy and classification (metadata) it often a very bad idea to implement the entire corporate metadata model in any WCC instance[3].   In fact, it is a best practice to implement a given application with a targeted and pragmatic set of metadata to streamline the application, resources used, and the user interface.

To this end, two different applications may have very different metadata models – even through they both fit into the corporate taxonomy structure.  Applications that do not share a reasonable amount of metadata may be adding unnecessary resource usage, maintenance, and complexity to an instance.

1.3.2          Metadata Complexity 


Some applications have complex and even custom metadata behavior that is necessary to support the requirements for the application.  Often this may create complexities or incompatibilities with other applications on the same instance.

1.3.3       Metadata Size


The number of metadata fields, whether from Oracle provided components or custom, can have an impact on an instance. There is a hard limit to the number of metadata fields that can be defined.  This limit is set by the record size limitation of the underlying database.  While this is fairly significant, if reached it is a hard limit.  Breaking into multiple instances may be required as this limit is neared or reached.

1.4      Security Considerations

1.4.1       Security Model


Much like the metadata model, different applications are likely to have unique security model requirements.  Also like metadata, it is strongly recommended that a governance structure around managing security models is established.  Continuing the thought, it is also like metadata in that if two applications have significantly different security models there may be limited value in combining them on an instance.

1.4.2       Security Integrations and Provisioning


Applications may also be unique in their source of user provisioning.  Some applications may use a corporate directory, others may use a directory designed for external users, some my combine these, some may use the internal content server provisioning.   All of these are valid – but the deployment on a specific instance may create an incompatibility with other applications.

Likewise, some applications may deploy custom security integrations – either at the filter level (SSO integrations for example) or at the provider level.  Again, the security customizations done for a specific business requirement (an application or set of applications) may not be applicable to other applications.

1.4.3       Complexity


Another consideration is the complexity or methods of security deployed on an instance.  For example, the base security model may be extended with additional capabilities such as ACLs (Collaboration for example), Supplemental Markings (RM), Classified Security (RM), and custom security processing.  The “NeedToKnow” component, for example, changes the security processing within UCM.  Again, these types of security configurations may not be compatible with all applications you wish to deploy.

1.4.4       Performance


The security model, and any custom or product extensions to the security model, can have a direct impact on performance.  For example, Oracle generally recommends that an instance have 50 or fewer security groups defined.  The reason for this is because the content server takes a user’s roles and converts that to a “security clause” that gets appended to searches.  While the content server generally does a nice job of optimizing the search, if the security model is sufficiently large or complex it can slow the search response times.  Certainly database tuning, indexes, partitions, and other methods can be used to tune and improve search performance, it is still a good idea to plan on having as lean a security model as possible.

1.4.5       HIPPA, Auditing, and Other Regulations


In some cases instances may be segregated to be compliant with regulations.  For example, in some industries external audits of systems are confined to the systems containing relevant data.  If a system contains considerably more data than the target of the audit, the “other” data can be subject to discovery.

1.5      Organizational Considerations

1.5.1       Ownership


Occasionally it is the case that different business units, departments, or lines of business operate independently.  This sometimes also means that individual lines of business have autonomy on managing IT infrastructure and applications.  In cases like this it is common for WCC instances and applications to be deployed “close” to the owning organization.

1.5.2       Administrators & Maintenance


Application administrators and server/network maintenance may be divided within the business based on the line of business, it may be geographically, or some other mechanism that maps better to a multi-instance architecture.

2.       What are the Advantages to Multiple Instances? 

While this is likely not an exhaustive list, here are some of the commonly considered advantages.

  • Better performance

    Instances, when they are properly planned and designed to contain “like” or “similar” applications, will have a security model and a metadata model that is leaner.  Likewise, each instance will be operating on smaller data sets (number of content items and database sizes).  Both of these points taken together means applications that generally perform better.
  • Better Resource Utilization

    Instances that are operating efficiently and performing well will by definition be using resources well.  However, the total utilization of the hardware, storage, and other components is also a consideration.  By deploying multiple instances on shared infrastructure (see the Best Practice section below) it is possible to also better utilize the underlying infrastructure.  Since presumably each independent instance is operating efficiently, the net result is a higher throughput of service requests overall (for everything running on the shared infrastructure) and good utilization of the infrastructure overall.

    The negative way to look at this is instances that have overly complex security or metadata models and/or large data sets.  These instances will have lower throughput as the service calls, particularly searches, may require more time and resources.  The end result is slower response times with lower overall infrastructure utilization[4]. 
  • Easier Management

    This topic is specifically in regard to the metadata model, security model, and rules / profiles.  By having divided the applications into smaller and less complex instances, the maintenance time required is reduced and the interactivity (impact of changes) to the environment is reduced. 
  • Better User Experience

    As more and more applications are combined into an instance, it generally becomes necessary to make the user interface more and more generic to encompass all of the applications.  With similar applications grouped per instance, it is possible to better tailor or customize the user interface to better serve the consumers.

3.       What are the Disadvantages to Multiple Instances?

Below are some of the common objections and disadvantages to multiple instances.  It often these disadvantages that are weighed against the considerations and advantages to determine a final instance architecture.

  • Maintenance and Administration

    One of the common objections to multiple instances is the necessity to administer and maintain each instance separately.  This is a fair consideration.   It is true that each instance will need to be individually administered.  There are methods that can be used to mitigate the impact of this (such as Master / Proxy configurations), but in the end managing each instance has a cost associated.
     

    In fact, after reading the considerations for instances you may be wondering why not have one instance per application, and the “cost” for distributed administration is a consideration. 
  • Search

    Another common objection to multiple instances is that now users must search within individual instances to find things and thus don’t truly have an “enterprise view” of all the content.  First, it is true that each instance maintains its own search index, such that searches within a particular instance execute against the content stored in that instance.

    However, there are 3 important things to note. 

    First, it is often the case that applications and instances are split in such a way that it doesn’t really make business sense for most users to be searching across multiple repositories.  Experience has shown us, having done hundreds of implementations, that this requirement will usually either be deleted or can be significantly reduced to some target users or groups.

    Second, assuming it is necessary to search across multiple instances in some cases, this can be done by connecting the desired instances using WCC’s “Enterprise Search” capability.  This provides the ability to execute a single search across multiple WCC instances.

    Third, it may be that searching across multiple WCC instances is not even enough.  Perhaps the real requirement is to be able to search “anywhere” in the enterprise – including WCC instances, shared drives, SharePoint, web sites, etc.  For use cases like this an enterprise search tool, such as Oracle Secure Enterprise Search, should be used in addition to WCC.
  • Access by other instances

    A key capability of WCC is the notion of content reuse.  This is the ability to use a piece of content (perhaps in various renditions) across a number of consumption channels.  A concern with multiple instances is often that content that needs to be reused in another instance.  This may require replication of the content or “remote access” to the content.  Again, this is an important consideration.  While WCC provides tools to make this easier (replication, metadata mapping, retention, web services, etc.) any content reuse scenarios across instances will require careful planning.


[1] Instances can share the same database SID (database instance) but require unique schemas.  Likewise, they can share the same storage solution but must have a unique file system allocation within the storage solution.
[2] Note that recent versions of the software include this ability as a separate service, not an instance configuration variable.
[3] Increased maintenance with no business value add, increased database usage and complexity, increased complexity of rules and profiles, increased frustration and complexity for users, etc.

[4] The utilization of the database may be very high as it is processing through the larger and more complex data sets.  The rest of the infrastructure may be underutilized.

4. Best Practice Instance Architecture 

To this point we’ve discussed many of the considerations for determining appropriate instance architectures.  While the term “best practice” is not really applicable[1], there is an “appropriate practice” for your organization based on your requirements, infrastructure, organization, and the other considerations.

However, there are patterns to successful enterprise deployments of WCC that we can certainly draw knowledge from.  Some of the patterns have been hinted at.

Avoid the extremes of having either one instance for your enterprise or having 1 instance per application.  Neither of these approaches will likely produce optimal results for your organization in the long run.  The “best” instance architecture is going to be in the middle, where applications share instances when it makes the most sense.

Another pattern is the deployment of multiple instances on the same hardware.  It is entirely possible to install and run multiple WCC instances on the same server (or servers for clustered environments).  These multiple instances can share a single web logic environment[2] or each can have their own.  The former is more common.  There are several advantages to deploying instances in this “stack them on the same server(s)” approach (depicted in the diagram below).




First, this approach can be used to get good utilization out of the servers.  Instances can be added to the infrastructure and traffic balanced via the load balancers to tune the overall environment.  This is like a server consolidation method that allows for getting better value out of your hardware.

Second, this approach takes advantage of the way that Oracle licenses the software.  Because the licensing is by CPU, there are no restrictions on the number of instances you can run on server(s) once the CPUs have been licensed.

Third, this approach (if multiple servers are used) allows for flexibility in leveraging the capacity of the servers.  In other words, a smaller traffic instance with no HA requirements may run on one of the servers, while larger traffic instances can be spread across all the servers.  If the instances are installed such they span all the servers in the cluster, it is possible to do this load balancing dynamically using load balancer configurations.

Fourth, this allows system-monitoring tools to also be consolidated in the sense that they can monitor the servers in the cluster rather than a wider distribution of servers.

Finally, this allows for affective scaling.  If additional capacity is needed it can be added by adding either additional server(s) (horizontal scaling) or by adding addition CPU / Memory capacity to the existing servers (vertical scaling).  The existing applications can take advantage of the new capacity, as can additional instances.

5. Conclusion

Careful planning, with all the considerations in mind, is the best approach to deploying an enterprise content management instance infrastructure that will work for your organization.

Oracle has many customers that have done successful enterprise deployments that resemble the best practices described herein, and to them we are grateful.



[1] The term “best practice” assumes some common starting point that all implementations will fall under.  This is simply not the case, and it is necessary to take into account all of the considerations listed in this document – as well as others that may be unique to your organization.
[2] Each instance must have a unique web root