Documentum D2 Components and Architecture

August 16, 2019 Leave a comment

Over a year ago we know how EMC use to manage Documentum providing all the users and developers access to two of the most popular public forums for Documentum : Documentum Support Forum and Documentum Developer Forum, today with OpenText moving their content slowly  to OpenText community forum and restricting access only to their customers  , the Documentum forums became inaccessible now.

Some of the key foundational products of Documentum like the xCP, xDB, Info Archive and D2 are still widely used by many customers and is scaling with regular updates in features. This is going to be my first blog about D2, that I will be trying to post in with all the works I have been doing since past 3 years.

So, let me start with explaining the basics of D2, its components and how its architecture looks like:

Documentum D2 consists of two components:

  • D2 Client: It’s a web-based application for users that provides the ability to interact with content in one or more repositories. D2 Client allows users to:
    • Personalize the user interface using widgets and workspaces.
    • Perform searches across one or more repositories.
    • Create, import, edit, modify, export, and delete content.
    • Organize content manually and automatically using relationships, metadata, and so on.
    • Use content lifecycle and workflow processes as constructed by administrators.


  • D2 Configuration: It’s a web-based application, hereafter known as D2 Config, for administrators to use to configure settings such as automated content-handling processes and background settings for D2 Client. For example, administrators use D2 Config to configure automatic renaming and placement of created or imported content. Other settings include content lifecycle and workflow, workspace layouts, and available widgets.

D2 Architecture

D2 Client consists of three layers:

  • The Browser layer denoting the web browsers that are used by end users to connect to D2. D2 uses standard HTTP requests for all communication between the browser client and the D2 web application. For requests for static resources such as images, D2 uses GWT RPC calls backed by the D2FS services layer, to retrieve dynamic data
  • The web application server layer corresponds to the installation and configuration of D2.war which mainly includes most of the presentation logic, including the GWT and GXT libraries, custom interface controls, static web resources, and pass-through services to allow web browsers to invoke the D2FS services. The layer does not link to the DFC or DFS client libraries because all communication between the D2 web application and the Documentum repository passes through the D2FS interface.
  • The Documentum Content Server layer that consists of the installed DAR files. Includes most of the Documentum types necessary for storing configuration objects in the repository. Configuration objects are subtypes of d2_module_config or d2_moduledoc_config, depending on whether the configuration is stored as object metadata or as XML content.

D2 Config is comprised of three layers:

  • The Browser layer denoting the web browsers that are used by end users to connect to D2 Config.
  • The web application server layer that corresponds to the installation and configuration of D2–Config.war and the D2-Widget plug-in. This includes most of the presentation logic, including the ActiveX controls.
  • The Documentum Content Server layer.

How do you install D2?

D2 installation includes three DAR files:

  • D2–DAR.dar
  • D2–Widget-DAR.dar
  • Collaboration_Services.dar

Extending D2

D2 offers the certain methods of extending D2 by using the D2 API:

  • Building integrated solutions by using the D2FS services to interact with the D2 web application.
  • Using Open Ajax Hub (OAH) and JavaScript to create external web applications that can be manipulated as iframes (External Widgets) from within the D2 web application.
  • Using D2 Java packages to create and configure D2 plug-ins that add custom actions or override existing D2 services.

I have used Eclipse for building the code.

What is D2FS and what is the significance of D2FS? Can you give few examples?

The D2FS API is exposed from the D2 web application as a set of SOAP services. The D2 SDK package contains the sample Java classes that use the Java stub libraries to invoke and modify the D2 processes and data. We can generate Java Stub Libraries to Call D2FS Using SOAP. The D2 SDK package comes with quite a few example java classes, if I recollect there are:

  • CheckinContentExample which Demonstrates how to use getCheckinUrls() to Check out content, Request a checkin URL.
  • DestroyExample Demonstrates how to destroy content, and
  • ImportAndUploadDocumentExample – this tells how to use createproperties() to import and upload content.

To name a few.

What is OAH?

OAH or Open Ajax Hub (OAH) is a standard JavaScript library for publishing and subscribing to web applications. We can use OAH to:

  • Publish to a channel to send a message.
  • Subscribe to a channel to listen for a message.

Hope this is helpful, in the next post I will try to describe the customization that you can do with D2 and its various available plugins.

D2 Best Practices and all about Widgets

August 27, 2019 Leave a comment

There are several best practices that we can follow and to list below are a few key important ones:

  • Improving Content Transfer Performance
  1. Enable compression of content:
  2. Navigate to and open <install path of D2 Client>/WEB-INF/classes/
  3. Set the applet level properties parameters
  4. Increase the socket buffer size
  • Enabling Compression at the Application Server
  1. Navigate to and open <TOMCAT_HOME>/conf/server.xml
  2. Configure the threshold of the content size and the type of content to be compressed
  • Optimizing Performance for Widgets and Large Numbers of Content
  1. Navigate to and open <install path of D2 Client>/WEB-INF/classes/
  2. Configure a maximum result size for the Doclist widget, User and Group widgets, Thumbnails widget , Repository Browser or Taxonomy widgets.
  • General Tuning Tips

