001    /*
002     * Copyright (C) The Apache Software Foundation. All rights reserved.
003     *
004     * This software is published under the terms of the Apache Software License
005     * version 1.1, a copy of which has been included with this distribution in
006     * the LICENSE file.
007     * 
008     * $Id: DefaultServerSession.java 155459 2005-02-26 13:24:44Z dirkv $
009     */
010    package org.apache.commons.messenger;
011    
012    import javax.jms.JMSException;
013    import javax.jms.ServerSession;
014    import javax.jms.Session;
015    
016    
017    /** <p><code>DefaultServerSession</code> is a default implementation of
018      * the JMS ServerSession interface.</p>
019      *
020      * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
021      * @version $Revision: 155459 $
022      */
023    public class DefaultServerSession extends Thread implements ServerSession {
024    
025        /** The JMS Session on which this ServerSession is based */
026        private Session session;
027        /** Indicates whether the session has been started */
028        private boolean started = false;
029        
030        public DefaultServerSession(Session session) throws JMSException {
031            this.session = session;
032        }
033    
034        /**
035         * Return the ServerSession's Session. This must be a Session
036         * created by the same Connection which will be dispatching messages
037         * to it. The provider will assign one or more messages to the Session
038         * and then call start on the ServerSession.
039         *
040         * @return the server session's session.
041         *
042         * @exception JMSException if a JMS error occurs.
043         */
044        public Session getSession() throws JMSException {
045            return session;
046        }
047    
048        /** 
049         * Cause the session's run method to be called to process messages
050         * that were just assigned to it.
051         *
052         */
053        public synchronized void start() {
054            if ( ! started  ) {
055                started = true;
056                super.start();
057            }
058        }
059    
060        public void run() {
061            session.run();
062        }
063    }
064