Actually the database error was caused by the producer code. Can anybody
point me out what is wrong with this one?
I don't use failover transport and i am closing both the session and
producer.
If i dont use createSession(true, Session.TRANSACTED) I run oout of db
connections in 40 messages which is also the default for PostgresSQL. The
maximum set in the datasource is appearantly not used.

Can anybody point out a mistake in the next code (a thread with a loop ? Is
it me or ActiveMQ?


    // ========== Static variables ================

    protected static long SLEEP_INTERVAL = 1000; //  1 seconds
    protected static boolean stopProcessing = false;

    // ============= Private variables ====================
        protected static Log log =
LogFactory.getLog(WitsTestMessageGeneratorThread.class);
        protected static Log sysadminLog =
LogFactory.getLog(Constants.SYSADMIN_LOGGER);
        /**
     * this boolean controls whether an alert has already been sent. It
prevents this class bombarding
     * administrators with email alerts
     */
    protected boolean errorAlerted = false;
    protected int errorCount = 0;
    protected javax.jms.Connection connection;
    protected javax.jms.Destination destination;
    protected Session session;
    protected MessageProducer producer;
    protected boolean queueInitialized;
    private String user = PrimeConnection.DEFAULT_USER;
    private String password = PrimeConnection.DEFAULT_PASSWORD;
    private String url = PrimeConnection.DEFAULT_BROKER_URL;
    private String destinationName = PrimeConnection.DESTINATION_NAME;
    private boolean transacted = true;
    private boolean persistent = true;
    private long timeToLive;
        
    WitsTestMessageGeneratorThread() {
        super();
    }

   
    public synchronized void stopProcessing() {
        stopProcessing = true;
   }

    // ============= Public methods

    public void run() {

        stopProcessing = false;
        errorAlerted = false;
        long counter = 0L;
        try {
                while (!stopProcessing) {
                    if (log.isDebugEnabled()) {
                        log.debug("WitsTestMessageGeneratorThread");
                    }
                    try {
                        if (!checkEntryConditions()) {
                                if (log.isDebugEnabled()) {
                                        
log.debug("WitsTestMessageGeneratorThread entry
conditions not met, trying to create a connection");
                                }
                                try {
                                                        initQueue();
                                                } catch (JMSException e) {
                                                        log.error("Error 
initializing queue: " + e.getMessage(),e);                             
                                                        throw e;
                                                }
                                                
                                if (log.isDebugEnabled()) {
                                        log.debug("Connection created");
                                }
                                                
                        }
                        if (checkEntryConditions()) {
                                    try {
                                    // Create the session
                                    session = 
connection.createSession(transacted,
Session.SESSION_TRANSACTED);
                                    destination = 
session.createQueue(destinationName);
                                    // Create the producer.
                                    producer = 
session.createProducer(destination);
                                        if (log.isDebugEnabled()) {
                                                log.debug("Session and Producer 
created");
                                        }
                                    if (persistent) {
                                        
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
                                    } else {
                                       
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                                    }
                                    if (timeToLive != 0) {
                                        producer.setTimeToLive(timeToLive);
                                    }
                                    counter = counter + 1;
                                    String msgContent = "Test Message " + 
counter + ". Date:
" + new Date();
                                                        TextMessage msg = 
session.createTextMessage();
                                                        msg.setText(msgContent);
                                                        producer.send(msg);
                                        log.debug("Message " + msgContent + " 
sent to " +
destinationName);
                                                        if (transacted) {
                                                                
session.commit();
                                                        }
                                                } 
                                    catch (JMSException e) {
                                                        log.error("Error 
sending message to " + destinationName + ". Error: "
+ e.getMessage());
                                                        throw e;
                                                }
                                    finally {
                                                        if (session != null) 
session.close();
                                                        session = null;
                                                        if (producer != null) 
producer.close();
                                                        producer = null;
                                    }
                                                if (errorAlerted) {
                                                
sysadminLog.error("WitsTestMessageGenerator resumed sending
messages to the queue");
                                                }
                                errorAlerted = false;
                        }
                    }
                    catch (Exception e) {
                                log.error("WitsTestMessageGenerator cannot send 
a jms message to
the queue. Message: " + e.getMessage(),e);
                                if (connection != null) {
                                        try {
                                                        connection.close();
                                                } 
                                        catch (JMSException e1) {}
                                                connection = null;
                                                destination = null;
                                }
                                if (!errorAlerted && errorCount >= 2) {
                                sysadminLog.error("WitsTestMessageGenerator 
cannot send a jms
message to the queue. Message: " + e.getMessage());
                                errorAlerted = true;
                        }
                    }
                    
                    
                    long sleepInterval = getSleepInterval();
                    try {
                        sleep(sleepInterval);
                    }
                    catch (InterruptedException e) {
                    }
        
                }
        }
        finally {
                if (connection != null) {
                                try {
                                        connection.close();
                                } 
                                catch (JMSException e1) {}
                                connection = null;
                        }
        }
        log.info("Processing of WitsTestMessageGenerator thread stopped");
        try {
                if (session != null) session.close();
                        if (connection != null) {
                                connection.close();
                        }
                        if (producer != null) producer.close();
                } catch (JMSException e) {
                        log.error("Error closing JMS connection: " + 
e.getMessage());
                }
    }


    protected synchronized static long getSleepInterval() {
        return SLEEP_INTERVAL;
    }
    
    
    public void initQueue() throws JMSException {
        
        connection = null;
        System.out.println("Connecting to URL: " + url);
        System.out.println("Publishing to queue: " + destinationName);
        System.out.println("Using " + (persistent ? "persistent" :
"non-persistent") + " messages");
        System.out.println("Sleeping between publish " + SLEEP_INTERVAL + "
ms");
        if (timeToLive != 0) {
            System.out.println("Messages time to live " + timeToLive + "
ms");
        }
        // Create the connection.
        ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory(user, password, url);
        connection = connectionFactory.createConnection();
        connectionFactory = null;
            errorCount = 0;
     }
    
     
     protected boolean checkEntryConditions() {
        
        if(this.connection == null) {
                
                errorCount++;
            return false;
        } 
        else {
                errorCount = 0;
            return true;
        }
    }
     

-- 
View this message in context: 
http://www.nabble.com/Persistence-Adapter-Postgres-JDBC-issue-tp15459381s2354p15462064.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to