package org.atteo.moonshine.orientdb; import com.google.inject.AbstractModule; import com.google.inject.Module; import com.google.inject.Provider; import com.google.inject.persist.PersistService; import com.google.inject.servlet.RequestScoped; import com.orientechnologies.orient.core.config.OGlobalConfiguration; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentPool; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; import org.atteo.config.XmlDefaultValue; import org.atteo.moonshine.TopLevelService; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "orientdb") public class OrientDb extends TopLevelService { @XmlElement(name = "url") @XmlDefaultValue("local:${dataHome}/orientdb") private String url; @XmlElement(name = "autocreate") @XmlDefaultValue("true") private Boolean autocreate; @XmlElement @XmlDefaultValue("admin") private String username; @XmlElement @XmlDefaultValue("admin") private String password; @XmlElement(name = "pool-timeout") @XmlDefaultValue("600000") private Integer poolTimeout; private PersistService persistService; private Provider<ODatabaseDocumentTx> provider = new Provider<ODatabaseDocumentTx>() { @Override public ODatabaseDocumentTx get() { return ODatabaseDocumentPool.global().acquire(url, username, password); } }; public String getUrl() { return url; } public String getUsername() { return username; } public String getPassword() { return password; } public Boolean getAutocreate() { return autocreate; } @Override public Module configure() { return new AbstractModule() { @Override protected void configure() { OGlobalConfiguration.CLIENT_CONNECT_POOL_WAIT_TIMEOUT.setValue(poolTimeout); bind(ODatabaseDocumentTx.class).toProvider(provider).in(RequestScoped.class); } }; } @Override public void start() { if (getAutocreate()) { ODatabaseDocumentTx db = new ODatabaseDocumentTx(url); if (!db.exists()) { db.create(); } db.close(); } } @Override public void stop() { } }