use of org.omg.CORBA.BAD_PARAM in project narayana by jbosstm.
the class ExtendedResourceRecord method otsRecord.
private final OTSAbstractRecord otsRecord() {
try {
if (_otsARHandle == null && _resourceHandle != null) {
_otsARHandle = com.arjuna.ArjunaOTS.OTSAbstractRecordHelper.unchecked_narrow(_resourceHandle);
lastRecord = RecordType.LASTRESOURCE == _otsARHandle.type_id();
}
if (_otsARHandle == null)
throw new BAD_PARAM();
else
return _otsARHandle;
} catch (Exception e) {
return null;
}
}
use of org.omg.CORBA.BAD_PARAM in project narayana by jbosstm.
the class ResourceRecord method resourceHandle.
public final Resource resourceHandle() {
if ((_resourceHandle == null) && (_stringifiedResourceHandle != null)) {
try {
org.omg.CORBA.ORB theOrb = ORBManager.getORB().orb();
if (theOrb == null)
throw new UNKNOWN();
if (jtsLogger.logger.isTraceEnabled()) {
jtsLogger.logger.trace("ResourceRecord: About to string_to_object on " + _stringifiedResourceHandle);
}
org.omg.CORBA.Object optr = theOrb.string_to_object(_stringifiedResourceHandle);
if (jtsLogger.logger.isTraceEnabled()) {
jtsLogger.logger.trace("ResourceRecord: Successfully stringed to object, next try to narrow");
}
theOrb = null;
_resourceHandle = org.omg.CosTransactions.ResourceHelper.narrow(optr);
if (jtsLogger.logger.isTraceEnabled()) {
jtsLogger.logger.trace("ResourceRecord: Successfully narrowed");
}
if (_resourceHandle == null)
throw new BAD_PARAM();
else {
optr = null;
}
} catch (SystemException e) {
if (jtsLogger.logger.isTraceEnabled()) {
jtsLogger.logger.trace("ResourceRecord: Failed to narrow to Resource");
}
}
}
return _resourceHandle;
}
use of org.omg.CORBA.BAD_PARAM in project narayana by jbosstm.
the class ResourceRecord method nestedAbort.
/**
* General nesting rules:
*
* Only SubtransactionAware resources get registered with nested actions.
* The ResourceRecord creator is assumed to ensure that plain Resources
* are only registered with the appropriate top level action.
*
* That said the _propagateRecord flag ensures that resources registered
* via register_subtran only take part in the action they where registered
* in after which they are dropped
*/
public int nestedAbort() {
if (jtsLogger.logger.isTraceEnabled()) {
jtsLogger.logger.trace("ResourceRecord::nestedAbort() for " + order());
}
/*
* We shouldn't need to check committed since aborted nested actions
* will drop these resources.
*/
SubtransactionAwareResource staResource = null;
int o = TwoPhaseOutcome.FINISH_ERROR;
try {
/*
* Must be an staResource to get here.
*/
staResource = org.omg.CosTransactions.SubtransactionAwareResourceHelper.narrow(resourceHandle());
if (staResource == null)
throw new BAD_PARAM(0, CompletionStatus.COMPLETED_NO);
} catch (Exception exEnv) {
// not a sub tran resource, so ignore;
o = TwoPhaseOutcome.FINISH_OK;
}
if (staResource != null) {
try {
staResource.rollback_subtransaction();
o = TwoPhaseOutcome.FINISH_OK;
} catch (Exception e) {
o = TwoPhaseOutcome.FINISH_ERROR;
}
staResource = null;
}
/*
* Now release the parent as it is about to be destroyed
* anyway.
*
* The parent may have already been released if abort is
* being called because commit failed.
*/
_parentCoordHandle = null;
return o;
}
use of org.omg.CORBA.BAD_PARAM in project narayana by jbosstm.
the class Helper method localAction.
/**
* Given a Control_ptr determine if this is a reference to a local
* action, and if so return the raw BasicAction pointer.
*/
public static final BasicAction localAction(org.omg.CosTransactions.Control control) {
if (control == null)
return null;
if (control instanceof ControlImple) {
try {
ControlImple c = (ControlImple) control;
return (BasicAction) c.getImplHandle();
} catch (Exception e) {
}
}
try {
UidCoordinator coord = Helper.getUidCoordinator(control);
if (coord != null) {
Uid u = Helper.getUid(coord);
coord = null;
return ActionManager.manager().get(u);
} else
throw new BAD_PARAM();
} catch (Exception e) {
/*
* Can't be an Arjuna action, so ignore.
*/
}
return null;
}
use of org.omg.CORBA.BAD_PARAM in project narayana by jbosstm.
the class InterpositionClientRequestInterceptorImpl method send_request.
public void send_request(ClientRequestInfo request_info) throws SystemException {
if (jtsLogger.logger.isTraceEnabled()) {
trace_request("send_request", request_info);
}
if (systemCall(request_info))
return;
final boolean otsAlwaysPropagate = InterceptorInfo.getAlwaysPropagate();
try {
if (!otsAlwaysPropagate) {
TransactionalObject ptr = TransactionalObjectHelper.narrow(request_info.target());
if (ptr == null)
throw new BAD_PARAM();
} else {
/**
* If the value is not null then we are currently in use *
*/
if (_inUse.get() != null) {
return;
} else {
_inUse.set(_inUse);
}
}
try {
/*
* We get back an Any, which contains a key which we must
* now use to get the actual transaction context. This saves
* use having to pack and unpack the context every time it
* changes, even if we don't then make a remote invocation.
*/
Any localData = request_info.get_slot(_localSlot);
String threadId = null;
boolean problem = false;
Any data = null;
if (localData.type().kind().value() != TCKind._tk_null) {
if ((threadId = localData.extract_string()) == null)
throw new UNKNOWN(jtsLogger.i18NLogger.get_orbspecific_javaidl_interceptors_interposition_invalidparam());
} else
threadId = ThreadUtil.getThreadId();
if (threadId != null) {
ControlWrapper theControl = OTSImpleManager.current().contextManager().current(threadId);
if (theControl != null) {
try {
Coordinator theCoordinator = theControl.get_coordinator();
PropagationContext ctx = null;
if (theCoordinator != null) {
final Coordinator finalTheCoordinator = theCoordinator;
try {
ctx = doPrivileged(new PrivilegedExceptionAction<PropagationContext>() {
@Override
public PropagationContext run() throws Unavailable {
return finalTheCoordinator.get_txcontext();
}
});
} catch (PrivilegedActionException pex) {
throw pex.getException();
}
data = packPropagationContext(ctx);
theCoordinator = null;
} else
throw new Unavailable();
} catch (Unavailable ex) {
/*
* We may have to make calls during
* commit (e.g., after_completion)
* which are valid, but which will get
* Unavailable.
*/
problem = true;
}
} else
problem = true;
} else
problem = true;
if (problem) {
if (InterceptorInfo.getNeedTranContext())
throw new TRANSACTION_REQUIRED();
}
if (data != null) {
byte[] octets;
try {
final Any finalData = data;
octets = doPrivileged(new PrivilegedExceptionAction<byte[]>() {
@Override
public byte[] run() throws org.omg.CORBA.UserException {
return _codec.encode_value(finalData);
}
});
} catch (PrivilegedActionException pex) {
throw pex.getException();
}
ServiceContext service_context = new ServiceContext(OTSManager.serviceId, octets);
request_info.add_request_service_context(service_context, true);
}
} catch (SystemException e) {
throw e;
} catch (Exception ex) {
throw new UNKNOWN(ex.toString());
} finally {
/**
* If we are set to always propagate then ensure we clear the inuse flag *
*/
if (otsAlwaysPropagate) {
_inUse.set(null);
}
}
} catch (BAD_PARAM ex) {
// narrow failed, so not a transactional object.
}
}
Aggregations