Does cache coordination across processes/servers only happen once a Transaction has committed?
Is there anyway to have the cache be available to another process/server which is running within the same Transaction or should I flush the changes to the database before crossing a process/server boundary?
Yes, the cache is only coordinated when the transaction is committed.
In general, avoiding transactions that span multiple different servers is a good idea. I'm not even sure how you would get into this situation. You could flush the changes on one machines a refresh them on the other to see the changes.
I suppose Application Clusters must ensure that it never happens, otherwise you would see it quite frequently.
Suppose a thread X begins using EAR 'A' on one machine 'A' and then calls into a different EAR 'B' on another box 'B' ( because of say, load balancing or because of some 'scarce' network resource that is only available on certain nodes ) and then that thread in turn calls back into a different component of EAR 'A', the AppServer must pick up the fact that this is re-entrancy and continue in the context of the original thread X on machine 'A'.