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 + -
显示快捷键?