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.

Reply via email to