On Oracle Server:

  • Modify the Oracle sessions and processes parameters.

On the Content Server:

  • Modify server.ini and set the concurrent_sessions parameter.

On the web application server:

  • Modify the Java heap size, maximum threads, and GC policy.

Configuration Files

Navigate to <install path of web application server>/webapps/D2–Config/WEB-INF/classes for the D2 Config configuration files:, & logback.xml

Navigate to <install path of web application server>/webapps/D2/WEB-INF/classes for the D2 Client and D2FS configuration files:

applicationContext.xml, settings. Properties, logback.xml,, D2FS-trust. properties

Note: The names of configuration files are case-sensitive.

How do you configure a menu item for a Template Plugin?

We can configure a menu item using D2 Config to allow end users to call the custom action.

  1. Log in to D2 Config and navigate to Go to > Menu D2 to open the D2 Client menu configuration page.
  2. Add a new menu item to the menu in which you want the button to appear.
  3. We then fill out the form for the new menu item.
  4. Click Save.

Facet Search

The facets widget allows the search refinement in a dynamic facet list. Facets are grouped by category and ordered based on the configuration or advanced search settings.

D2 uses the EVENTS to communicate between widgets, Custom Widgets


Internal Widgets





How to set up an external Widget?

I used the D2 implementation of OAH, called D2-OAH.js which provides the binding between a web page and the surrounding D2 application. D2 Config refers to these web pages as external widgets, which are hosted in an iframe within the D2 Client web application. How to setup depends on which external widget we are trying to setup – like there is UpdateDoclist widget:

  1. Extract UpdateDocList folder from D2
  2. Stop the web application server.
  3. Copy the UpdateDoclist folder to the <web application server>/webapps/ folder.
  4. Start the web application server.
  5. Log in to D2 Config:
  6. Navigate to File > Import configuration from the menu bar.
  7. Import
  8. Navigate to Widget view > Widget from the menu bar.
  9. Select the UpdateDoclist widget.
  10. Modify the Widget url field to match the location of the web application server that we have deployed.
  11. Log in to D2 Client and add the new widget to your workspace.

This is pretty much the standard procedure.




A more detailed information about D2 Widgets can be found in the D2 Administrative Guide.

Happy Reading!!!

D2 Jobs and Monitoring

August 26, 2019 Leave a comment

Hello Readers !!!! In my previous post we have learned about the D2 Security aspects and the workflows & lifecycles, as mentioned I wanted to write something on the several  jobs that are available in D2 and how to monitor them, at the end of this post I will try to mention a little information on the Session timeout settings.

D2 Monitoring


D2 Jobs






Session timeout and cookie


Enjoy Reading!!!


D2-Security ,Workflows & Life Cycles

August 23, 2019 Leave a comment

D2 Security Model

Inheritance models can be configured for both security and properties to automatically set and/or enforce permissions and metadata values based on a document’s context.


D2- Workflows

In D2Config, we only able to configure the already created workflow i.e from Process builder or workflow manager.


Differences between Workflows and Lifecycles


D2 Lifecycles Vs Documentum Lifecycles

Documentum lifecycles are generally linear, with promotion to the next state defined by a set of entry criteria. D2 lifecycles are more flexible, allowing different transition paths between states and a more extensive set of entry and exit conditions and actions. Either type of lifecycle can be used in D2, although mixing D2 and Documentum lifecycles for the same content is not recommended.



Will come back with some more posts on D2, hopefully D2 jobs next time.

Have a great weekend 🙂

Custom Plugins in D2 and Deployment – Contd..

August 22, 2019 Leave a comment

We can create and configure custom plug-ins using the Java classes and the resources that are packaged with the D2 API framework to:

  • Add features as custom actions.
  • Modify existing features by changing the pre-processing, post-processing, and the overriding D2 services.

Deploying D2 Plug-ins:

  1. Create the plug-in .jar file.
  2. Copy the plug-in .jar file to the <install path of D2>/WEB-INF/lib/ folder.
  3. Restart the web application server.
  4. Verify the plug-in installation by logging in to D2 Client and navigating to Help > About.

D2 Bin

The Recycle Bin feature manages the cancellation and deletions of documents by using a standard recycle bin approach.

The D2-Bin plug-in adds a recycling-bin approach to managing document removal in D2. If D2-Bin is:

  • Not installed, D2 permanently removes content when an end user deletes content.
  • Installed, D2 moves deleted content to an electronic recycling bin, which allows end users and functional administrators to view, permanently remove, and restore content.

Navigate to D2-Bin > Options from the menu bar.


