Search in sources :

Example 1 with Node

use of org.jboss.cache.Node in project jain-sip.ha by RestComm.

the class ClientTransactionCacheData method putClientTransaction.

public void putClientTransaction(SIPClientTransaction clientTransaction) throws SipCacheException {
    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        logger.logStackTrace();
    }
    final MobicentsHASIPClientTransaction haClientTransaction = (MobicentsHASIPClientTransaction) clientTransaction;
    final String transactionId = haClientTransaction.getTransactionId();
    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        logger.logDebug("put HA SIP Client Transaction " + clientTransaction + " with id " + transactionId);
    }
    final Cache jbossCache = getMobicentsCache().getJBossCache();
    TransactionManager transactionManager = jbossCache.getConfiguration().getRuntimeConfig().getTransactionManager();
    boolean doTx = false;
    try {
        if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
            logger.logDebug("transaction manager :" + transactionManager);
        }
        if (transactionManager != null && transactionManager.getTransaction() == null) {
            if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                logger.logDebug("transaction manager begin transaction");
            }
            transactionManager.begin();
            doTx = true;
        }
        final Node childNode = getNode().addChild(Fqn.fromElements(transactionId));
        for (Entry<String, Object> metaData : haClientTransaction.getMetaDataToReplicate().entrySet()) {
            childNode.put(metaData.getKey(), metaData.getValue());
        }
        final Object transactionAppData = haClientTransaction.getApplicationDataToReplicate();
        if (transactionAppData != null) {
            if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                logger.logDebug("replicating application data " + transactionAppData);
            }
            childNode.put(APPDATA, transactionAppData);
        }
    } catch (Exception ex) {
        try {
            if (transactionManager != null) {
                // Let's set it no matter what.
                transactionManager.setRollbackOnly();
            }
        } catch (Exception exn) {
            logger.logError("Problem rolling back session mgmt transaction", exn);
        }
    } finally {
        if (doTx) {
            try {
                if (transactionManager.getTransaction().getStatus() != Status.STATUS_MARKED_ROLLBACK) {
                    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                        logger.logDebug("transaction manager committing transaction");
                    }
                    transactionManager.commit();
                } else {
                    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                        logger.logDebug("endBatch(): rolling back batch");
                    }
                    transactionManager.rollback();
                }
            } catch (RollbackException re) {
                // Do nothing here since cache may rollback automatically.
                logger.logWarning("endBatch(): rolling back transaction with exception: " + re);
            } catch (RuntimeException re) {
                throw re;
            } catch (Exception e) {
                throw new RuntimeException("endTransaction(): Caught Exception ending batch: ", e);
            }
        }
    }
}
Also used : MobicentsHASIPClientTransaction(gov.nist.javax.sip.stack.MobicentsHASIPClientTransaction) TransactionManager(javax.transaction.TransactionManager) Node(org.jboss.cache.Node) RollbackException(javax.transaction.RollbackException) IOException(java.io.IOException) CacheException(org.jboss.cache.CacheException) RollbackException(javax.transaction.RollbackException) ParseException(java.text.ParseException) PeerUnavailableException(javax.sip.PeerUnavailableException) MobicentsCache(org.mobicents.cache.MobicentsCache) Cache(org.jboss.cache.Cache)

Example 2 with Node

use of org.jboss.cache.Node in project jain-sip.ha by RestComm.

the class JBossSipCache method putServerTransaction.

public void putServerTransaction(SIPServerTransaction serverTransaction) throws SipCacheException {
    UserTransaction tx = null;
    try {
        Properties prop = new Properties();
        prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.cache.transaction.DummyContextFactory");
        tx = (UserTransaction) new InitialContext(prop).lookup("UserTransaction");
        if (tx != null) {
            tx.begin();
        }
        Node serverTransactionNode = serverTxRootNode.addChild(Fqn.fromString(serverTransaction.getTransactionId()));
        serverTransactionNode.put(serverTransaction.getTransactionId(), serverTransaction);
        if (tx != null) {
            tx.commit();
        }
    } catch (Exception e) {
        if (tx != null) {
            try {
                tx.rollback();
            } catch (Throwable t) {
            }
        }
        throw new SipCacheException("A problem occured while putting the following server transaction " + serverTransaction.getTransactionId() + "  into JBoss Cache", e);
    }
}
Also used : UserTransaction(javax.transaction.UserTransaction) Node(org.jboss.cache.Node) Properties(java.util.Properties) InitialContext(javax.naming.InitialContext) CacheException(org.jboss.cache.CacheException)

