serversessionimpl.java

来自「OpenJMS是一个开源的Java Message Service API 1.」· Java 代码 · 共 701 行 · 第 1/2 页

JAVA
701
字号
    /**     * Create a queue browser for this session. This allows clients to browse a     * queue without removing any messages.     *     * @param queue    the queue to browse     * @param selector the message selector. May be <code>null</code>     * @return the identity of the queue browser     * @throws JMSException for any JMS error     */    public long createBrowser(JmsQueue queue, String selector)            throws JMSException {        if (_log.isDebugEnabled()) {            _log.debug("createBrowser(queue=" + queue + ", selector="                       + selector                       + ") [session=" + this + "]");        }        if (queue == null) {            throw new JMSException("Cannot create QueueBrowser for null queue");        }        ConsumerEndpoint consumer = _consumerMgr.createQueueBrowser(queue,                                                                    selector);        _consumer.addConsumer(consumer);        return consumer.getId();    }    /**     * Close a message consumer.     *     * @param consumerId the identity of the consumer to close     * @throws JMSException for any JMS error     */    public void closeConsumer(long consumerId) throws JMSException {        if (_log.isDebugEnabled()) {            _log.debug("removeConsumer(consumerId=" + consumerId                       + ") [session="                       + this + "]");        }        ConsumerEndpoint consumer = _consumer.removeConsumer(consumerId);        _consumerMgr.closeConsumer(consumer);    }    /**     * Unsubscribe a durable subscription.     *     * @param name the name used to identify the subscription     * @throws JMSException for any JMS error     */    public void unsubscribe(String name) throws JMSException {        if (_log.isDebugEnabled()) {            _log.debug("unsubscribe(name=" + name + ") [session=" + this + "]");        }        _consumerMgr.unsubscribe(name, _connection.getClientID());    }    /**     * Start the message delivery for the session.     *     * @throws JMSException for any JMS error     */    public void start() throws JMSException {        if (_log.isDebugEnabled()) {            _log.debug("start() [session=" + this + "]");        }        _consumer.start();    }    /**     * Stop message delivery for the session.     */    public void stop() {        if (_log.isDebugEnabled()) {            _log.debug("stop() [session=" + this + "]");        }        _consumer.stop();    }    /**     * Set the listener for this session.     * <p/>     * The listener is notified whenever a message for the session is present.     *     * @param listener the message listener     */    public void setMessageListener(JmsMessageListener listener) {        _consumer.setMessageListener(listener);    }    /**     * Enable or disable asynchronous message delivery for a particular     * consumer.     *     * @param consumerId the consumer identifier     * @param enable     true to enable; false to disable     * @throws JMSException for any JMS error     */    public void setAsynchronous(long consumerId, boolean enable)            throws JMSException {        _consumer.setAsynchronous(consumerId, enable);    }    /**     * Close and release any resource allocated to this session.     *     * @throws JMSException if the session cannot be closed     */    public void close() throws JMSException {        boolean closed;        synchronized (_closed) {            closed = _closed.get();        }        if (!closed) {            _closed.set(true);            if (_log.isDebugEnabled()) {                _log.debug("close() [session=" + this + "]");            }            _consumer.stop();            ConsumerEndpoint[] consumers = _consumer.getConsumers();            for (int i = 0; i < consumers.length; ++i) {                ConsumerEndpoint consumer = consumers[i];                _consumer.removeConsumer(consumer.getId());                _consumerMgr.closeConsumer(consumer);            }            _consumer.close();            // de-register the session from the connection            _connection.closed(this);        } else {            if (_log.isDebugEnabled()) {                _log.debug("close() [session=" + this +                           "]: session already closed");            }        }    }    /**     * Recover the session.     * <p/>     * All unacknowledged messages are re-delivered with the JMSRedelivered flag     * set.     *     * @throws JMSException if the session cannot be recovered     */    public void recover() throws JMSException {        _consumer.recover();    }    /**     * Commit the session.     * <p/>     * This will acknowledge all delivered messages.     *     * @throws JMSException if the session cannot be committed     */    public void commit() throws JMSException {        _consumer.commit();    }    /**     * Rollback the session.     * <p/>     * All messages delivered to the client will be redelivered with the     * JMSRedelivered flag set.     *     * @throws JMSException - if there are any problems     */    public void rollback() throws JMSException {        _consumer.rollback();    }    /**     * Start work on behalf of a transaction branch specified in xid If TMJOIN     * is specified, the start is for joining a transaction previously seen by     * the resource manager     *     * @param xid   the xa transaction identity     * @param flags One of TMNOFLAGS, TMJOIN, or TMRESUME     * @throws XAException if there is a problem completing the call     */    public void start(Xid xid, int flags) throws XAException {        _resources.start(xid, flags);        // set this as the current xid for this session        _xid = xid;    }    /**     * Ask the resource manager to prepare for a transaction commit of the     * transaction specified in xid.     *     * @param xid the xa transaction identity     * @return XA_RDONLY or XA_OK     * @throws XAException if there is a problem completing the call     */    public int prepare(Xid xid) throws XAException {        return _resources.prepare(xid);    }    /**     * Commits an XA transaction that is in progress.     *     * @param xid      the xa transaction identity     * @param onePhase true if it is a one phase commit     * @throws XAException if there is a problem completing the call     */    public void commit(Xid xid, boolean onePhase) throws XAException {        try {            _resources.commit(xid, onePhase);        } finally {            _xid = null;        }    }    /**     * Ends the work performed on behalf of a transaction branch. The resource     * manager disassociates the XA resource from the transaction branch     * specified and let the transaction be completedCommits an XA transaction     * that is in progress.     *     * @param xid   the xa transaction identity     * @param flags one of TMSUCCESS, TMFAIL, or TMSUSPEND     * @throws XAException if there is a problem completing the call     */    public void end(Xid xid, int flags) throws XAException {        try {            _resources.end(xid, flags);        } finally {            _xid = null;        }    }    /**     * Tell the resource manager to forget about a heuristically completed     * transaction branch.     *     * @param xid the xa transaction identity     * @throws XAException if there is a problem completing the call     */    public void forget(Xid xid) throws XAException {        try {            _resources.forget(xid);        } finally {            _xid = null;        }    }    /**     * Obtain a list of prepared transaction branches from a resource manager.     * The transaction manager calls this method during recovery to obtain the     * list of transaction branches that are currently in prepared or     * heuristically completed states.     *     * @param flag One of TMSTARTRSCAN, TMENDRSCAN, TMNOFLAGS. TMNOFLAGS     * @return the set of Xids to recover     * @throws XAException - if there is a problem completing the call     */    public Xid[] recover(int flag) throws XAException {        return _resources.recover(flag);    }    /**     * Inform the resource manager to roll back work done on behalf of a     * transaction branch     *     * @param xid the xa transaction identity     * @throws XAException if there is a problem completing the call     */    public void rollback(Xid xid) throws XAException {        try {            _resources.rollback(xid);        } finally {            // clear the current xid            _xid = null;        }    }    /**     * Return the transaction timeout for this instance of the resource     * manager.     *     * @return the timeout in seconds     * @throws XAException if there is a problem completing the call     */    public int getTransactionTimeout() throws XAException {        return _resources.getTransactionTimeout();    }    /**     * Set the current transaction timeout value for this XAResource instance.     *     * @param seconds timeout in seconds     * @return if the new transaction timeout was accepted     * @throws XAException if there is a problem completing the call     */    public boolean setTransactionTimeout(int seconds) throws XAException {        return _resources.setTransactionTimeout(seconds);    }    /**     * This method is called to determine if the resource manager instance     * represented by the target object is the same as the resouce manager     * instance represented by the parameter xares.     *     * @param xares an XAResource object whose resource manager instance is to     *              be compared with the resource manager instance of the target     *              object.     * @return true if it's the same RM instance; otherwise false.     * @throws XAException for any error     */    public boolean isSameRM(XAResource xares) throws XAException {        boolean result = (xares instanceof ServerSessionImpl);        if (result) {            ServerSessionImpl other = (ServerSessionImpl) xares;            result = (other.getResourceManagerId() == getResourceManagerId());        }        return result;    }    /**     * Return the xid that is currently associated with this session or null if     * this session is currently not part of a global transactions     *     * @return Xid     */    public Xid getXid() {        return _xid;    }    /**     * Return the identity of the {@link ResourceManager}. The transaction     * manager should be the only one to initiating this call.     *     * @return the identity of the resource manager     * @throws XAException - if it cannot retrieve the rid.     */    public String getResourceManagerId() throws XAException {        return _resources.getResourceManagerId();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?