package org.radargun.service;
import org.infinispan.AdvancedCache;
/**
* @author Radim Vansa <rvansa@redhat.com>
*/
public class Infinispan51Transactional extends InfinispanTransactional {
protected final Infinispan51EmbeddedService service;
public Infinispan51Transactional(Infinispan51EmbeddedService service) {
super(service);
this.service = service;
}
@Override
public Configuration getConfiguration(String cacheName) {
if (service.batching && service.isCacheBatching(service.getCache(cacheName))) {
return Configuration.TRANSACTIONAL;
}
return super.getConfiguration(cacheName);
}
@Override
public Transaction getTransaction() {
if (service.batching) {
return new Batch();
} else {
return super.getTransaction();
}
}
protected class Batch implements Transaction {
private AdvancedCache impl;
@Override
public <T> T wrap(T resource) {
impl = getAdvancedCache(resource);
return resource;
}
@Override
public void begin() {
if (trace) log.trace("Starting batch");
impl.startBatch();
}
@Override
public void commit() {
if (trace) log.trace("Committing batch");
impl.endBatch(true);
}
@Override
public void rollback() {
if (trace) log.trace("Rolling back batch");
impl.endBatch(false);
}
}
}