package pt.ist.fenixframework.backend.jvstmmem; 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 JVSTMMemBackEnd implements BackEnd { protected static final String BACKEND_NAME = "jvstmmem"; private final TransactionManager transactionManager; public JVSTMMemBackEnd() { transactionManager = new JVSTMMemTransactionManager(); } @Override public <T extends DomainObject> T fromOid(Object oid) { return (T) SharedIdentityMap.getCache().lookup(oid); } @Override public <T extends DomainObject> T getDomainObject(String externalId) { return fromOid(Long.parseLong(externalId)); } @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 it root = fromOid(1L); assert root != null; } return root; } @Override public String getName() { return BACKEND_NAME; } @Override public TransactionManager getTransactionManager() { return transactionManager; } @Override public void shutdown() { } }