package pt.ist.fenixframework.backend.ogm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.hibernate.ogm.jpa.impl.OgmEntityManager;
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.AbstractDomainObject;
import pt.ist.fenixframework.core.DomainObjectAllocator;
import pt.ist.fenixframework.core.Externalization;
import pt.ist.fenixframework.core.IdentityMap;
import pt.ist.fenixframework.core.SharedIdentityMap;
public class OgmBackEnd implements BackEnd {
private static final Logger logger = LoggerFactory.getLogger(OgmBackEnd.class);
public static final String BACKEND_NAME = "ogm";
private static final OgmBackEnd instance = new OgmBackEnd();
protected final OgmTransactionManager transactionManager;
private OgmBackEnd() {
this.transactionManager = new OgmTransactionManager();
}
public static OgmBackEnd getInstance() {
return instance;
}
@Override
public String getName() {
return BACKEND_NAME;
}
@Override
public DomainRoot getDomainRoot() {
OgmOID rootId = OgmOID.ROOT_OBJECT_ID;
DomainRoot domainRoot = fromOid(rootId);
if (domainRoot == null) {
domainRoot = new DomainRoot();
}
return domainRoot;
}
@Override
public <T extends DomainObject> T getDomainObject(String externalId) {
return fromOid(new OgmOID(externalId));
}
@Override
public OgmTransactionManager getTransactionManager() {
return this.transactionManager;
}
@Override
public <T extends DomainObject> T fromOid(Object oid) {
OgmOID internalId = (OgmOID)oid;
if (logger.isTraceEnabled()) {
logger.trace("fromOid(" + internalId + ")");
}
return (T)transactionManager.getEntityManager().find(internalId.getObjClass(),
internalId.getPrimaryKey());
}
@Override
public void shutdown() {
transactionManager.emf.close();
}
protected void configOgm(OgmConfig config) throws Exception {
transactionManager.setupTxManager(config);
config.waitForExpectedInitialNodes("backend-ogm-init-barrier");
}
public void save(AbstractDomainObject obj) {
logger.debug("Saving " + obj.getClass());
transactionManager.getEntityManager().persist(obj);
}
// protected IdentityMap getIdentityMap() {
// return SharedIdentityMap.getCache();
// }
}