An abstract distributed middleware for transactions over heterogeneous stores