I'm building an oracle persistence service and integrating it within our own datalayer. We are migrating a huge project toward proces orchestration with WF. I'm forced to use oracle.
The software has it's own transaction management build in, using nesting and all the stuff that nowadays is common. However, we are not really willing to change our current approach, since it has worked well for us for years.
We're now testing our persistence service with oracle and are seeing that the runtime, when starting up, is enlisting our connection into a System.Transactions.Transaction. This gives us major problems, since we are not using that namespace at all, but instead have a framework that will begin an oracle transaction on the connection itself. Parallel transactions are not allowed and certainly not wanted.
The way out seems to be to build our own WorkflowBatchcommit service, which should allow for your own transaction management. Having finished that, we are getting an exception that there is no ambient transaction!!
The exception is caused by the workflow executor (talk about code smells... that class is way too big ).
private void DoResourceManagerCommit()
{
if (null == Transaction.Current)
{
throw new Exception(ExecutionStringManager.NullAmbientTransaction);
}
this.ResourceManager.Commit();
}
So, the question is: what use is it for us to build our own workflowcommitbatch service, if we are then forced to use the Transactions namespace.
Our transactions are of type OracleTransaction, and are not inherited from the new Transaction class.
This check seems to be really out of place.
Any backgroundinformation about why the WorkflowExecutor feels the need to enforce something, that does not seems to be it's responsibility, are appreciated!
Our current solution is to simply not let the connection enlist into the TransactionScope.
Thanks,
Ruurd Boeke