Search in sources :

Example 1 with PoolingConnectionFactory

use of bitronix.tm.resource.jms.PoolingConnectionFactory in project iaf by ibissource.

the class EsbUtils method setupJmsConnectionFactory.

private static PoolingConnectionFactory setupJmsConnectionFactory(String url, String userName, String password) {
    String serverUrl = StringUtils.replace(url, "tibjmsnaming:", "tcp:");
    log.debug("setting up JmsConnectionFactory url [" + serverUrl + "] username [" + userName + "] password [" + StringUtils.repeat("*", password.length()) + "]");
    PoolingConnectionFactory jmsConnectionFactory = new PoolingConnectionFactory();
    jmsConnectionFactory.setClassName("com.tibco.tibjms.TibjmsXAConnectionFactory");
    jmsConnectionFactory.setUniqueName("tibcojms");
    jmsConnectionFactory.setMaxPoolSize(5);
    jmsConnectionFactory.setAllowLocalTransactions(true);
    jmsConnectionFactory.setUser(userName);
    jmsConnectionFactory.setPassword(password);
    jmsConnectionFactory.getDriverProperties().setProperty("serverUrl", serverUrl);
    jmsConnectionFactory.init();
    return jmsConnectionFactory;
}
Also used : PoolingConnectionFactory(bitronix.tm.resource.jms.PoolingConnectionFactory)

Example 2 with PoolingConnectionFactory

use of bitronix.tm.resource.jms.PoolingConnectionFactory in project iaf by ibissource.

the class EsbUtils method receiveMessageAndMoveToErrorStorage.