Example 3 with Node

use of org.jboss.cache.Node in project jain-sip.ha by RestComm.

the class JBossSipCache method putDialog.

/* (non-Javadoc)
	 * @see org.mobicents.ha.javax.sip.cache.SipCache#putDialog(gov.nist.javax.sip.stack.SIPDialog)
	 */
public void putDialog(SIPDialog dialog) throws SipCacheException {
    UserTransaction tx = null;
    try {
        Properties prop = new Properties();
        prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.cache.transaction.DummyContextFactory");
        tx = (UserTransaction) new InitialContext(prop).lookup("UserTransaction");
        if (tx != null) {
            tx.begin();
        }
        Node dialogNode = dialogRootNode.addChild(Fqn.fromString(dialog.getDialogId()));
        dialogNode.put(dialog.getDialogId(), dialog);
        if (tx != null) {
            tx.commit();
        }
    } catch (Exception e) {
        if (tx != null) {
            try {
                tx.rollback();
            } catch (Throwable t) {
            }
        }
        throw new SipCacheException("A problem occured while putting the following dialog " + dialog.getDialogId() + "  into JBoss Cache", e);
    }
}
Also used : UserTransaction(javax.transaction.UserTransaction) Node(org.jboss.cache.Node) Properties(java.util.Properties) InitialContext(javax.naming.InitialContext) CacheException(org.jboss.cache.CacheException)

Example 4 with Node

use of org.jboss.cache.Node in project jain-sip.ha by RestComm.

the class ServerTransactionCacheData method putServerTransaction.

public void putServerTransaction(SIPServerTransaction serverTransaction) throws SipCacheException {
    if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        clusteredlogger.logStackTrace();
    }
    final MobicentsHASIPServerTransaction haServerTransaction = (MobicentsHASIPServerTransaction) serverTransaction;
    final String transactionId = haServerTransaction.getTransactionId();
    if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        clusteredlogger.logDebug("put HA SIP Server Transaction " + serverTransaction + " with id " + transactionId);
    }
    final Cache jbossCache = getMobicentsCache().getJBossCache();
    TransactionManager transactionManager = jbossCache.getConfiguration().getRuntimeConfig().getTransactionManager();
    boolean doTx = false;
    try {
        if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
            clusteredlogger.logDebug("transaction manager :" + transactionManager);
        }
        if (transactionManager != null && transactionManager.getTransaction() == null) {
            if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                clusteredlogger.logDebug("transaction manager begin transaction");
            }
            transactionManager.begin();
            doTx = true;
        }
        final Node childNode = getNode().addChild(Fqn.fromElements(transactionId));
        for (Entry<String, Object> metaData : haServerTransaction.getMetaDataToReplicate().entrySet()) {
            childNode.put(metaData.getKey(), metaData.getValue());
        }
        final Object transactionAppData = haServerTransaction.getApplicationDataToReplicate();
        if (transactionAppData != null) {
            childNode.put(APPDATA, transactionAppData);
        }
    } catch (Exception ex) {
        try {
            if (transactionManager != null) {
                // Let's set it no matter what.
                transactionManager.setRollbackOnly();
            }
        } catch (Exception exn) {
            clusteredlogger.logError("Problem rolling back session mgmt transaction", exn);
        }
    } finally {
        if (doTx) {
            try {
                if (transactionManager.getTransaction().getStatus() != Status.STATUS_MARKED_ROLLBACK) {
                    if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                        clusteredlogger.logDebug("transaction manager committing transaction");
                    }
                    transactionManager.commit();
                } else {
                    if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                        clusteredlogger.logDebug("endBatch(): rolling back batch");
                    }
                    transactionManager.rollback();
                }
            } catch (RollbackException re) {
                // Do nothing here since cache may rollback automatically.
                clusteredlogger.logWarning("endBatch(): rolling back transaction with exception: " + re);
            } catch (RuntimeException re) {
                throw re;
            } catch (Exception e) {
                throw new RuntimeException("endTransaction(): Caught Exception ending batch: ", e);
            }
        }
    }
}
Also used : MobicentsHASIPServerTransaction(gov.nist.javax.sip.stack.MobicentsHASIPServerTransaction) TransactionManager(javax.transaction.TransactionManager) Node(org.jboss.cache.Node) RollbackException(javax.transaction.RollbackException) IOException(java.io.IOException) CacheException(org.jboss.cache.CacheException) RollbackException(javax.transaction.RollbackException) ParseException(java.text.ParseException) PeerUnavailableException(javax.sip.PeerUnavailableException) MobicentsCache(org.mobicents.cache.MobicentsCache) Cache(org.jboss.cache.Cache)

