Hi Jörg,
I implement some code for spring transaction manager orientdb integration.
I am sharing with you. I hope this can be helpfull and it has still need
improvement. But It can gives you an idea.
public class OrientTransactionManager extends
AbstractPlatformTransactionManager implements ResourceTransactionManager {
private static final long serialVersionUID = 1L;
/**
* The logger.
*/
private static Logger log =
LoggerFactory.getLogger(OrientTransactionManager.class);
/**
* The database factory.
*/
private OrientDBFactory dbf;
/**
* Instantiates a new {@link OrientTransactionManager}.
*
* @param dbf the dbf
*/
public OrientTransactionManager(OrientDBFactory dbf) {
super();
this.dbf = dbf;
}
/* (non-Javadoc)
* @see
org.springframework.transaction.support.AbstractPlatformTransactionManager#doGetTransaction()
*/
@Override
protected Object doGetTransaction() throws TransactionException {
TransactionHolder transactionHolder = (TransactionHolder)
TransactionSynchronizationManager.getResource(OrientBaseGraph.class);
if (transactionHolder==null){
OrientBaseGraph orientGraph = dbf.getGraph();
transactionHolder = new TransactionHolder(orientGraph);
TransactionSynchronizationManager.bindResource(dbf,
transactionHolder);
}
return transactionHolder;
}
/* (non-Javadoc)
* @see
org.springframework.transaction.support.AbstractPlatformTransactionManager#doBegin(java.lang.Object,
org.springframework.transaction.TransactionDefinition)
*/
@Override
protected void doBegin(Object transaction, TransactionDefinition
definition) throws TransactionException {
TransactionHolder transactionHolder = (TransactionHolder)transaction;
transactionHolder.getOrientGraph().begin();
log.debug("beginning transaction, db.hashCode() = {}",
transactionHolder.getOrientGraph().hashCode());
}
/* (non-Javadoc)
* @see
org.springframework.transaction.support.AbstractPlatformTransactionManager#doCommit(org.springframework.transaction.support.DefaultTransactionStatus)
*/
@Override
protected void doCommit(DefaultTransactionStatus status) throws
TransactionException {
TransactionHolder transactionHolder =
(TransactionHolder)status.getTransaction();
log.debug("committing transaction, db.hashCode() = {}",
transactionHolder.getOrientGraph().hashCode());
transactionHolder.getOrientGraph().commit();
releaseConnection(transactionHolder);
}
/* (non-Javadoc)
* @see
org.springframework.transaction.support.AbstractPlatformTransactionManager#doRollback(org.springframework.transaction.support.DefaultTransactionStatus)
*/
@Override
protected void doRollback(DefaultTransactionStatus status) throws
TransactionException {
TransactionHolder transactionHolder =
(TransactionHolder)status.getTransaction();
log.debug("rollbacking transaction, db.hashCode() = {}",
transactionHolder.getOrientGraph().hashCode());
transactionHolder.getOrientGraph().rollback();
releaseConnection(transactionHolder);
}
protected void releaseConnection(TransactionHolder holder) {
holder.getOrientGraph().shutdown();
TransactionSynchronizationManager.unbindResource(dbf);
}
/* (non-Javadoc)
* @see
org.springframework.transaction.support.ResourceTransactionManager#getResourceFactory()
*/
@Override
public Object getResourceFactory() {
return dbf;
}
/**
* Gets the database factory for the database managed by this transaction
manager.
*
* @return the database
*/
public OrientDBFactory getDatabaseFactory() {
return dbf;
}
/**
* Sets the database factory for the database managed by this transaction
manager.
*
* @param databaseFactory the database to set
*/
public void setDatabaseFactory(OrientDBFactory databaseFactory) {
this.dbf = databaseFactory;
}
}
@Component
public class OrientDBFactory {
private static Logger log = LoggerFactory.getLogger(OrientDBFactory.class);
private OrientGraphFactory pool;
@Autowired
private OrientDBConnectionSettings settings;
@PostConstruct
public void initFactory() {
pool = new OrientGraphFactory(settings.getUrl(), settings.getUsr(),
settings.getPwd()).setupPool(settings.getMinConnection(),settings.getMaxConnection());
pool.setAutoStartTx(false);
pool.declareIntent(new OIntentMassiveInsert());
}
@PreDestroy
public void closeFactory(){
pool.close();
}
public OrientGraph getTxGraph() {
return pool.getTx();
}
public OrientGraphNoTx getGraph() {
return pool.getNoTx();
}
public void close() {
pool.close();
}
public OrientBaseGraph getCurrentDb(){
OrientGraphNoTx tx = (OrientGraphNoTx)OrientBaseGraph.getActiveGraph();
log.debug("orientdbfactory hash" + tx.hashCode());
return tx;
}
public OrientGraphFactory getPool() {
return pool;
}
public void setPool(OrientGraphFactory pool) {
this.pool = pool;
}
public OrientDBConnectionSettings getSettings() {
return settings;
}
public void setSettings(OrientDBConnectionSettings settings) {
this.settings = settings;
}
}
7 Mart 2016 Pazartesi 23:57:49 UTC+2 tarihinde Jörg Hohwiller yazdı:
>
> Status update:
> * 2-Way-Sync of Schema (OClass <--> OrientBean prototype) is not completed.
> * Regular mapping of ODocument to OrientBean and vice versa are now
> completely working.
> * Spring-TX support has been implemented
> * Spring-data repository with its operations is the next step...
>
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.