* @return An operation resource that can be transacted or not based on transaction configuration
* @throws MuleException
*/
final public <T> T getTransactionalResource(ImmutableEndpoint endpoint) throws MuleException
{
Transaction currentTx = TransactionCoordination.getInstance().getTransaction();
if (currentTx != null)
{
if (currentTx.hasResource(this.getOperationResourceFactory()))
{
return (T) currentTx.getResource(this.getOperationResourceFactory());
}
else
{
Object connectionResource = this.createOperationResource(endpoint);
if (currentTx.supports(this.getOperationResourceFactory(),connectionResource))
{
currentTx.bindResource(this.getOperationResourceFactory(), connectionResource);
}
else if (endpoint.getTransactionConfig().isTransacted())
{
throw new TransactionException(CoreMessages.createStaticMessage("Endpoint is transactional but transaction does not support it"));
}