public static String receiveMessageAndMoveToErrorStorage(EsbJmsListener esbJmsListener, JdbcTransactionalStorage errorStorage) {
    String result = null;
    PoolingConnectionFactory jmsConnectionFactory = null;
    PoolingDataSource jdbcDataSource = null;
    BitronixTransactionManager btm = null;
    javax.jms.Connection jmsConnection = null;
    try {
        jmsConnectionFactory = getPoolingConnectionFactory(esbJmsListener);
        if (jmsConnectionFactory != null) {
            jdbcDataSource = getPoolingDataSource(errorStorage);
            if (jdbcDataSource != null) {
                String instanceNameLc = AppConstants.getInstance().getString("instance.name.lc", null);
                String logDir = AppConstants.getInstance().getString("log.dir", null);
                TransactionManagerServices.getConfiguration().setServerId(instanceNameLc + ".tm");
                TransactionManagerServices.getConfiguration().setLogPart1Filename(logDir + File.separator + instanceNameLc + "-btm1.tlog");
                TransactionManagerServices.getConfiguration().setLogPart2Filename(logDir + File.separator + instanceNameLc + "-btm2.tlog");
                btm = TransactionManagerServices.getTransactionManager();
                jmsConnection = jmsConnectionFactory.createConnection();
                Session jmsSession = null;
                MessageConsumer jmsConsumer = null;
                java.sql.Connection jdbcConnection = null;
                btm.begin();
                log.debug("started transaction [" + btm.getCurrentTransaction().getGtrid() + "]");
                try {
                    jmsSession = jmsConnection.createSession(true, Session.AUTO_ACKNOWLEDGE);
                    String queueName = esbJmsListener.getPhysicalDestinationShortName();
                    Queue queue = jmsSession.createQueue(queueName);
                    jmsConsumer = jmsSession.createConsumer(queue);
                    jmsConnection.start();
                    long timeout = 30000;
                    log.debug("looking for message on queue [" + queueName + "] with timeout of [" + timeout + "] msec");
                    Message rawMessage = jmsConsumer.receive(timeout);
                    if (rawMessage == null) {
                        log.debug("no message found on queue [" + queueName + "]");
                    } else {
                        String id = rawMessage.getJMSMessageID();
                        log.debug("found message on queue [" + queueName + "] with messageID [" + id + "]");
                        Serializable sobj = null;
                        if (rawMessage != null) {
                            if (rawMessage instanceof Serializable) {
                                sobj = (Serializable) rawMessage;
                            } else {
                                try {
                                    sobj = new MessageWrapper(rawMessage, esbJmsListener);
                                } catch (ListenerException e) {
                                    log.error("could not wrap non serializable message for messageId [" + id + "]", e);
                                    if (rawMessage instanceof TextMessage) {
                                        TextMessage textMessage = (TextMessage) rawMessage;
                                        sobj = textMessage.getText();
                                    } else {
                                        sobj = rawMessage.toString();
                                    }
                                }
                            }
                        }
                        jdbcConnection = jdbcDataSource.getConnection();
                        result = errorStorage.storeMessage(jdbcConnection, id, id, new Date(System.currentTimeMillis()), "moved message", null, sobj);
                    }
                    log.debug("committing transaction [" + btm.getCurrentTransaction().getGtrid() + "]");
                    btm.commit();
                } catch (Exception e) {
                    if (btm.getCurrentTransaction() != null) {
                        log.debug("rolling back transaction [" + btm.getCurrentTransaction().getGtrid() + "]");
                        btm.rollback();
                    }
                    log.error("exception on receiving message and moving to errorStorage", e);
                } finally {
                    if (jdbcConnection != null) {
                        jdbcConnection.close();
                    }
                    if (jmsConnection != null) {
                        jmsConnection.stop();
                    }
                    if (jmsConsumer != null) {
                        jmsConsumer.close();
                    }
                    if (jmsSession != null) {
                        jmsSession.close();
                    }
                }
            }
        }
    } catch (Exception e) {
        log.error("exception on receiving message and moving to errorStorage", e);
    } finally {
        if (jmsConnection != null) {
            try {
                jmsConnection.close();
            } catch (JMSException e) {
                log.warn("exception on closing connection", e);
            }
        }
        if (jmsConnectionFactory != null) {
            jmsConnectionFactory.close();
        }
        if (jdbcDataSource != null) {
            jdbcDataSource.close();
        }
        if (btm != null) {
            btm.shutdown();
        }
    }
    return result;
}
Also used : PoolingDataSource(bitronix.tm.resource.jdbc.PoolingDataSource) MessageConsumer(javax.jms.MessageConsumer) Serializable(java.io.Serializable) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) JMSException(javax.jms.JMSException) BitronixTransactionManager(bitronix.tm.BitronixTransactionManager) Date(java.util.Date) JdbcException(nl.nn.adapterframework.jdbc.JdbcException) SQLException(java.sql.SQLException) ListenerException(nl.nn.adapterframework.core.ListenerException) JmsException(nl.nn.adapterframework.jms.JmsException) IOException(java.io.IOException) JMSException(javax.jms.JMSException) PoolingConnectionFactory(bitronix.tm.resource.jms.PoolingConnectionFactory) ListenerException(nl.nn.adapterframework.core.ListenerException) MessageWrapper(nl.nn.adapterframework.receivers.MessageWrapper) Queue(javax.jms.Queue) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session)

Aggregations

PoolingConnectionFactory (bitronix.tm.resource.jms.PoolingConnectionFactory)2 BitronixTransactionManager (bitronix.tm.BitronixTransactionManager)1 PoolingDataSource (bitronix.tm.resource.jdbc.PoolingDataSource)1 IOException (java.io.IOException)1 Serializable (java.io.Serializable)1 SQLException (java.sql.SQLException)1 Date (java.util.Date)1 JMSException (javax.jms.JMSException)1 Message (javax.jms.Message)1 MessageConsumer (javax.jms.MessageConsumer)1 Queue (javax.jms.Queue)1 Session (javax.jms.Session)1 TextMessage (javax.jms.TextMessage)1 ListenerException (nl.nn.adapterframework.core.ListenerException)1 JdbcException (nl.nn.adapterframework.jdbc.JdbcException)1 JmsException (nl.nn.adapterframework.jms.JmsException)1 MessageWrapper (nl.nn.adapterframework.receivers.MessageWrapper)1