package pt.ist.fenixframework.backend.mem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pt.ist.fenixframework.DomainObject;
import pt.ist.fenixframework.DomainRoot;
import pt.ist.fenixframework.TransactionManager;
import pt.ist.fenixframework.backend.BackEnd;
import pt.ist.fenixframework.core.SharedIdentityMap;
public class MemBackEnd implements BackEnd {
private static final Logger logger = LoggerFactory.getLogger(MemBackEnd.class);
public static final String BACKEND_NAME = "mem";
protected final TransactionManager transactionManager;
public MemBackEnd() {
this.transactionManager = new MemTransactionManager();
}
@Override
public String getName() {
return BACKEND_NAME;
}
@Override
public DomainRoot getDomainRoot() {
DomainRoot root = fromOid(1L);
if (root == null) {
root = new DomainRoot(); // which automatically caches this instance, but does not
// ensure that it is the first, as a concurrent request
// might create another
// so we get it again from the cache before returning if
root = fromOid(1L);
assert root != null; // there must be at least one
}
return root;
}
@Override
public <T extends DomainObject> T getDomainObject(String externalId) {
return fromOid(Long.parseLong(externalId));
}
@Override
public TransactionManager getTransactionManager() {
return this.transactionManager;
}
@Override
public <T extends DomainObject> T fromOid(Object oid) {
if (logger.isTraceEnabled()) {
logger.trace("fromOid(" + oid + ")");
}
return (T) SharedIdentityMap.getCache().lookup(oid);
}
@Override
public void shutdown() {}
}