I did such a project in the past.
I created my sub projects each with a separate AM (different name).
I deployed them all into ADF jar library and imported into "main" project.
Everything worked OK.
Of course they all should point to the same JNDI data source
I think this will depend of how many concurrent users are you expecting to connect to your application. I might be mistaken but I believe each application module has its own dbTransaction which means it will be using a connection instance from your pool. With your approach, a single user might need 5 of those. Again, I am not 100% sure so would be great if someone can correct me.
To use one AM instance create a root application module which should contain nested application modules.
As Puthanampatti said,
An option can be consuming the sub project and in you master AM module you use each subproject AM as a nested application modules so they all share one dbTransaction meaning that one commit will actually commit all pending changes in all application modules.
will they all be treated as root application modules or nested application modules?
nested AM participates in the same txn.