} else if (transaction instanceof RemoteTransaction) { final RemoteTransaction remoteTransaction = (RemoteTransaction) transaction; remoteTransaction.setLocation(uri); final XidProvider ir = remoteTransaction.getProviderInterface(XidProvider.class); if (ir == null) throw EjbHttpClientMessages.MESSAGES.cannotEnlistTx(); Xid xid = ir.getXid();
public void begin() throws NotSupportedException, SystemException { final ContextTransactionManager transactionManager = ContextTransactionManager.getInstance(); if (transactionManager.getTransaction() != null) { throw Log.log.nestedNotSupported(); } final RemoteTransactionContext context = RemoteTransactionContext.getInstancePrivate(); int timeout = stateRef.get().timeout; if (timeout == 0) timeout = ContextTransactionManager.getGlobalDefaultTransactionTimeout(); transactionManager.resume(context.notifyCreationListeners(new RemoteTransaction(authenticationContext, timeout), CreationListener.CreatedBy.USER_TRANSACTION)); }
public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, SystemException { final AtomicReference<State> stateRef = this.stateRef; try { stateRef.get().commit(stateRef); } catch (RollbackException re) { addRollbackExceptions(re); throw re; } }
private static void disassociateRemoteTxIfPossible(AbstractInvocationContext context) { AbstractTransaction transaction = context.getTransaction(); if (transaction instanceof RemoteTransaction) { RemoteTransaction remote = (RemoteTransaction) transaction; if (!remote.tryClearLocation()) { Logs.TXN.tracef("Could not disassociate remote transaction (already in-use or completed) from %s", remote.getLocation()); } } }
} else if (transaction instanceof RemoteTransaction) { final RemoteTransaction remoteTransaction = (RemoteTransaction) transaction; remoteTransaction.setLocation(location); dataOutput.writeByte(1); final SimpleIdResolver ir = remoteTransaction.getProviderInterface(SimpleIdResolver.class); if (ir == null) throw Logs.TXN.cannotEnlistTx(); final int id = ir.getTransactionId(channel.getConnection()); dataOutput.writeInt(id); int transactionTimeout = remoteTransaction.getEstimatedRemainingTime(); if(transactionTimeout == 0) throw Logs.TXN.outflowTransactionTimeoutElapsed(transaction); PackedInteger.writePackedInteger(dataOutput, transactionTimeout);
void suspend() { notifyAssociationListeners(false); // no operation }
throw new IllegalArgumentException(e); final SimpleTransactionControl control = provider.getPeerHandle(location, sslContext, authenticationConfiguration).begin(getEstimatedRemainingTime()); try { stateRef.get().join(stateRef, location, control);
public int getStatus() { final RemoteTransaction remoteTransaction = getMatchingTransaction(); return remoteTransaction == null ? Status.STATUS_NO_TRANSACTION : remoteTransaction.getStatus(); }
private void setupStickinessIfRequired(AbstractInvocationContext context, boolean propagate, AbstractTransaction transaction) { ConcurrentMap<Application, URI> applications = null; if (transaction instanceof RemoteTransaction) { final URI location = ((RemoteTransaction) transaction).getLocation(); // we can only route this request to one place; do not load-balance if (location != null) { context.setDestination(location); setupSessionAffinitiesIfNeeded(context); } } else if (transaction instanceof LocalTransaction && propagate){ applications = getOrCreateApplicationMap(transaction); URI destination = getApplicationAssociation(applications, context); if (destination != null) { context.setDestination(destination); setupSessionAffinitiesIfNeeded(context); } else { if (applications.size() > 0) { context.putAttachment(PREFERRED_DESTINATIONS, applications.values()); } context.putAttachment(APPLICATIONS, applications); } } }
} else if (transaction instanceof RemoteTransaction) { final RemoteTransaction remoteTransaction = (RemoteTransaction) transaction; remoteTransaction.setLocation(location); dataOutput.writeByte(1); final SimpleIdResolver ir = remoteTransaction.getProviderInterface(SimpleIdResolver.class); if (ir == null) throw Logs.TXN.cannotEnlistTx(); final int id = ir.getTransactionId(channel.getConnection()); dataOutput.writeInt(id); PackedInteger.writePackedInteger(dataOutput, remoteTransaction.getEstimatedRemainingTime()); return null; } else if (transaction instanceof LocalTransaction) {
private static void disassociateRemoteTxIfPossible(AbstractInvocationContext context) { AbstractTransaction transaction = context.getTransaction(); if (transaction instanceof RemoteTransaction) { RemoteTransaction remote = (RemoteTransaction) transaction; if (!remote.tryClearLocation()) { Logs.TXN.tracef("Could not disassociate remote transaction (already in-use or completed) from %s", remote.getLocation()); } } }
void resume() { notifyAssociationListeners(true); // no operation }
throw new IllegalArgumentException(e); final SimpleTransactionControl control = provider.getPeerHandle(location, sslContext, authenticationConfiguration).begin(getEstimatedRemainingTime()); try { stateRef.get().join(stateRef, location, control);
public int getStatus() { final RemoteTransaction remoteTransaction = getMatchingTransaction(); return remoteTransaction == null ? Status.STATUS_NO_TRANSACTION : remoteTransaction.getStatus(); }
private void setupStickinessIfRequired(AbstractInvocationContext context, boolean propagate, AbstractTransaction transaction) { ConcurrentMap<Application, URI> applications = null; if (transaction instanceof RemoteTransaction) { final URI location = ((RemoteTransaction) transaction).getLocation(); // we can only route this request to one place; do not load-balance if (location != null) { context.setDestination(location); setupSessionAffinitiesIfNeeded(context); } } else if (transaction instanceof LocalTransaction && propagate){ applications = getOrCreateApplicationMap(transaction); URI destination = getApplicationAssociation(applications, context); if (destination != null) { context.setDestination(destination); setupSessionAffinitiesIfNeeded(context); } else { if (applications.size() > 0) { context.putAttachment(PREFERRED_DESTINATIONS, applications.values()); } context.putAttachment(APPLICATIONS, applications); } } }
} else if (transaction instanceof RemoteTransaction) { final RemoteTransaction remoteTransaction = (RemoteTransaction) transaction; remoteTransaction.setLocation(location); dataOutput.writeByte(1); final SimpleIdResolver ir = remoteTransaction.getProviderInterface(SimpleIdResolver.class); if (ir == null) throw Logs.TXN.cannotEnlistTx(); final int id = ir.getTransactionId(channel.getConnection()); dataOutput.writeInt(id); int transactionTimeout = remoteTransaction.getEstimatedRemainingTime(); if(transactionTimeout == 0) throw Logs.TXN.outflowTransactionTimeoutElapsed(transaction); PackedInteger.writePackedInteger(dataOutput, transactionTimeout);