activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexis Kinsella (JIRA)" <>
Subject [jira] Created: (AMQ-1741) Problem related to SessionPooled related with Web Console deployed in J2EE Container (JBoss) with a resource adapter and webconsole-jndi.xml
Date Thu, 22 May 2008 06:56:54 GMT
Problem related to SessionPooled related with Web Console deployed in J2EE Container (JBoss)
with a resource adapter and webconsole-jndi.xml

                 Key: AMQ-1741
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.1.0, 5.0.0
         Environment: JBoss 4.2.2 on Linux, with RA with tcp transport configured
            Reporter: Alexis Kinsella

When Web Console is deployed in container with a resource adapter configured there is a bug
with SessionPool Class:

When you browse a first queue, the QueueBrowserQuery works, but when you browse a queue a
second time, an exception is thrown saying Session is closed (Because managed by Resource

One workAround is to create a NullSessionPool that do not pool and that implements a ISessionPool
interface! (To change a minimum the WebConsole):

The implements is based on SessionPool class implementation. It may be surely enhanced !

package org.apache.activemq.web;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Session;

public class NullSessionPool implements ISessionPool {

    private ConnectionFactory connectionFactory;
    private Connection connection;

    public Connection getConnection() throws JMSException {
        if (checkConnection()) {
            return connection;

        synchronized (this) {
            connection = getConnectionFactory().createConnection();
            return connection;

    private boolean checkConnection() {
        if (connection == null) {
            return false;

        try {
            return true;
        } catch (JMSException e) {
            return false;

    public void setConnection(Connection connection) {
        this.connection = connection;

    public ConnectionFactory getConnectionFactory() {
        if (connectionFactory == null) {
            throw new IllegalStateException("No ConnectionFactory has been set for the session
        return connectionFactory;

    public void setConnectionFactory(ConnectionFactory connectionFactory) {
        this.connectionFactory = connectionFactory;

    public Session borrowSession() throws JMSException {
        return createSession();

    public void returnSession(Session session) throws JMSException {

    protected Session createSession() throws JMSException {
        return getConnection().createSession(false, Session.AUTO_ACKNOWLEDGE);


package org.apache.activemq.web;

import javax.jms.JMSException;
import javax.jms.Session;

public interface ISessionPool {

	public abstract Session borrowSession() throws JMSException;

	public abstract void returnSession(Session session) throws JMSException;


The Spring config becomes: 

  <bean id="sessionPool" class="org.apache.activemq.web.NullSessionPool">
  	<property name="connectionFactory" ref="connectionFactory"/>

It works great, no more bug with this workaround in a container with a resource adapter that
manage connections and sessions.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message