vendredi 3 mai 2019

how to design storage for transactions involving multiple tables in dynamodb?

I am trying to add transaction support to an existing dynamodb storage which looks like this:

public interface Storage<T>{
T put(T entity);
...
}

public abstract class AbstractDynamoStorage<T> implements Storage<T> {
@Override
public T put(T entity) {
...
}
}

public class DynamoOrderStorage extends AbstractDynamoStorage<CoreOrder> {
...
}

public class DynamoCustomerStorage extends AbstractDynamoStorage<CoreCustomer> {
...
}

Now, I want to add transaction support to this using the newly launched DDB transactions to be able to commit multiple operations(put, write, update..) across multiple tables.

Here's my approach:

interface TransactDAO{
void commitWriteTransaction(TransactWriteRequest writeReq);
}

class DynamoTransactImpl implements TransactDAO{
@Override:
commitWriteTransaction(TransactWriteRequest request){
//dynamodb.transactWriteItems();
}
}

class DynamoDBTransactWriteItem implements TransactWriteRequest{
List<DynamoTransactWriteItem<T>> transactWriteItems;
}

class DynamoTransactWritePutItem<T> implements DynamoTransactionWriteItem<T>{
String tableName;
String data;
...
}

My worry is that the concrete storage classes(DynamoOrderStorage and DynamoCustomerStorage) are of different type and my approach might not work here. Is there any other better way to achieve this?

Aucun commentaire:

Enregistrer un commentaire