Hi Michael,
I came late to this post, but I guess I should share our experiences on monitoring user actions in ADF.
Therefore we had to come up with a custom implementation, similar with the one Oracle offers.
We accomplished this by adding a clientListener to every UI component (buttons, menu inputText, Choice lists etc). This means we monitor from Javascript when a button is clicked and how much time it takes for the button to execute. Additionally we collect information about the context: button name, header title, page name etc.
We did this in generic fashion, changing the HTML response generated by ADF at runtime.
For example, the HTML generated by an af:commandLink looks like this:
"new AdfRichLink('pt1:bBarFDC:logoLinkAlt',{'shortDesc':''})";
We are changing the button at runtime to look like this:
"new AdfRichLink('pt1:bBarFDC:logoLinkAlt',{'clientListeners':{action:callJavascriptFunction},'shortDesc':''})";
Where
callJavascriptFunction is the function doing the monitoring.
Based on our texts the introduced overhead is minimum, but there is one drawback to it: each version of ADF needs a slightly different implementation, as the generated HTML changes.