Example 5 with Node

use of org.jboss.cache.Node in project jain-sip.ha by RestComm.

the class SIPDialogCacheData method putSIPDialog.

public void putSIPDialog(SIPDialog dialog) throws SipCacheException {
    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        logger.logStackTrace();
    }
    final HASipDialog haSipDialog = (HASipDialog) dialog;
    final String dialogId = haSipDialog.getDialogIdToReplicate();
    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        logger.logDebug("put HA SIP Dialog " + dialog + " with dialog " + dialogId);
    }
    final Cache jbossCache = getMobicentsCache().getJBossCache();
    TransactionManager transactionManager = jbossCache.getConfiguration().getRuntimeConfig().getTransactionManager();
    boolean doTx = false;
    try {
        if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
            logger.logDebug("transaction manager :" + transactionManager);
        }
        if (transactionManager != null && transactionManager.getTransaction() == null) {
            if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                logger.logDebug("transaction manager begin transaction");
            }
            transactionManager.begin();
            doTx = true;
        }
        final Node childNode = getNode().addChild(Fqn.fromElements(dialogId));
        for (Entry<String, Object> metaData : haSipDialog.getMetaDataToReplicate().entrySet()) {
            childNode.put(metaData.getKey(), metaData.getValue());
        }
        final Object dialogAppData = haSipDialog.getApplicationDataToReplicate();
        if (dialogAppData != null) {
            childNode.put(APPDATA, dialogAppData);
        }
    } catch (Exception ex) {
        try {
            if (transactionManager != null) {
                // Let's set it no matter what.
                transactionManager.setRollbackOnly();
            }
        } catch (Exception exn) {
            logger.logError("Problem rolling back session mgmt transaction", exn);
        }
    } finally {
        if (doTx) {
            try {
                if (transactionManager.getTransaction().getStatus() != Status.STATUS_MARKED_ROLLBACK) {
                    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                        logger.logDebug("transaction manager committing transaction");
                    }
                    transactionManager.commit();
                } else {
                    if (logger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
                        logger.logDebug("endBatch(): rolling back batch");
                    }
                    transactionManager.rollback();
                }
            } catch (RollbackException re) {
                // Do nothing here since cache may rollback automatically.
                logger.logWarning("endBatch(): rolling back transaction with exception: " + re);
            } catch (RuntimeException re) {
                throw re;
            } catch (Exception e) {
                throw new RuntimeException("endTransaction(): Caught Exception ending batch: ", e);
            }
        }
    }
}
Also used : HASipDialog(org.mobicents.ha.javax.sip.HASipDialog) AbstractHASipDialog(gov.nist.javax.sip.stack.AbstractHASipDialog) TransactionManager(javax.transaction.TransactionManager) Node(org.jboss.cache.Node) RollbackException(javax.transaction.RollbackException) CacheException(org.jboss.cache.CacheException) RollbackException(javax.transaction.RollbackException) ParseException(java.text.ParseException) PeerUnavailableException(javax.sip.PeerUnavailableException) Cache(org.jboss.cache.Cache) MobicentsCache(org.mobicents.cache.MobicentsCache)

Aggregations

CacheException (org.jboss.cache.CacheException)6 Node (org.jboss.cache.Node)6 ParseException (java.text.ParseException)3 Properties (java.util.Properties)3 InitialContext (javax.naming.InitialContext)3 PeerUnavailableException (javax.sip.PeerUnavailableException)3 RollbackException (javax.transaction.RollbackException)3 TransactionManager (javax.transaction.TransactionManager)3 UserTransaction (javax.transaction.UserTransaction)3 Cache (org.jboss.cache.Cache)3 MobicentsCache (org.mobicents.cache.MobicentsCache)3 IOException (java.io.IOException)2 AbstractHASipDialog (gov.nist.javax.sip.stack.AbstractHASipDialog)1 MobicentsHASIPClientTransaction (gov.nist.javax.sip.stack.MobicentsHASIPClientTransaction)1 MobicentsHASIPServerTransaction (gov.nist.javax.sip.stack.MobicentsHASIPServerTransaction)1 HASipDialog (org.mobicents.ha.javax.sip.HASipDialog)1