As many of you will be aware, whilst the traditional approach to performance tuning Documentum prior to D6 was to generate and analyse a DMCL trace this option is no longer available in D6. As part of the effort to remove reliance on native code libraries (ie dmcl40.dll or equivalent Unix shared libraries) EMC has rewritten the DMCL layer in Java.
Iin effect the API no longer exists., there are no create,c,…/get,c,…/getfile,c,…/etc calls anymore. DFC code now calls directly into the RPC layer (now rewritten in Java as opposed to the native code Netwise implementation). API-aware utilities such as iapi and dmbasic still have support for API calls but in effect this is a layer on top of the DFC code (rather than underneath it as it used to be).
The standard way to analyse performance problems in D6 is to create a DFC trace and analyse that. Not only is this format very different from the DMCL trace format but there is also substantial change and improvement over the Documentum 5 DFC trace format. There are now around 34 different tracing parameters that can be set in the dfc.properties which give you a lot of control over what is output and in what format.
This week we have uploaded the beta version of the Xense Profiler for DFC. Xense Profiler for DFC is a port of the Xense Profiler, a Documentum 5 DMCL trace analyser. Xense Profiler for DFC is designed to work with D6 DFC trace files and produces performance profiling reports that allow you to identify the causes of D6 performance problems. Xense Profiler for DFC beta is available for download and is free for the duration of the beta period (Until 31 July 2008). If you are already working on D6 products I would urge you to try it out; as an incentive all users who register for the download will receive a substantial discount off the list price when the production version is released.
Update 7 August 2008: We have extended the beta period for another 3 months
A while back Bex Huff posted about using Jython to script Documentum tasks. I referenced that post in one of the answers I gave on the forums however I had never used Jython at that point. I made a note to try it out and so this post represents the beginning of my investigation. Consider a journey, possibly once started that never finishes….
First up you should be able to install Jython on any platform that runs Documentum (well any platform that runs DFC which is more or less the same thing). You can get the low down on the JPython site but the quick install steps are:
1) Download the installation, typically a file like jython_installer-2.2.1.jar
2) Execute the jar (there are command line invocations if you need it check on the web for details) to install.
3) For convenience add the installation path (e.g. c:\jython2.2.1)
All the instructions are based on a windows platform for convenience. It should translate to *nix without too much bother; I may try this out on a handy copy of Red Hat to confirm (but don’t hold your breath for that post!).
You could now run the Jython command interpreter in the following way:
1) start a command prompt
2) type ‘jython’
The following code will create a user called inline_user (it assumes you have a JRE of 1.4.2 or greater and DFC installed):
from com.documentum.com import DfClientX clientx = DfClientX() client = clientx.getLocalClient() li = clientx.getLoginInfo() li.setUser("dmadmin") # login as installation owner li.setPassword("dmadmin") # insert install owner password here s0 = client.newSession("fnet1",li) print "Connected as dmadmin" print "now creating user ..." u = s0.newObject("dm_user") u.setUserName("inline_user") u.setUserLoginName("inline_user") # because we have to u.setUserAddress("email@example.com") u.setUserState(0,0) u.setUserSourceAsString("inline password") # IDfUser.setPassword seems to be missing from DFC5.3!!! u.setString("user_password","password") u.save() print "user inline_user has been created"
This code can either be typed directly into the Jython command line interface (a great way to test out dfc code snippets) or can be copied into a script file e.g. create_inline.py and called from the command line like this:
Hopefully the user has been created sucessfully and you should now be able to test the login from the command line:
li2 = clientx.getLoginInfo() li2.setUser("inline_user") li2.setPassword("password") s1 = client.newSession("fnet1",li2) print "connected as " + s1.connectionConfig.getLoginUserName()
OK so this is a very simple example. There is no use of command line parameters, no user input, no functions and so on. Hopefully I’ll get round to further posts that expand and show examples of this. In the meantime enjoy.