use of com.arjuna.wsc.InvalidProtocolException in project narayana by jbosstm.
the class ContextFactoryImple method createBridgedTransaction.
/**
* create a bridged to subordinate WS-AT 1.1 transaction, associate it with the registrar and create and return
* a coordination context for it. n.b. this is a private, behind-the-scenes method for use by the JTA-AT
* transaction bridge code.
* @param subordinateType a unique string which groups subordinates for the benefit of their parent tx/app and
* allows them to be identified and retrieved as a group during recovery
* @param expires the timeout for the bridged to AT transaction
* @param isSecure true if the registration cooridnator URL should use a secure address, otherwise false.
* @return a coordination context for the bridged to transaction
*/
public BridgeTxData createBridgedTransaction(String subordinateType, final Long expires, final boolean isSecure) {
// we must have a type and it must not be the AT-AT subordinate type
if (subordinateType == null || SubordinateATCoordinator.SUBORDINATE_TX_TYPE_AT_AT.equals(subordinateType)) {
return null;
}
// we need to create a subordinate transaction and register it as both a durable and volatile
// participant with the registration service defined in the current context
SubordinateATCoordinator subTx = null;
try {
subTx = (SubordinateATCoordinator) createSubordinate(subordinateType);
} catch (NoActivityException e) {
// will not happen
return null;
} catch (InvalidProtocolException e) {
// will not happen
return null;
} catch (SystemException e) {
// may happen
return null;
}
// ok now create the context
final ServiceRegistry serviceRegistry = PrivilegedServiceRegistryFactory.getInstance().getServiceRegistry();
final String registrationCoordinatorURI = serviceRegistry.getServiceURI(CoordinationConstants.REGISTRATION_SERVICE_NAME, isSecure);
final CoordinationContext coordinationContext = new CoordinationContext();
coordinationContext.setCoordinationType(AtomicTransactionConstants.WSAT_PROTOCOL);
CoordinationContextType.Identifier identifier = new CoordinationContextType.Identifier();
String txId = subTx.get_uid().stringForm();
identifier.setValue("urn:" + txId);
coordinationContext.setIdentifier(identifier);
if (expires != null && expires.longValue() > 0) {
Expires expiresInstance = new Expires();
expiresInstance.setValue(expires);
coordinationContext.setExpires(expiresInstance);
}
W3CEndpointReference registrationCoordinator = getRegistrationCoordinator(registrationCoordinatorURI, txId);
coordinationContext.setRegistrationService(registrationCoordinator);
try {
_theRegistrar.associate(subTx);
} catch (Exception e) {
// will not happen
}
BridgeTxData bridgeTxData = new BridgeTxData();
bridgeTxData.context = coordinationContext;
bridgeTxData.coordinator = subTx;
bridgeTxData.identifier = txId;
return bridgeTxData;
}
use of com.arjuna.wsc.InvalidProtocolException in project narayana by jbosstm.
the class ContextFactoryImple method createSubordinate.
public final Object createSubordinate(String subordinateType) throws NoActivityException, InvalidProtocolException, SystemException {
try {
CoordinatorServiceImple coordManager = (CoordinatorServiceImple) _coordManager;
CoordinatorControl theControl = coordManager.coordinatorControl();
ATCoordinator subordinateTransaction = theControl.createSubordinate(subordinateType);
/*
* Now add the registrar for this specific coordinator to the
* mapper.
*/
subordinateTransaction.enlistSynchronization(new CleanupSynchronization(subordinateTransaction.get_uid().stringForm(), _theRegistrar));
_theRegistrar.associate(subordinateTransaction);
return subordinateTransaction;
} catch (Exception ex) {
throw new SystemException(ex.toString());
}
}
use of com.arjuna.wsc.InvalidProtocolException in project narayana by jbosstm.
the class EnduranceTest method doRegisterError.
public void doRegisterError(final String messageId, int count) throws Exception {
final String protocolIdentifier;
final W3CEndpointReference participantProtocolService = TestUtil11.getProtocolParticipantEndpoint("participant");
final CoordinationContextType coordinationContext = new CoordinationContextType();
CoordinationContextType.Identifier identifierInstance = new CoordinationContextType.Identifier();
coordinationContext.setCoordinationType(TestUtil.COORDINATION_TYPE);
coordinationContext.setIdentifier(identifierInstance);
identifierInstance.setValue("identifier");
coordinationContext.setRegistrationService(TestUtil11.getRegistrationEndpoint(identifierInstance.getValue()));
W3CEndpointReference coordinator = null;
switch(count) {
case 0:
protocolIdentifier = TestUtil.INVALID_PROTOCOL_PROTOCOL_IDENTIFIER;
try {
coordinator = RegistrationCoordinator.register(coordinationContext, messageId, participantProtocolService, protocolIdentifier);
} catch (InvalidProtocolException ipe) {
}
if (coordinator != null) {
fail("expected invalid protocol exception");
}
break;
case 1:
protocolIdentifier = TestUtil.INVALID_STATE_PROTOCOL_IDENTIFIER;
try {
coordinator = RegistrationCoordinator.register(coordinationContext, messageId, participantProtocolService, protocolIdentifier);
} catch (InvalidStateException ise) {
}
if (coordinator != null) {
fail("expected invalid state exception");
}
break;
case 3:
protocolIdentifier = TestUtil.NO_ACTIVITY_PROTOCOL_IDENTIFIER;
try {
coordinator = RegistrationCoordinator.register(coordinationContext, messageId, participantProtocolService, protocolIdentifier);
} catch (CannotRegisterException cre) {
}
if (coordinator != null) {
fail("expected cannot register exception");
}
break;
default:
protocolIdentifier = TestUtil.ALREADY_REGISTERED_PROTOCOL_IDENTIFIER;
try {
coordinator = RegistrationCoordinator.register(coordinationContext, messageId, participantProtocolService, protocolIdentifier);
} catch (CannotRegisterException cre) {
}
if (coordinator != null) {
fail("expected cannot register exception");
}
break;
}
final RegisterDetails details = testRegistrationCoordinatorProcessor.getRegisterDetails(messageId, 10000);
final RegisterType requestRegister = details.getRegister();
final MAP requestMap = details.getMAP();
final ArjunaContext requestArjunaContext = details.getArjunaContext();
assertEquals(requestMap.getTo(), TestUtil11.registrationCoordinatorService);
assertEquals(requestMap.getMessageID(), messageId);
assertNotNull(requestArjunaContext);
assertEquals(requestArjunaContext.getInstanceIdentifier().getInstanceIdentifier(), identifierInstance.getValue());
;
assertEquals(protocolIdentifier, requestRegister.getProtocolIdentifier());
assertNotNull(protocolIdentifier, requestRegister.getParticipantProtocolService());
}
use of com.arjuna.wsc.InvalidProtocolException in project narayana by jbosstm.
the class UserTransactionStandaloneImple method enlistCompletionParticipants.
/*
* enlist the client for the completiopn protocol so it can commit or ro0ll back the transaction
*/
private final void enlistCompletionParticipants() throws WrongStateException, UnknownTransactionException, SystemException {
TransactionManagerImple tm = (TransactionManagerImple) TransactionManager.getTransactionManager();
final TxContextImple currentTx = (TxContextImple) tm.currentTransaction();
if (currentTx == null)
throw new UnknownTransactionException();
final String id = currentTx.identifier();
W3CEndpointReference completionCoordinator = null;
try {
completionCoordinator = tm.registerParticipant(null, AtomicTransactionConstants.WSAT_SUB_PROTOCOL_COMPLETION_RPC);
} catch (InvalidProtocolException ex) {
ex.printStackTrace();
throw new SystemException(ex.toString());
} catch (InvalidStateException ex) {
throw new WrongStateException();
} catch (CannotRegisterException ex) {
// cause could actually be no activity or already registered
throw new UnknownTransactionException();
}
_completionCoordinators.put(id, completionCoordinator);
}
use of com.arjuna.wsc.InvalidProtocolException in project narayana by jbosstm.
the class ContextFactoryImple method createBridgedTransaction.
/**
* create a bridged to subordinate WS-BA 1.1 transaction, associate it with the registrar and create and return
* a coordination context for it. n.b. this is a private, behind-the-scenes method for use by the JTA-BA
* transaction bridge code.
* @param expires the timeout for the bridged to BA transaction
* @param isSecure true if the registration cooridnator URL should use a secure address, otherwise false.
* @return a coordination context for the bridged to transaction
*/
public BridgeTxData createBridgedTransaction(final Long expires, final boolean isSecure) {
// we need to create a subordinate transaction and expose it to the bridge layer so it can
// be driven to completion
SubordinateBACoordinator subTx = null;
try {
subTx = (SubordinateBACoordinator) createSubordinate();
} catch (NoActivityException e) {
// will not happen
return null;
} catch (InvalidProtocolException e) {
// will not happen
return null;
} catch (SystemException e) {
// may happen
return null;
}
// ok now create the context
final ServiceRegistry serviceRegistry = PrivilegedServiceRegistryFactory.getInstance().getServiceRegistry();
final String registrationCoordinatorURI = serviceRegistry.getServiceURI(CoordinationConstants.REGISTRATION_SERVICE_NAME, isSecure);
final CoordinationContext coordinationContext = new CoordinationContext();
coordinationContext.setCoordinationType(BusinessActivityConstants.WSBA_PROTOCOL_ATOMIC_OUTCOME);
CoordinationContextType.Identifier identifier = new CoordinationContextType.Identifier();
String txId = subTx.get_uid().stringForm();
identifier.setValue("urn:" + txId);
coordinationContext.setIdentifier(identifier);
if (expires != null && expires.longValue() > 0) {
Expires expiresInstance = new Expires();
expiresInstance.setValue(expires);
coordinationContext.setExpires(expiresInstance);
}
W3CEndpointReference registrationCoordinator = getRegistrationCoordinator(registrationCoordinatorURI, txId);
coordinationContext.setRegistrationService(registrationCoordinator);
try {
_theRegistrar.associate(subTx);
} catch (Exception e) {
// will not happen
}
BridgeTxData bridgeTxData = new BridgeTxData();
bridgeTxData.context = coordinationContext;
bridgeTxData.coordinator = subTx;
bridgeTxData.identifier = txId;
return bridgeTxData;
}
Aggregations