Hi there AppWorks fans,
Welcome to a new installment of AppWorks tips.
In this installment we’ll make a Content Management System available as storage location for our data. The CMS is called ‘Documentum’ and is globally used at enterprise companies. Documentum saves data in a structured way in 1 location called a ‘repository’. All data in a repository is saved as an ‘object’ where the metadata is saved in a relational database and the content stored on a file storage.
AppWorks has connectors available to connect several CMS systems and Documentum is one of them. AppWorks is an Enterprise Service Bus that makes working with processes really easy but saving data in a structured way is something else. So, both systems working together is the best solution of all.
Let get right into it…
Start your AppWorks VM and make connection with the MobaXTerm client with the in the samples created user ‘otadmin’ and related password ‘admin’.
Go to the ‘Download’ section on the OpentText support site and start looking for ‘Documentum Content Server’. We go for the latest 16.4 release (on CentOS 64-bits with PostgreSQL)
Accept the license and start downloading the file ‘content_server_16.4_linux64_postgres.tar’
Upload the downloaded file to the image in the home directory of in our case ‘/home/otadmin’
Now we need to extract the file to some nice folder structure. Create a new folder with
mkdir content_server_16.4_linux64_postgres and go into the folder with the
cd command. Now extract the file
tar xvf ../content_server_16.4_linux64_postgres.tar
This post will help you install Documentum, but make sure you also have the documentation available somewhere. This can again be found on the OpenText support site under the documentation section. Make sure you search for ‘Documentum Content Server’. The main PDF you need for now is the installation guide ‘Documentum Platform and Platform Extensions 16.4 Installation Guide’ and the release notes ‘Documentum Server 16.4 Release Notes’.
The release notes refer to the ‘Product Compatibility Matrices‘ where you can find an excel sheet ‘OpenText Product Compatibility Matrix (Current Maintenance).xlsx’ that covers all the compatibilities with the several software package. Nicely to have a look, but not required for now.
In this ‘’Product Compatibility Matrices’ page there is also an important like to ‘Documentum Compatibility Matrices’ -> ‘Documentum’ -> ‘Documentum Platform - Compatibility’. Here you can find the PDF ‘Documentum Server_16.4.pdf’ that give you more inside on the compatibility specific for Documentum related software. Not required, but nice to know that it is available!
You have this privilege when you use the ‘otadmin’ user that we introduced in the posts on this site.
The EPEL repository is required for this, but already installed in other posts…These commands should run fine.
Just install and don’t ask…I know…Sometimes it’s just what it is with Linux.
sudo yum install tcl -y
sudo yum install expect -y
Documentum uses an installation UI. Like we also saw for the AppWorks installation. You are covered when you use the MobaXTerm client! Make sure you EXPORT DISPLAY points to the correct value.
Make sure your VM has the 64-bits architecture with
uname -m where the result should be
Make the $DOCUMENTUM and $DM_HOME variables available and extend the $LD_LIBRARY_PATH with the Documentum bin directory. You can use these steps:
- Create a directory:
sudo mkdir /opt/documentum
- Own it to the otadmin user
sudo chown otadmin /opt/documentum/
- Edit the ~/.bash_profile of the ‘otadmin’ user:
sudo vi ~/.bash_profile
- When done reload your profile via the command:
- Check if it’s all OK via:
env | grep DM_HOME
Meat the PostgreSQL version from the compatibility matrix. For us the for AppWorks used ‘PostgreSQL 11.1.0 64-bits’ should be fine although 9.4 or 9.6 is recommended.
Make the PostgreSQL ODBC 64-bits connector available with these steps:
sudo yum install postgresql-odbc.x86_64 -y
- Check if the availability is OK:
ls /usr/lib64/psqlodbcw* -l
- Check the odbc.ini location
- Create a new odbc.ini
sudo vi /etc/odbc.iniwith this content:
Do a fix command
sudo ln -s /usr/lib64/libsasl2.so.3 /usr/lib64/libsasl2.so.2
Create a mandatory directory for the repository and own it to the ‘postgres’ user
sudo mkdir /var/lib/pgsql/11/data/db_aw_repo_dat.dat
sudo chown -R postgres:postgres /var/lib/pgsql/11/data/db_aw_repo_dat.dat
‘aw_repo’ will be the name of our Documentum repository!
Edit the services table
sudo vi /etc/services and add these 2 lines at the end of the file
dm_repo1 47625/tcp # 16.4 Repository native connection
Tomcat version….Maybe for DA, but not required!
We will run an extra tomcat instance local our computer outside the VM as it makes the image rather heavy and is not needed for our AppWorks instance
Documentum has several clients available, but the Documentum Adminstrator is for managing the environment, but we’ll see there are other tools also.
Make sure you have 20 follow up ports available for the JMS installation (standard port 9080)
sudo netstat -ltnp | grep 90you can check if ports are available
AppWorks uses a java instance on port 9090, so our JMS should run on 9060!
Now the major step of this blog post.
Go to your extracted installation files:
Give the bin file execution permission
chmod +x serverSetup.bin
And execute the magic command:
Don’t run with the sudo command as otadmin should be the owner of it all!
Graphical installers are not supported by the VM. The console mode will be used instead…You need to make sure your DISPLAY variable is correct!
Now just follow the steps of the wizard and make sure to update the port number from 9080 to 9060!
Accept the terms and hit Next
Use password ‘admin’ and update the port to 9060!…Then hit ‘Next’
Now hit that bright and shining ‘Install’ button
Leave the ‘No’ option and click ‘Next’
Choose the ‘Configure later’ and click ‘Done’
As you can see in the last screenshot run this command:
Now the software installation part is done. Next is setting up a connection broker and a brand-new repository.
This is the component that runs as a broker between the repositories (if you have multiple) and the end-users. It makes it possible to only show those repositories related for the correct users. You always need one. Also, if you only run one repository like we do for our VM.
So, it’s time the run the server configuration program at:
Select the ‘Connection broker’ and click ‘Next’
‘Add a connection broker’ and click ‘Next’
Choose the ‘Native’ option for now and click ‘Next’
Native is fine for our development image, but it’s also fine to use the ‘Native and Secure’ option
Give the broker a name and leave to port as is. Click ‘Next’
And click ‘Next’
And ‘Next’ again with the ‘Finish configuration’ option
You might find some startup issues for the appserver instance. This has to do with IPV6!
Look in the logging of the appserver instance
tail -f /opt/documentum/wildfly9.0.1/server/DctmServer_MethodServer/log/server.log
vi /opt/documentum/wildfly9.0.1/server/startMethodServer.sh and add
-Djava.net.preferIPv4Stack=true to the JAVA_OPTS
JAVA_OPTS="$USER_MEM_ARGS -Djboss.server.base.dir=$JBOSS_BASE_DIR -Djava.net.preferIPv4Stack=true"
Now start this appserver again to see if things run better
/usr/bin/nohup /opt/documentum/wildfly9.0.1/server/startMethodServer.sh &
Might be the case you also need to start the connection broker again with
Logging for the connection broker can be found here:
tail -f /opt/documentum/dba/log/docbroker.win-5skkmburvo7.mydomain.com.1489.log
Let’s create a new file
sudo vi /usr/lib/systemd/system/dm_connectionbroker.service and add this content:
Reload the services daemon:
And enable the service:
systemctl enable dm_connectionbroker.service
Also Start/Stop/Status are available now:
systemctl start|stop|status dm_connectionbroker.service
This is the component that will store all our information. Everything you save in a repository is called on object. An object contains 2 parts! This first part is the metadata which is stored in the database. The second part in the optional content which is saved on the file storage.
It’s time the run the server configuration program for the second time:
Select the ‘Repository’ option and click ‘Next’
‘Add a new repository’ and click ‘Next’
Leave the AEK passphrase ‘empty’ and disable the ‘Lockbox’ option. Hit ‘Next’
This screen is fine. Hit ‘Next’
Also, this is fine. Hit ‘Next’
Fill in the form like this, but might be anything you like except for the service name which should be the same as added to the
- Repository name: aw_repo
- Repository ID: 1234321
- Description: AppWorks Repository
- Service name: dm_repo1
Make sure the ‘Connection Broker’ is running and hit ‘Next’
Select the ‘Native’ connection mode (as configured in the Connection Broker setup) and click ‘Next’
Let the setup create the database information. Hit ‘Next’
Provide the passwords. In my case ‘admin’ and hit ‘Next’
Leave as is. Hit ‘Next’
Provide the ‘dm_bof_registry’ user account with a password. We use the same password as the username. Hit ‘Next’.
The dm_bof_registry user is part of the Business Object Framework. BOF make it easy to extend Documentum functionality!
Hit the almost final ‘Next’
Hit the final ‘Next’ for ending the repository creation part.
Give this command
sudo vi /usr/lib/systemd/system/dm_repository.service and add this content to the file:
Reload the services daemon:
Enable the service:
systemctl enable dm_repository.service
systemctl start|stop|status dm_repository.service
Logging can be found here
tail -f /opt/documentum/dba/log/aw_repo.log
Yes…It’s the appserver instance created during the ‘Connection Broker’ setup!
Give the command
sudo vi /usr/lib/systemd/system/dm_jms.service with this content:
Reload the services daemon:
Enable the service:
systemctl enable dm_jms.service
systemctl start|stop|status dm_jms.service
The Wildfly appserver console can be reached on the URL: http://192.168.56.107:9060
Now it’s time to create a client on our local machine (not the VM). We will not cover this part in this post as it is not needed for the AppWorks platform!
For Documentum we can use the Documentum Administrator client to login on our repository. This client can be downloaded also from the support side. It’s a .war file which can be deployed on a tomcat instance. Make sure you run the correct java version with the correct tomcat version. After the .war deployment you need to make sure the ‘dfc.properties’ of the clients point to the correct repository. Here is an example for my installation.
It could be that both the repository and connection broker service are not reachable from outside the VM. Run these commands:
sudo netstat -ltnp | grep 1489
sudo netstat -ltnp | grep 47625
tcp 0 0 127.0.0.1:1489 0.0.0.0:* LISTEN 5231/./dmdocbroker
Then 127.0.0.1 is your problem here. It should be 0.0.0.0 or the correct IP.
For the connection broker you can start it like this to solve the problem
sh /opt/documentum/dba/dm_launch_default -host 192.168.56.107
For the repository you need to edit the server.ini
vi /opt/documentum/dba/config/aw_repo/server.ini and add
host = 192.168.56.107in the [SERVER_STARTUP]
host = 192.168.56.107in the [DOCBROKER_PROJECTION_TARGET]
After restart of both the services they should be reachable from outside the VM.
It is not required to have an end-user client because Documentum provides some basic tooling to view things in the repository. These tools are the IDQL and IAPI tools.
Documentum Query Language
DQL is a subset of SQL with specific Documentum functionality. So, we can do all kind of query statement like a SELECT or on UPDATE. A DQL reference guide can be found in PDF format on the support side.
Application Programming Interface
API is the low-end communication from client to server. With this tool you can call specific function on 1 object. Like a SET or a CHECKOUT. Also, for API there is a reference guide available.
Both tools run under the JVM delivered with Documentum (version 8), but for AppWorks we installed JVM version 11 and pointed also to this version from the $LD_LIBRARY_PATH variable with $LIB_PATH. For this to work you need to modify the $LD_LIBRARY_PATH variable so it only finds the Java 8 libraries:
After this change you should be able to run
Type ‘quit’ to exit
Type ‘quit’ to exit
export LD_LIBRARY_PATH=$LIB_PATH:/opt/opentext/AppWorksPlatform/defaultInst/lib:/opt/documentum/product/16.4/bin to get back to the original settings!
Also make sure that your ‘dfc.properties’
vi /opt/documentum/config/dfc.properties is pointing to the correct IP address or hostname
Should all be fine from the initial installation now.
As a last step we will do some tweaking as I see the VM we’ve created gets a bit slow on the resources it was initially applied too. That was 9Gb of RAM with 2 CPU’s.
You can add extra memory to the machine, but we also tweak the services of in this case Documentum.
Let’s start with the JMS service
vi /opt/documentum/wildfly9.0.1/server/startMethodServer.sh and update the memory settings:
USER_MEM_ARGS="-Xms512m -Xmx512m -Xss256k -XX:+DisableExplicitGC"
Restart the service
systemctl stop|start dm_jms.service
Then we have the Repository service
vi /opt/documentum/dba/config/aw_repo/server.ini and update these values
method_server_threads = 3
Restart the service
systemctl stop|start dm_repository.service
Documentum can use an SMTP server for sending out mail. If it sends out a mail is configured in the server.ini with the option
mail_notifcation = true. When not configured TRUE is the default value.
Only Documentum and specific the repository is not yet aware of an SMTP server. So, we’ll add one to the service with the IDQL tooling.
Start IDQL as explained before and run this DQL query:
SELECT r_object_id, object_name, r_host_name, mail_method, smtp_server FROM dm_server_config
Give a ‘go’ command after the
<Enter>to run the query!
You’ll see the SMTP server is empty. Let’s update it:
UPDATE dm_server_config OBJECT SET smtp_server = 'localhost'
The ‘mail_method’ can be left empty as the default value will be ‘dm_event_sender’. This one is pointing to a script located here:
Then the installation owner ‘otadmin’ needs to have a mail address to send information to
SELECT r_object_id, user_name, user_address FROM dm_user WHERE user_name = 'otadmin'
You’ll see the mail address of the user is not valid. Update can be done like this:
UPDATE dm_user OBJECT SET user_address = 'firstname.lastname@example.org' WHERE user_name = 'otadmin'
Restart the repository to apply the changes!
Now regularly check your mail for the ‘otadmin’ user with the already configured Thunderbird client from another post.
Not needed, but when %^^$&% hits the fan on database level
sudo -u postgres psql
\lfor listing the databases
\c dm_aw_repo_docbaseto connect to the database
DROP DATABASE dm_aw_repo_docbase;
select * from pg_tablespace;
DROP TABLESPACE dm_aw_repo_docbase;
select * from pg_roles;
DROP ROLE aw_repo;
And that give us a ‘DONE’ we can be proud of. We have made Documentum available for our AppWorks platform where we can save our data in a structured way. Next step is to connect these 2 platforms to each other. Have a great day and I see you in the next post. Please let me know your thoughts in the comments and weather you would like to get more information about the end-user clients for Documentum.
Don’t forget to subscribe to get updates on the activities happening on this site.