Package org.jboss.jms.client.state

Source Code of org.jboss.jms.client.state.SessionState

/*     */ package org.jboss.jms.client.state;
/*     */
/*     */ import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
/*     */ import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Collections;
/*     */ import java.util.HashMap;
/*     */ import java.util.HashSet;
/*     */ import java.util.Iterator;
/*     */ import java.util.LinkedList;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ import java.util.Set;
/*     */ import javax.jms.MessageListener;
/*     */ import org.jboss.jms.client.container.ClientConsumer;
/*     */ import org.jboss.jms.client.delegate.ClientBrowserDelegate;
/*     */ import org.jboss.jms.client.delegate.ClientConsumerDelegate;
/*     */ import org.jboss.jms.client.delegate.ClientProducerDelegate;
/*     */ import org.jboss.jms.client.delegate.ClientSessionDelegate;
/*     */ import org.jboss.jms.client.delegate.DelegateSupport;
/*     */ import org.jboss.jms.delegate.DeliveryInfo;
/*     */ import org.jboss.jms.delegate.DeliveryRecovery;
/*     */ import org.jboss.jms.delegate.SessionDelegate;
/*     */ import org.jboss.jms.destination.JBossDestination;
/*     */ import org.jboss.jms.message.JBossMessage;
/*     */ import org.jboss.jms.message.MessageProxy;
/*     */ import org.jboss.jms.tx.MessagingXAResource;
/*     */ import org.jboss.jms.tx.ResourceManager;
/*     */ import org.jboss.logging.Logger;
/*     */ import org.jboss.messaging.util.ClearableQueuedExecutor;
/*     */ import org.jboss.messaging.util.Version;
/*     */
/*     */ public class SessionState extends HierarchicalStateSupport
/*     */ {
/*  70 */   protected static Logger log = Logger.getLogger(SessionState.class);
/*     */   private ConnectionState parent;
/*     */   private SessionDelegate delegate;
/*     */   private String sessionID;
/*     */   private int acknowledgeMode;
/*     */   private boolean transacted;
/*     */   private boolean xa;
/*     */   private MessagingXAResource xaResource;
/*     */   private Object currentTxId;
/*     */   private ClearableQueuedExecutor executor;
/*     */   private boolean recoverCalled;
/*     */   private List clientAckList;
/*     */   private DeliveryInfo autoAckInfo;
/*     */   private Map callbackHandlers;
/*     */   private int dupsOKBatchSize;
/* 100 */   private LinkedList asfMessages = new LinkedList();
/*     */   private MessageListener sessionListener;
/* 110 */   private boolean treatAsNonTransactedWhenNotEnlisted = true;
/*     */   private long npSendSequence;
/*     */
/*     */   public SessionState(ConnectionState parent, ClientSessionDelegate delegate, boolean transacted, int ackMode, boolean xa, int dupsOKBatchSize)
/*     */   {
/* 120 */     super(parent, delegate);
/*     */
/* 122 */     this.sessionID = delegate.getID();
/*     */
/* 124 */     this.children = new HashSet();
/* 125 */     this.acknowledgeMode = ackMode;
/* 126 */     this.transacted = transacted;
/* 127 */     this.xa = xa;
/*     */
/* 129 */     this.dupsOKBatchSize = dupsOKBatchSize;
/*     */
/* 131 */     if (xa)
/*     */     {
/* 134 */       this.xaResource = new MessagingXAResource(parent.getResourceManager(), this);
/*     */     }
/*     */
/* 140 */     if (transacted)
/*     */     {
/* 143 */       this.currentTxId = parent.getResourceManager().createLocalTx();
/*     */     }
/*     */
/* 146 */     this.executor = new ClearableQueuedExecutor(new LinkedQueue());
/*     */
/* 148 */     this.clientAckList = new ArrayList();
/*     */
/* 152 */     this.callbackHandlers = new HashMap();
/*     */   }
/*     */
/*     */   public DelegateSupport getDelegate()
/*     */   {
/* 159 */     return (DelegateSupport)this.delegate;
/*     */   }
/*     */
/*     */   public void setDelegate(DelegateSupport delegate)
/*     */   {
/* 164 */     this.delegate = ((SessionDelegate)delegate);
/*     */   }
/*     */
/*     */   public HierarchicalState getParent()
/*     */   {
/* 169 */     return this.parent;
/*     */   }
/*     */
/*     */   public void setParent(HierarchicalState parent)
/*     */   {
/* 174 */     this.parent = ((ConnectionState)parent);
/*     */   }
/*     */
/*     */   public Version getVersionToUse()
/*     */   {
/* 179 */     return this.parent.getVersionToUse();
/*     */   }
/*     */
/*     */   public int getDupsOKBatchSize()
/*     */   {
/* 184 */     return this.dupsOKBatchSize;
/*     */   }
/*     */
/*     */   public MessageListener getDistinguishedListener()
/*     */   {
/* 189 */     return this.sessionListener;
/*     */   }
/*     */
/*     */   public void setDistinguishedListener(MessageListener listener)
/*     */   {
/* 194 */     this.sessionListener = listener;
/*     */   }
/*     */
/*     */   public LinkedList getASFMessages()
/*     */   {
/* 199 */     return this.asfMessages;
/*     */   }
/*     */
/*     */   public void synchronizeWith(HierarchicalState ns)
/*     */     throws Exception
/*     */   {
/* 206 */     SessionState newState = (SessionState)ns;
/*     */
/* 208 */     String oldSessionID = this.sessionID;
/* 209 */     this.sessionID = newState.sessionID;
/*     */
/* 211 */     this.npSendSequence = 0L;
/*     */
/* 216 */     this.executor.clearAllExceptCurrentTask();
/*     */
/* 218 */     ClientSessionDelegate newDelegate = (ClientSessionDelegate)newState.getDelegate();
/*     */
/* 220 */     for (Iterator i = getChildren().iterator(); i.hasNext(); )
/*     */     {
/* 222 */       HierarchicalState child = (HierarchicalState)i.next();
/*     */
/* 224 */       if ((child instanceof ConsumerState))
/*     */       {
/* 226 */         ConsumerState consState = (ConsumerState)child;
/* 227 */         ClientConsumerDelegate consDelegate = (ClientConsumerDelegate)consState.getDelegate();
/*     */
/* 230 */         ClientConsumerDelegate newConsDelegate = (ClientConsumerDelegate)newDelegate.createConsumerDelegate(consState.getDestination(), consState.getSelector(), consState.isNoLocal(), consState.getSubscriptionName(), consState.isConnectionConsumer(), true);
/*     */
/* 236 */         log.trace(this + " created new consumer " + newConsDelegate);
/*     */
/* 238 */         consDelegate.synchronizeWith(newConsDelegate);
/* 239 */         log.trace(this + " synchronized failover consumer " + consDelegate);
/*     */       }
/* 241 */       else if ((child instanceof ProducerState))
/*     */       {
/* 243 */         ProducerState prodState = (ProducerState)child;
/* 244 */         ClientProducerDelegate prodDelegate = (ClientProducerDelegate)prodState.getDelegate();
/*     */
/* 247 */         ClientProducerDelegate newProdDelegate = (ClientProducerDelegate)newDelegate.createProducerDelegate((JBossDestination)prodState.getDestination());
/*     */
/* 249 */         log.trace(this + " created new producer " + newProdDelegate);
/*     */
/* 251 */         prodDelegate.synchronizeWith(newProdDelegate);
/* 252 */         log.trace(this + " synchronized failover producer " + prodDelegate);
/*     */       }
/* 254 */       else if ((child instanceof BrowserState))
/*     */       {
/* 256 */         BrowserState browserState = (BrowserState)child;
/* 257 */         ClientBrowserDelegate browserDelegate = (ClientBrowserDelegate)browserState.getDelegate();
/*     */
/* 261 */         ClientBrowserDelegate newBrowserDelegate = (ClientBrowserDelegate)newDelegate.createBrowserDelegate(browserState.getJmsDestination(), browserState.getMessageSelector());
/*     */
/* 264 */         log.trace(this + " created new browser " + newBrowserDelegate);
/*     */
/* 266 */         browserDelegate.synchronizeWith(newBrowserDelegate);
/* 267 */         log.trace(this + " synchronized failover browser " + browserDelegate);
/*     */       }
/*     */     }
/*     */
/* 271 */     ConnectionState connState = (ConnectionState)getParent();
/* 272 */     ResourceManager rm = connState.getResourceManager();
/*     */
/* 275 */     rm.handleFailover(connState.getServerID(), oldSessionID, newState.sessionID);
/*     */
/* 277 */     List ackInfos = Collections.EMPTY_LIST;
/*     */
/* 279 */     if ((!isTransacted()) || ((isXA()) && (getCurrentTxId() == null)))
/*     */     {
/* 287 */       log.trace(this + " is not transacted (or XA with no transaction set), " + "retrieving deliveries from session state");
/*     */
/* 293 */       if (this.acknowledgeMode == 2)
/*     */       {
/* 295 */         for (Iterator i = getClientAckList().iterator(); i.hasNext(); )
/*     */         {
/* 297 */           DeliveryInfo info = (DeliveryInfo)i.next();
/* 298 */           if (!info.getMessageProxy().getMessage().isReliable())
/*     */           {
/* 300 */             i.remove();
/* 301 */             log.trace("removed non persistent delivery " + info);
/*     */           }
/*     */         }
/*     */
/* 305 */         ackInfos = getClientAckList();
/*     */       }
/*     */       else
/*     */       {
/* 309 */         DeliveryInfo autoAck = getAutoAckInfo();
/* 310 */         if (autoAck != null)
/*     */         {
/* 312 */           if (!autoAck.getMessageProxy().getMessage().isReliable())
/*     */           {
/* 315 */             setAutoAckInfo(null);
/*     */           }
/*     */           else
/*     */           {
/* 320 */             ackInfos = new ArrayList();
/* 321 */             ackInfos.add(autoAck);
/*     */           }
/*     */         }
/*     */       }
/*     */
/* 326 */       log.trace(this + " retrieved " + ackInfos.size() + " deliveries");
/*     */     }
/*     */     else
/*     */     {
/* 333 */       ackInfos = rm.getDeliveriesForSession(getSessionID());
/*     */     }
/*     */
/* 336 */     List recoveryInfos = new ArrayList();
/*     */     Iterator i;
/* 337 */     if (!ackInfos.isEmpty())
/*     */     {
/* 339 */       for (i = ackInfos.iterator(); i.hasNext(); )
/*     */       {
/* 341 */         DeliveryInfo del = (DeliveryInfo)i.next();
/* 342 */         DeliveryRecovery recInfo = new DeliveryRecovery(del.getMessageProxy().getDeliveryId(), del.getMessageProxy().getMessage().getMessageID(), del.getQueueName());
/*     */
/* 347 */         recoveryInfos.add(recInfo);
/*     */       }
/*     */
/*     */     }
/*     */
/* 354 */     log.trace(this + " sending delivery recovery " + recoveryInfos + " on failover");
/*     */
/* 357 */     if ((this.transacted) || (this.xa) || (this.acknowledgeMode == 2))
/*     */     {
/* 359 */       newDelegate.recoverDeliveries(recoveryInfos, oldSessionID);
/*     */     }
/*     */   }
/*     */
/*     */   public void setTreatAsNonTransactedWhenNotEnlisted(boolean b)
/*     */   {
/* 367 */     this.treatAsNonTransactedWhenNotEnlisted = b;
/*     */   }
/*     */
/*     */   public boolean getTreatAsNonTransactedWhenNotEnlisted()
/*     */   {
/* 372 */     return this.treatAsNonTransactedWhenNotEnlisted;
/*     */   }
/*     */
/*     */   public List getClientAckList()
/*     */   {
/* 380 */     return this.clientAckList;
/*     */   }
/*     */
/*     */   public void setClientAckList(List list)
/*     */   {
/* 385 */     this.clientAckList = list;
/*     */   }
/*     */
/*     */   public DeliveryInfo getAutoAckInfo()
/*     */   {
/* 390 */     return this.autoAckInfo;
/*     */   }
/*     */
/*     */   public void setAutoAckInfo(DeliveryInfo info)
/*     */   {
/* 395 */     if ((info != null) && (this.autoAckInfo != null))
/*     */     {
/* 397 */       throw new IllegalStateException("There is already a delivery set for auto ack " + System.identityHashCode(this) + " xa: " + this.xa);
/*     */     }
/*     */
/* 400 */     this.autoAckInfo = info;
/*     */   }
/*     */
/*     */   public int getAcknowledgeMode()
/*     */   {
/* 405 */     return this.acknowledgeMode;
/*     */   }
/*     */
/*     */   public boolean isTransacted()
/*     */   {
/* 410 */     return this.transacted;
/*     */   }
/*     */
/*     */   public boolean isXA()
/*     */   {
/* 415 */     return this.xa;
/*     */   }
/*     */
/*     */   public MessagingXAResource getXAResource()
/*     */   {
/* 420 */     return this.xaResource;
/*     */   }
/*     */
/*     */   public QueuedExecutor getExecutor()
/*     */   {
/* 425 */     return this.executor;
/*     */   }
/*     */
/*     */   public Object getCurrentTxId()
/*     */   {
/* 430 */     return this.currentTxId;
/*     */   }
/*     */
/*     */   public boolean isRecoverCalled()
/*     */   {
/* 435 */     return this.recoverCalled;
/*     */   }
/*     */
/*     */   public void setCurrentTxId(Object id)
/*     */   {
/* 440 */     this.currentTxId = id;
/*     */   }
/*     */
/*     */   public void setRecoverCalled(boolean recoverCalled)
/*     */   {
/* 445 */     this.recoverCalled = recoverCalled;
/*     */   }
/*     */
/*     */   public ClientConsumer getCallbackHandler(String consumerID)
/*     */   {
/* 450 */     return (ClientConsumer)this.callbackHandlers.get(consumerID);
/*     */   }
/*     */
/*     */   public void addCallbackHandler(ClientConsumer handler)
/*     */   {
/* 455 */     this.callbackHandlers.put(handler.getConsumerId(), handler);
/*     */   }
/*     */
/*     */   public void removeCallbackHandler(ClientConsumer handler)
/*     */   {
/* 460 */     this.callbackHandlers.remove(handler.getConsumerId());
/*     */   }
/*     */
/*     */   public String getSessionID()
/*     */   {
/* 465 */     return this.sessionID;
/*     */   }
/*     */
/*     */   public long getNPSendSequence()
/*     */   {
/* 470 */     return this.npSendSequence;
/*     */   }
/*     */
/*     */   public void incNpSendSequence()
/*     */   {
/* 475 */     this.npSendSequence += 1L;
/*     */   }
/*     */
/*     */   public String toString()
/*     */   {
/* 480 */     return "SessionState[" + this.sessionID + "]";
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.jms.client.state.SessionState
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.jms.client.state.SessionState

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.