Use C2 to extend PDF functionality of D2 with regards to adding:

  • Extra pages: you can add one or several pages at the beginning, end, or after a given page. These pages can contain content properties or variables.
  • PDF layers: you can add headers, footers, or images to all or part of documents.
  • Watermarks: you can add image or text watermarks to all or part of documents above or below text and as transparent images.
  • Dynamic pages: you can add dynamically-constructed pages, such as signature pages, gradually over the course of the lifecycle of the PDF document. Create dynamic pages in XML format so that tables can be managed based on their size. which are linked according to configurations when the document is viewed, printed, or exported.

You can use C2 to secure and apply controls to PDF documents when they are distributed out of the repository. The main functions are:

  • Ensuring only secure versions are provided when viewing, exporting, and printing.
  • Controlling printing using print counters and adding the ability to print with the note designating the recipient. D2 audits the controlled prints using the information provided by the end user when submitting the content for printing.

D2 automatically generates an XML containing the elements of the table of contents. Create and import an XSL for formatting the table of contents when viewing, printing, or exporting content in C2.

The XML uses parameters within an object in the root.

 The C2 plug-in creates a c2_rendition event in the dmi_queue_item queue to generate the PDF rendition. After completing the request and generating the PDF, D2 marks the item as dequeued but does not clear the dmi_queue_item events.

DELETE “dmi_queue_item” OBJECTS WHERE “dequeued_date” <DATE(’01/01/2013’) AND “delete_flag” = true


Use O2 to allow management of properties transfer between D2 and Microsoft Office documents as well as between .eml and .msg email messages.

Configuring Microsoft Office for O2 – Create a macro.


Thanks for your emails and various requests, Many of you have been requesting me to share information about the D2 Security and workflow features, I will write something based out of my experience in my next blog.

Syncplicity & Custom Plug-ins actions

August 21, 2019 Leave a comment

In the Previous post, I tried to explain the various customization and plug-ins that are available/offered with D2 in this post I will detail my experiences with the custom plug-ins , how to override a D2 Service and how we handle actions in D2. Let me start with a lighter concept with D2 before I jump onto the custom plugins and actions…


Files can be shared directly from D2 to Syncplicity, allowing content to make available to users inside and outside an organization on multiple devices.  Folders may be synced from a menu option or from a workflow task. An icon is shown on the folder/content to indicate that the content has been synced. Automatic shares can be set up by an administrator and limited to specific document types.  Shares can also be manually initiated by authorized users.

Custom Plug-ins Custom Actions





Creating and Configuring a Custom Plug-in – Creating a New Plug-in Using the Template

  1. Rename the Your Co-PluginName project.
  2. Rename com.yourdomainhere.yourplugin in Eclipse to your domain namespace and package name for each package in the plug-in template.
  3. Optionally, rename and ; If you rename the files, you must edit to reflect the name change.
  4. Edit and change project.version.file to reflect the package structure and the plug-in properties file name.
  5. Edit
  6. Add the plug-in implementation classes. For example: * and *
  1. Re-run .\build\build.xml to rebuild the plug-in.

How do you create and handle actions, custom actions in D2?

  1. Create a Java class in the <project folder>/src/com/<your namespace>/<plug-in name>/webfs/services/custom/ folder.
  2. Import the d2fs resources:

import java.util.List;

import com.emc.d2fs.dctm.plugin.IPluginAction;


import com.emc.d2fs.models.attribute.Attribute;

  1. Implement IPluginAction: public class <name of the class> implements IPluginAction
  2. The class must contain a method that has at minimum the following format:

public List<attribute> <methodName>(D2fsContext context) throws UnsupportedEncodingException, DfException, D2fsException;

  1. After building and installing the plug-in, create a menu button in D2 Config to allow end users to perform the custom action.

Throwing Exceptions

We can use Exception () and D2fsException () to report exceptions or errors encountered in Service extension or Custom Action code back to D2 and the end user. The following example shows how to use D2fsException ():

public List<Attribute> getCustomDownloadURL(D2fsContext context) throws UnsupportedEncodingException, DfException, D2fsException

Setting Up D2 Service Overrides

  1. Determine the <name of the service> : To determine the <name of the service>, replace the prefix I with D2. For example, IExportService uses the D2 service D2ExportService.
  1. Create a .java file named <name of the service> for the services class to configure the process in the <company name>-<plug-in name>/src/com/<your namespace>/<plug-in name>/webfs/services/<name of the service package>/ folder.
  2. Create and name the class <name of the service>Plugin. For example, the sample uses the service D2ExportService to name its class D2ExportServicePlugin.
  1. Extend the service class with the <name of the service> and implement the ID2fsPlugin interface. For example, the sample declares the class:

public class D2ExportServicePlugin extends D2ExportService implements ID2fsPlugin

The ID2fsPlugin interface forces the implementation of two methods:

  • getFullName: Returns the full plug-in name with its version number. The method is called by the About dialog box in D2.
  • getProductName: Returns the plug-in name to determine whether the plug-in should be executed based on the D2 configuration matrix.
%d bloggers like this: