Opentext iHub integration with Documentum

One of the new features of Documentum 16.4 is the integration with Opentext’s iHub analytics software. If you don’t know what iHub is, it’s something like a preconfigured set of reports (if you’ve used Jasper Reports, it’s quite similar) which now comes with a bundled OOTB reports for Documentum.

I’ve been trying to set it up in a test environment just to check it out but I’ve been having some problems.

Even though the installation is quite straightforward for some reason it refused to work, and it was impossible to login into the application. After discarding me as the problem, I pinpoint the error to the login info sent to Documentum.  This information is configured in the dctm_ihub_user_map.json file, which the documentation states, has the following format:

If you want to have a separate user mapping between Documentum and iHub user, then add a new entry (in bold) as in the following example:
{
“DEFAULT VOLUME”: {
“name”: “Default Volume”,
“users”: {
“DEFAULT_USER”: {
“name”: “Administrator”,
“password”: “”
381
Documentum Administrator
},
“dmadmin”: {
“name”: “dmadmin”,
“password”: “”
},
“dctm_testuser”: {
“name”: “ihub_testuser”,
“password”: “testpassword”
}
}
}
}

I was sure something was wrong there, so I decompiled the classes that read that file and, oh surprise:

DvrIPSE.IPSEUser localIPSEUser = (DvrIPSE.IPSEUser)localMap.get(paramString2.toUpperCase());

I guess I’ll be filling a “documentation bug”…

Opentext Documentum 16.4 PostgreSQL Developer Edition

This is a step-by-step guide to install Documentum 16.4 in a Linux environment with PostgreSQL 9.6 (as we don’t have/I haven’t found the compatibility matrix, I’ve used the same version bundled in the docker image).

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 12

Guest:
CentOS 7 x64 25GB HD 4GB RAM 2 cores
PostgreSQL 9.6
Documentum 16.4

VM Creation

Mount the CentOS 7 DVD image, boot the machine and follow the steps. You can choose to let EasyInstall do the work for you. I used minimal package install to save resources, named the machine vm-dctm16.4, configured the network and set the root password as well as a “dmadmin” user.

OS Configuration

  • Install required packages:

[dmadmin@vm-dctm164 ~]$ sudo yum install bash-completion kernel-devel rng-tools.x86_64
[dmadmin@vm-dctm164 ~]$ sudo yum install bash-completion kernel-devel rng-tools.x86_64 policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans expect tcl
[dmadmin@vm-dctm164 ~]$ sudo yum group install X\ Window\ System “Development Tools”
[root@vm-dctm164 vmtools]# yum install open-vm-tools.x86_64

  • Stop and disable the firewalld service:

[dmadmin@vm-dctm164 ~]$ sudo systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[dmadmin@vm-dctm164 ~]$ sudo systemctl stop firewalld

  • Configure the entropy and allow http connections through selinux:

[dmadmin@vm-dctm164 ~]$ sudo /sbin/rngd -b -r /dev/urandom -p /dev/random
[dmadmin@vm-dctm164 ~]$ sudo setsebool -P httpd_can_network_connect_db 1

PostgreSQL Configuration

  • Install required packages:

[dmadmin@vm-dctm164 ~]$ sudo yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7.4-x86_64/pgdg-centos96-9.6-3.noarch.rpm
[dmadmin@vm-dctm164 ~]$ sudo yum install postgresql96-server postgresql96-contrib

  • Init the DB:

[dmadmin@vm-dctm164 ~]$ sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

  • Enable and start the PostgreSQL service:

[dmadmin@vm-dctm164 ~]$ sudo systemctl enable postgresql-9.6
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.6.service to /usr/lib/systemd/system/postgresql-9.6.service.
[dmadmin@vm-dctm164 ~]$ sudo systemctl start postgresql-9.6

  • Configure the postgres user:

[dmadmin@vm-dctm164 ~]$ su – root
[root@vm-dctm164 ~]# su – postgres
-bash-4.2$ psql
postgres=# \password postgres
postgres=# \q
-bash-4.2$ exit
logout

  • Configure PostgreSQL:

[root@vm-dctm164 ~]# vi /var/lib/pgsql/9.6/data/postgresql.conf
listen_addresses = ‘*’
port = 5432

[root@vm-dctm164 ~]# vi /var/lib/pgsql/9.6/data/pg_hba.conf
host    all             all             127.0.0.1/32            md5
host all all ::/128 md5
host    all             all             vm-dctm164              md5

  • Restart PostgreSQL service to apply the changes:

[dmadmin@vm-dctm164 /]$ sudo systemctl restart postgresql-9.6

phpPgAdmin Configuration

  • Install required packages:

[dmadmin@vm-dctm164 /]$ sudo yum install phpPgAdmin httpd

  • Configure phpPgAdmin:

[dmadmin@vm-dctm164 /]$ sudo vi /etc/httpd/conf.d/phpPgAdmin.conf

# Apache 2.4
Require all granted
#Require host example.com

# Apache 2.2
Order deny,allow
 Allow from all
# Allow from 127.0.0.1
# Allow from ::1
# Allow from .example.com

[dmadmin@vm-dctm164 /]$ sudo vi /etc/phpPgAdmin/config.inc.php
$conf[‘servers’][0][‘host’] = ‘’;
$conf[‘extra_login_security’] = false;
$conf[‘owned_only’] = true;

  • Restart httpd service to apply the changes:

[dmadmin@vm-dctm164 /]$ sudo systemctl restart httpd

Now you should be able to login to the console from http://vm-dctm164/phpPgAdmin/

ODBC Configuration

  • Install required packages:

sudo yum install postgresql96-odbc.x86_64 unixODBC.x86_64

  • Configure .ini files:

[dmadmin@vm-dctm164 /]$ sudo vi /etc/odbcinst.ini
[PostgreSQL]
Description     = ODBC for PostgreSQL
#Driver         = /usr/lib/psqlodbcw.so
#Setup          = /usr/lib/libodbcpsqlS.so
#Driver64       = /usr/lib64/psqlodbcw.so
#Setup64                = /usr/lib64/libodbcpsqlS.so
Driver = /usr/pgsql-9.6/lib/psqlodbcw.so
Driver64 = /usr/pgsql-9.6/lib/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage       = 1

[dmadmin@vm-dctm164 /]$ sudo vi /etc/odbc.ini
[MyPostgres]
Description=PostgreSQL
Driver=PostgreSQL
Database=postgres
Servername=vm-dctm164
UserName=postgres
Password=dmadmin
Port=5432
Protocol=7.4
ReadOnly=No
RowVersioning=No
ShowSystemTables=No
ShowOidColumn=No
FakeOidIndex=No
UpdateableCursors=Yes
DEBUG=Yes

  • Test the connection:

[dmadmin@vm-dctm164 /]$ isql -v MyPostgres
+—————————————+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+—————————————+
SQL> quit

Documentum server

  • Create folders:

[dmadmin@vm-dctm164 opt]$ sudo mkdir documentum
[dmadmin@vm-dctm164 opt]$ sudo chown dmadmin.dmadmin documentum
[dmadmin@vm-dctm164 opt]$ mkdir documentum/product
[dmadmin@vm-dctm164 opt]$ mkdir documentum/product/16.4
[dmadmin@vm-dctm164 opt]$ mkdir documentum/shared

  • Set up environment variables:

[dmadmin@vm-dctm164 ~]$ vi ~/.bash_profile
DOCUMENTUM=/opt/documentum
export DOCUMENTUM

DM_HOME=$DOCUMENTUM/product/16.4
export DM_HOME

POSTGRESQL_HOME=/usr/pgsql-9.6
export POSTGRESQL_HOME

PATH=$PATH:$DM_HOME/bin:$POSTGRESQL_HOME/bin:$HOME/.local/bin:$HOME/bin
export PATH

LC_ALL=C
export LC_ALL

LD_LIBRARY_PATH=$POSTGRESQL_HOME/lib:$DM_HOME/bin:$DOCUMENTUM/java64/JAVA_LINK/jre/lib/amd64/server:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

  • Reserve ports for services:

[dmadmin@vm-dctm164 opt]$ sudo vi /etc/services
dctm164         50000/tcp               # dctm 16.4 repo
dctm164_s       50001/tcp               # dctm 16.4 repo

  • Create symbolic link for later (configuration program):

[dmadmin@vm-dctm164 opt]$ sudo ln -s /usr/lib64/libsasl2.so.3.0.0 /usr/lib64/libsasl2.so.2

  • Configure limits.conf:

[dmadmin@vm-dctm164 opt]$ sudo vi /etc/security/limits.conf
dmadmin – core -1

  • Run the installer:

[dmadmin@vm-dctm164 cs]$ tar xvf content_server_16.4_linux64_postgres.tar
[dmadmin@vm-dctm164 cs]$ chmod 777 serverSetup.bin
[dmadmin@vm-dctm164 cs]$ ./serverSetup.bin

image7

image2

image3

image4

image5image6

Docbroker and repository

At this point, you can choose to run dmdbtest to make sure everything works. This versions seems to work with the OOTB libs from postgres and you don’t have to get the unstripped libs from the docker release.

  • Create the tablespace file for the repository (dctm164):

[dmadmin@vm-dctm164 cs]$ su –
[root@vm-dctm164 ~]# su – postgres
-bash-4.2$ mkdir /var/lib/pgsql/9.6/data/db_dctm164_dat.dat

image7

image8image9image10image11image12image13image14image15image16image17image18image19image20image21image22image23image24image25image26image27image28

Documentum Administrator

Nothing special about this, same procedure as always. I’ve used the latest tomcat 8 to deploy, as there are no requirements/supported versions matrix:

image29

 

Some notes:

  • Documentation seems more “precise”, specially regarding the Linux install. However, there are still copy/paste sections from previous releases.
  • Only new (visible) feature in DA is the integration with iHub
  • Firefox extension doesn’t work in Firefox 60

Documentum in the cloud

Yesterday I attended the latest Documentum webex from Opentext. It was a review of  last year, with some use cases explained by customers and partners, and a review of the roadmap (It seems that they aren’t delaying the new Documentum version, and that it will be released by the end of this month).

Some of the topics/questions covered webtop (of course :D), new features such as iHub (a kind of Jasper Reports for Documentum, including an eclipse-based report designer), a D2 mobile application, and news regarding integration with the cloud.

It looks like the original idea EMC had of connectnig LEAP/cloud with Documentum through services is being pushed with a “common layer” of access in the form of services.

My idea of cloud may be completely wrong, but I don’t consider cloud a “remote datacenter”. Cloud is related to the concept of elasticity: elastic resources, usage and pricing. This means that you could dinamycally increase/decrease available resources according to your needs in a particular moment in time. In order to do this, you don’t just need to “go to the cloud”, you need your software to be able to do that (and Documentum is not able to).

I’m not going to discuss about microservices or containers, but a quick, clear example could be this one: Imagine you have a web application. You allocate one server on the cloud. In the cloud, you could, by defining threshold and behaviours, deal with peak workloads by automatically deploying additional server instances, that will automatically balance the load between them and then return to the “normal” usage without interaction. And this  would be extremely complex with Documentum (I guess you’ll need to configure a certain number of Documentum servers in HA, then stop them, and you could only deploy as many servers as you have previously configured in order to deal with high demand).

So, having discarded the viability of a “pure” cloud Documentum solution (note that I’m not including LEAP here, just the traditional Documentum server), we have two “offers” available:

IAAS: As far as I know, Opentext/Ondemand doesn’t have an IAAS offering available, so the alternative is to go to your favourite cloud provider, buy resources and then deploy Documentum there. However, you won’t get support (I guess this is something to be expected, as Opentext has its own cloud offering). Depending on your case, it might be worth “losing” support if figures make sense (same happened when VM were becoming popular, EMC didn’t support Documentum virtualized, but almost everyone was running it on virtual machines)

SAAS: Rather than cloud, this is a “remote datacenter” offering. Ondemand has fixed prices for this model, and the rest of competitors (if there are others left offering Documentum as a service) follow the same pricing model. This cloud offering, on paper, has the following advantages:

  • Lower TCO
  • Expert administration
  • Quicker startup (what?)
  • Better security (lol)
  • Disaster recovery with SLA response time

But you should have in mind also the following situations:

  • No specific ticketing application. Any operation that needs to be performed has to go through the support page (this includes, but it’s not limited to: creating a registered table, deploying a dar file, accesing dictionary information in d2, issuing SQL queries, running jobs, etc.).  In my experience, agile and rapid development cycles are not compatible with this way of working. Also note that the current Documentum SLAs always use “first response time” and not “time to solve the ticket” as metrics.
  • Better security: Well, if your product has security holes, the hole is there, no matter if it is on premise or on the cloud.
  • Disaster recovery: This is something I always say to clients: If you invest on a cloud environment, first thing to do is destroying the environment as soon as possible and request a recovery. This way you can have an accurate idea of how the provider works.

 

Opentext Documentum is coming next month

I didn’t realize that roadmap documents were updated last month. It looks like the February release is still going to happen (and I’ve been told a definite date, so it looks it won’t be delayed). After reviewing them (haven’t seen any changes :D), I can say:

  • Not much features regarding CS, the pattern/usage visualization and the s3 support (which, as far as I know, can be already done without official support) are the new features.
  • No word about DFS, and I know for a fact that several customers have actively asked for updates to current libs and extended support for application servers.
  • Clients get barely any changes (D2, Webtop, xCP).

I’m curious to see how many bugs are found in this first release from Opentext (and the brave customers that go first into the unknown :D), considering that some of the experienced Documentum staff left the company and the changes to the development cycle (that I guess happen when you move from a hardware company to a software company)

D2 autologin

There was a document in EDN, which now is lost, named “Useful shortcuts and urls for documentum D2”, and one of the URLs was an autologin url, quite useful for development purposes. The url shown was the following one:

D2/?_docbase=<repository>&_username=<username>&_password=<password>

However, although this works fine in D2-Config, it doesn’t work in D2 (>4.2, AFAIK) and this seems to be the case as there are several posts that seem related to this “issue”.

Well, the truth is that there’s still a way to autologin in D2:

D2/?docbase=<repository>&login=<username>&password=<password>

D2-Config DQL Editor

D2-Config (at least in D2 4.5) has a servlet (/GetData) that is used internally to run DQLs. I though when I saw it that, in the same way the REST query service is limited to run read queries, this won’t let you run write queries (you know, due to the “Get” in the name). Well, I was wrong. Any authenticated user can run any kind of query (limited by user permissions, as this is not run as superuser) by using this servlet:

D2-Config/servlet/GetData?dql1=select user_password from (select * from dm_user)&interfaceId=<my session id>&computerName=<my computer id>
D2-Config/servlet/GetData?dql1=create dm_document object set object_name='d2test' link '/Temp'&interfaceId=<my session id>&computerName=<my computer id>
D2-Config/servlet/GetData?dql1=delete dm_document object where folder('/Temp') and object_name='d2test'&interfaceId=<my session id>&computerName=<my computer id>