Does EMMA expose any API's or web services for the other applications to interact?
Marc R. Hoffmann
EMMA has no "official" API. But as it is fully implemented in Java you can interact with EMMA via its Java implementation classes. This is how I implemented EclEmma 1.x. Since EMMA 2.1.5320 there is a proprietary remoting API, see release notes.
Alternatively you might take a look at our new code coverage library JaCoCo, which has been designed for integration from the very beginning and has a documented API.
In v2.1 codebase, see the extensive javadoc for com.vladium.emma.Processor and com.vladium.emma.Command. These were created specifically for programmatic integration with EMMA.
Some "under the hood" stuff can be learned by examining code comments in com.vladium.emma.data.CoverageData and com.vladium.emma.data.MetaData. Persistence of this data (i.e. the *.em, *.ec files) is managed by com.vladium.emma.data.DataFactory.
Finally, report generation is done in com.vladium.emma.report package, with specific details of a given report type in com.vladium.emma.report.<type> subpackage. Reports are generated via traversal visits of a tree of "items" representing data aggregates to report. This is pretty much the classic Visitor pattern, with com.vladium.emma.report.IItemVisitor as the starting point.