I have a question about when to suspend a transaction in global transaction?
If app server A calls a ejb method in app server B, and app server A 's calling thread has a transaction, server A should ALWAYS suspend current transaction before propagation it to server B?
Is there any exception that server A will not suspend the current transaction before propagation?
The effect depends partly on the capabilities and configuration of the app servers. At the moment geronimo cannot propagate transactions between instances. If you use the corba transport then propagation works as explained in the ejb specs: only calls where no propagation is expected will succeed (B's ejb is NONE or REQUIRES_NEW or A has no active transaction (NONE, NOT_SUPPORTED, SUPPPORTED with not tx active)).
With the proprietary openejb transport the existence of a tx context at A is simply ignored.
We could certainly use some help to implement distributed transactions but I warn you that the topic is somewhat difficult and there doesn't seem to be much demand for it.
If geronimo did support distributed transactions then there would be no difference in transaction behavior whether A and B were on the same server instance or different server instances.
I hope this answers your question.