What do you mean by existing semantics? Do you mean existing defaults?
TransactionSticky LBP would do:
Object txStickyTarget = invocation.getTransientValue("TX_STICKY_TARGET");
| if (txStickyTarget != null &&
familyClusterInfo.getTargets().contains(txStickyTarget))
| {
| log.trace("transaction bound target exists: " + txStickyTarget);
| return txStickyTarget;
| }
|
| return chooseNewTarget(familyClusterInfo, invocation);
where chooseNewTarget is:
private Object chooseNewTarget(FamilyClusterInfo familyClusterInfo, Invocation
invocation)
| {
| Object newTarget = super.chooseTarget(familyClusterInfo, invocation);
| log.trace("new target chosen: " + newTarget);
| invocation.getTransientPayload().put("TX_STICKY_TARGET", newTarget);
|
| return newTarget;
| }
If there's no transaction, txStickyTarget will be null. txStickyTarget will also be
null in the very first call of a transaction.
This is because at the beginning of each invocation, UnifiedInvokerHAProxy checks whether
there's a running transaction and whether this transaction has a target in the map. If
both are true, it adds the txStickyTarget to the transient invocation payload.
If there's no transaction running, or is the first call of a transaction, the
txStickyTarget will be null falling back on standard RoundRobin LBP and will also be added
to the transient invocation payload.
Adding txStickyTarget to the transient invocation payload if no transactions are running
would have no secondary effects, because any access/check in the txFailoverAuthorizations
would require an existing tpc. However, I agree that adding it is an unncessary operation
in this situation.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4077915#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...