diff --git a/pom.xml b/pom.xml
index 9133818..227991c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,17 +60,17 @@
https://oss.sonatype.org/content/repositories/snapshots/
- 1.7.9
+ 1.7.10
1.1.2
2.0-rc1
1.8.4
- 4.1.3.RELEASE
+ 4.1.4.RELEASE
1.9.1.RELEASE
1.2.0.RELEASE
- 3.5.0
- 1.3.4
+ 3.5.1
+ 1.4.1
4.12
- 6.8.8
+ 6.8.13
2.4.0
diff --git a/spring-boot-orientdb-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orient/OrientAutoConfiguration.java b/spring-boot-orientdb-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orient/OrientAutoConfiguration.java
index ad8b6bf..87e0577 100644
--- a/spring-boot-orientdb-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orient/OrientAutoConfiguration.java
+++ b/spring-boot-orientdb-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orient/OrientAutoConfiguration.java
@@ -1,5 +1,6 @@
package org.springframework.boot.autoconfigure.orient;
+import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.object.db.OObjectDatabaseTx;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -10,8 +11,11 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.orient.commons.core.OrientDatabaseFactory;
+import org.springframework.data.orient.commons.core.OrientOperations;
import org.springframework.data.orient.commons.core.OrientTransactionManager;
import org.springframework.data.orient.document.OrientDocumentDatabaseFactory;
+import org.springframework.data.orient.document.OrientDocumentOperations;
+import org.springframework.data.orient.document.OrientDocumentTemplate;
import org.springframework.data.orient.object.OrientObjectDatabaseFactory;
import org.springframework.data.orient.object.OrientObjectOperations;
import org.springframework.data.orient.object.OrientObjectTemplate;
@@ -61,6 +65,13 @@ public OrientObjectTemplate objectTemplate(OrientObjectDatabaseFactory factory)
return new OrientObjectTemplate(factory);
}
+ @Bean
+ @ConditionalOnClass(ODatabaseDocumentTx.class)
+ @ConditionalOnMissingBean(OrientDocumentOperations.class)
+ public OrientDocumentTemplate documentTemplate(OrientDocumentDatabaseFactory factory) {
+ return new OrientDocumentTemplate(factory);
+ }
+
@Bean
@ConditionalOnWebApplication
@ConditionalOnClass(OObjectDatabaseTx.class)
diff --git a/spring-data-orientdb-commons/pom.xml b/spring-data-orientdb-commons/pom.xml
index 2e1e1b0..1cba99b 100644
--- a/spring-data-orientdb-commons/pom.xml
+++ b/spring-data-orientdb-commons/pom.xml
@@ -59,11 +59,6 @@
com.orientechnologies
orientdb-client
-
-
- com.orientechnologies
- orientdb-object
-
diff --git a/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientDatabaseFactory.java b/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientDatabaseFactory.java
index bb19012..b0f611d 100644
--- a/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientDatabaseFactory.java
+++ b/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientDatabaseFactory.java
@@ -1,29 +1,31 @@
package org.springframework.data.orient.commons.core;
+import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.db.ODatabaseInternal;
import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.Assert;
import javax.annotation.PostConstruct;
+import static org.springframework.util.Assert.notNull;
+
/**
* A base factory for creating {@link com.orientechnologies.orient.core.db.ODatabase} objects.
*
* @author Dzmitry_Naskou
* @param the type of database to handle
*/
-public abstract class AbstractOrientDatabaseFactory> implements OrientDatabaseFactory {
+public abstract class AbstractOrientDatabaseFactory implements OrientDatabaseFactory {
/** The logger. */
private static Logger log = LoggerFactory.getLogger(AbstractOrientDatabaseFactory.class);
/** The username. */
- protected String username;
+ protected String username = DEFAULT_USERNAME;
/** The password. */
- protected String password;
+ protected String password = DEFAULT_PASSWORD;
/** The min pool size. */
protected int minPoolSize = DEFAULT_MIN_POOL_SIZE;
@@ -31,15 +33,21 @@ public abstract class AbstractOrientDatabaseFactory db = newDatabase();
+ if(autoCreate==null) {
+ autoCreate = !getUrl().startsWith("remote:");
+ }
+
+ ODatabase> db = newDatabase();
createDatabase(db);
createPool();
}
@@ -51,25 +59,31 @@ public void init() {
*
* @return the o database complex
*/
- public abstract ODatabaseInternal> openDatabase();
+ public abstract ODatabase openDatabase();
protected abstract ODatabaseInternal> newDatabase();
- public ODatabaseInternal> db() {
- ODatabaseInternal> db;
+ public ODatabase db() {
+ ODatabase db;
if(!ODatabaseRecordThreadLocal.INSTANCE.isDefined()) {
db = openDatabase();
log.debug("acquire db from pool {}", db.hashCode());
} else {
- db = ODatabaseRecordThreadLocal.INSTANCE.get().getDatabaseOwner();
- log.debug("use existing db {}", db.hashCode());
+ db = (ODatabase)ODatabaseRecordThreadLocal.INSTANCE.get().getDatabaseOwner();
+
+ if(db.isClosed()) {
+ db = openDatabase();
+ log.debug("re-opened db {}", db.hashCode());
+ } else {
+ log.debug("use existing db {}", db.hashCode());
+ }
}
return db;
}
- protected void createDatabase(ODatabaseInternal> db) {
- if (!getUrl().startsWith("remote:")) {
+ protected void createDatabase(ODatabase> db) {
+ if (autoCreate) {
if (!db.exists()) {
db.create();
db.close();
@@ -166,4 +180,12 @@ public int getMaxPoolSize() {
public void setMaxPoolSize(int maxPoolSize) {
this.maxPoolSize = maxPoolSize;
}
+
+ public Boolean getAutoCreate() {
+ return autoCreate;
+ }
+
+ public void setAutoCreate(Boolean autoCreate) {
+ this.autoCreate = autoCreate;
+ }
}
diff --git a/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientOperations.java b/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientOperations.java
new file mode 100644
index 0000000..d7da32b
--- /dev/null
+++ b/spring-data-orientdb-commons/src/main/java/org/springframework/data/orient/commons/core/AbstractOrientOperations.java
@@ -0,0 +1,619 @@
+package org.springframework.data.orient.commons.core;
+
+import com.orientechnologies.common.exception.OException;
+import com.orientechnologies.orient.core.cache.OLocalRecordCache;
+import com.orientechnologies.orient.core.command.OCommandOutputListener;
+import com.orientechnologies.orient.core.command.OCommandRequest;
+import com.orientechnologies.orient.core.db.ODatabase;
+import com.orientechnologies.orient.core.db.ODatabaseListener;
+import com.orientechnologies.orient.core.db.record.OIdentifiable;
+import com.orientechnologies.orient.core.dictionary.ODictionary;
+import com.orientechnologies.orient.core.exception.OTransactionException;
+import com.orientechnologies.orient.core.hook.ORecordHook;
+import com.orientechnologies.orient.core.id.ORID;
+import com.orientechnologies.orient.core.id.ORecordId;
+import com.orientechnologies.orient.core.intent.OIntent;
+import com.orientechnologies.orient.core.metadata.OMetadata;
+import com.orientechnologies.orient.core.metadata.schema.OClass;
+import com.orientechnologies.orient.core.metadata.security.OSecurityUser;
+import com.orientechnologies.orient.core.metadata.security.OUser;
+import com.orientechnologies.orient.core.query.OQuery;
+import com.orientechnologies.orient.core.record.impl.ODocument;
+import com.orientechnologies.orient.core.sql.OCommandSQL;
+import com.orientechnologies.orient.core.sql.query.OSQLQuery;
+import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
+import com.orientechnologies.orient.core.storage.ORecordCallback;
+import com.orientechnologies.orient.core.storage.ORecordMetadata;
+import com.orientechnologies.orient.core.storage.OStorage;
+import com.orientechnologies.orient.core.tx.OTransaction;
+import com.orientechnologies.orient.core.version.ORecordVersion;
+import org.springframework.data.orient.commons.repository.DetachMode;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.*;
+import java.util.concurrent.Callable;
+
+public abstract class AbstractOrientOperations implements OrientOperations {
+ //private static final Logger logger = LoggerFactory.getLogger(AbstractOrientOperations.class);
+
+ protected final OrientDatabaseFactory dbf;
+
+ protected Set defaultClusters;
+
+ protected AbstractOrientOperations(OrientDatabaseFactory dbf) {
+ this.dbf = dbf;
+ }
+
+ @Override
+ public String getName() {
+ return dbf.db().getName();
+ }
+
+ @Override
+ public String getURL() {
+ return dbf.db().getURL();
+ }
+
+ @Override
+ public ODatabase database() {
+ return dbf.db();
+ }
+
+ @Override
+ public Object setProperty(String name, Object value) {
+ return dbf.db().setProperty(name, value);
+ }
+
+ @Override
+ public Object getProperty(String name) {
+ return dbf.db().getProperty(name);
+ }
+
+ @Override
+ public Iterator> getProperties() {
+ return dbf.db().getProperties();
+ }
+
+ @Override
+ public Object get(ODatabase.ATTRIBUTES attribute) {
+ return dbf.db().get(attribute);
+ }
+
+ @Override
+ public > DB set(ODatabase.ATTRIBUTES attribute, Object value) {
+ return dbf.db().set(attribute, value);
+ }
+
+ @Override
+ public void registerListener(ODatabaseListener listener) {
+ dbf.db().registerListener(listener);
+ }
+
+ @Override
+ public void unregisterListener(ODatabaseListener listener) {
+ dbf.db().unregisterListener(listener);
+ }
+
+ @Override
+ public Map getHooks() {
+ return dbf.db().getHooks();
+ }
+
+ @Override
+ public > DB registerHook(ORecordHook hook) {
+ return dbf.db().registerHook(hook);
+ }
+
+ @Override
+ public > DB registerHook(ORecordHook hook, ORecordHook.HOOK_POSITION position) {
+ return dbf.db().registerHook(hook, position);
+ }
+
+ @Override
+ public > DB unregisterHook(ORecordHook hook) {
+ return dbf.db().unregisterHook(hook);
+ }
+
+ @Override
+ public ORecordHook.RESULT callbackHooks(ORecordHook.TYPE type, OIdentifiable id) {
+ return dbf.db().callbackHooks(type, id);
+ }
+
+ @Override
+ public void backup(OutputStream out, Map options, Callable