[jboss-cvs] JBoss Messaging SVN: r6535 - in tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms: debug and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 23 07:22:22 EDT 2009


Author: gaohoward
Date: 2009-04-23 07:22:22 -0400 (Thu, 23 Apr 2009)
New Revision: 6535

Added:
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ClientFailoverTracker.java
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/DebugLogger.java
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/JMSObjectTracker.java
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/MessageTracker.java
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ServerFailoverTracker.java
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/TrackerFactory.java
   tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/WriterUtil.java
Log:
add debug util


Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ClientFailoverTracker.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ClientFailoverTracker.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ClientFailoverTracker.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,44 @@
+package org.jboss.jms.debug;
+
+public class ClientFailoverTracker {
+
+	private DebugLogger failoverJournal;
+	
+	public ClientFailoverTracker(String name)
+	{
+		failoverJournal = new DebugLogger(name + "-client-failover-journal.log");
+	}
+
+	public synchronized void report(String string, Throwable reason, boolean dumpThread) {
+		failoverJournal.writeRecord(string);
+		if (reason != null) {
+			failoverJournal.writeRecord("--additional info: --");
+			dumpStackTrace(reason);
+			failoverJournal.writeRecord("--end additional info: --");			
+		}
+		if (dumpThread) {
+			dumpThreadStackTrace();
+		}
+	}
+
+	private void dumpStackTrace(Throwable reason) {
+		failoverJournal.writeRecord("Exception: " + reason.getClass().getName());
+		failoverJournal.writeRecord("Message: " + reason.getMessage());
+		failoverJournal.writeRecord("Cause: " + reason.getCause());
+		failoverJournal.writeRecord("Stack: ");
+		StackTraceElement[] elems = reason.getStackTrace();
+		for (StackTraceElement ele : elems) {
+			failoverJournal.writeRecord(ele.toString());
+		}
+	}
+	
+	
+	private void dumpThreadStackTrace() {
+		StackTraceElement[] elems = Thread.currentThread().getStackTrace();
+		failoverJournal.writeRecord("--Thread trace begin--");
+		for (StackTraceElement ele : elems) {
+			failoverJournal.writeRecord(ele.toString());
+		}
+		failoverJournal.writeRecord("--Thread trace end--");
+	}
+}

Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/DebugLogger.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/DebugLogger.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/DebugLogger.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,83 @@
+package org.jboss.jms.debug;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.jboss.logging.Logger;
+
+public class DebugLogger
+{
+	private SimpleDateFormat format = new SimpleDateFormat("MMdd-HH");
+	Logger errLog = Logger.getLogger(DebugLogger.class);
+	
+	boolean inited = false;
+
+	public String logFileName;
+	public String fileRealPath;
+	
+	public DebugLogger(String fname)
+	{
+		logFileName = fname;
+	}
+	
+	private void init() {
+		if (inited) return;
+		String udir = System.getProperty("user.home");
+	    File baseFile = new File(udir);
+	    
+//	    System.out.println("user dir: " + baseFile);
+	    
+	    Date d = new Date();
+	    String today = format.format(d);
+	    String baseDir = "jms-" + today;
+	    
+	    File dirFile = new File(baseFile, baseDir);
+	    
+	    if (!dirFile.exists())
+	    {
+	    	dirFile.mkdir();
+	    }
+	    
+	    File logFile = new File(dirFile, logFileName);
+	    if (!logFile.exists())
+	    {
+	    	try {
+				logFile.createNewFile();
+				System.out.println("file: " + logFile.getAbsolutePath());
+			} catch (IOException e) {
+				errLog.error("error logging debug info.", e);
+			}
+	    }
+	    fileRealPath = logFile.getAbsolutePath();
+		inited = true;
+	}
+
+	public synchronized void writeRecord(String rec) {
+		    init();
+    		PrintWriter writer;
+			try {
+				writer = WriterUtil.getWriter(fileRealPath);
+				String tid = Thread.currentThread().getName();
+				writer.println("[" + tid + "] " + rec);
+				writer.flush();
+			} catch (FileNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+	}
+	
+	public static void main(String[] args) throws IOException
+	{
+		DebugLogger logger = new DebugLogger("mylog");
+		logger.writeRecord("hello world!");
+		
+		JMSObjectTracker tracker1 = new JMSObjectTracker("tracker1");
+		
+		tracker1.connectionEvent("conn1", null, "test connection", false);
+	}
+
+}

Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/JMSObjectTracker.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/JMSObjectTracker.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/JMSObjectTracker.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,331 @@
+package org.jboss.jms.debug;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.jms.Connection;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+
+public class JMSObjectTracker extends MessageTracker
+{	
+
+	private Hashtable<String, ConnectionRecord> connRecords = new Hashtable<String, ConnectionRecord>();
+	
+	private Hashtable<String, SessionRecord> sessRecords = new Hashtable<String, SessionRecord>();
+	
+	private Hashtable<String, ProducerRecord> prodRecords = new Hashtable<String, ProducerRecord>();
+	
+	private Hashtable<String, ConsumerRecord> csumRecords = new Hashtable<String, ConsumerRecord>();
+
+	private DebugLogger jmsJournal;
+	
+	private ObjectCheckerThread oct;
+
+	public JMSObjectTracker(String name)
+	{
+		super(name, false);
+		jmsJournal = new DebugLogger(name + "-jms-journal.log");
+	}
+
+	public synchronized void startChecker() {
+		if (oct == null)
+		{
+			oct = new ObjectCheckerThread();
+			oct.start();
+		}
+	}
+	
+	public void connectionEvent(String id, Connection conn, String event, boolean ifStore)
+	{
+		synchronized (connRecords)
+		{
+			ConnectionRecord rec = connRecords.get(id);
+			if (rec == null)
+			{
+				rec = new ConnectionRecord(id);
+				if (ifStore) {
+					connRecords.put(id, rec);					
+				} else {
+					rec.addEvent("I've gone.");
+				}
+			}
+			rec.addEvent(event);
+		}
+	}
+	
+	public void sessionEvent(String id, Session sess, String event, boolean ifStore)
+	{
+		synchronized (sessRecords)
+		{
+			SessionRecord rec = sessRecords.get(id);
+			if (rec == null)
+			{
+				rec = new SessionRecord(id);
+				if (ifStore) {
+					sessRecords.put(id, rec);
+				} else {
+					rec.addEvent("I've gone.");
+				}
+			}
+			rec.addEvent(event);
+		}
+	}
+	
+	public void producerEvent(String id, MessageProducer producer, String event, boolean ifStore)
+	{
+		synchronized (prodRecords)
+		{
+			ProducerRecord rec = prodRecords.get(id);
+			if (rec == null)
+			{
+				rec = new ProducerRecord(id);
+				if (ifStore) {
+					prodRecords.put(id, rec);
+				} else {
+					rec.addEvent("I've gone.");
+				}
+			}
+			rec.addEvent(event);
+		}
+	}
+	
+	public void consumerEvent(String id, MessageConsumer consumer, String event, boolean ifStore)
+	{
+		synchronized (csumRecords)
+		{
+			ConsumerRecord rec = csumRecords.get(id);
+			if (rec == null)
+			{
+				rec = new ConsumerRecord(id);
+				if (ifStore) {
+					csumRecords.put(id, rec);
+				} else {
+					rec.addEvent("I've gone.");
+				}
+			}
+			rec.addEvent(event);
+		}
+	}
+	
+	
+	private class ConnectionRecord extends EventRecord
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 6340399287030923659L;
+
+		public ConnectionRecord(String id) {
+			super(id);
+		}
+
+		public void addEvent(String event) 
+		{
+			super.addEvent("[Connection] " + event, jmsJournal);
+		}
+	}
+	
+	private class SessionRecord extends EventRecord
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 2394409964154408680L;
+
+		public SessionRecord(String id) {
+			super(id);
+		}
+
+		public void addEvent(String event) 
+		{
+			super.addEvent("[Session] " + event, jmsJournal);
+		}
+	}
+	
+	private class ProducerRecord extends EventRecord
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 3463680286818208126L;
+
+		public ProducerRecord(String id) {
+			super(id);
+		}
+
+		public void addEvent(String event) 
+		{
+			super.addEvent("[Producer] " + event, jmsJournal);
+		}
+	}
+	
+	private class ConsumerRecord extends EventRecord
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 4285789136248342307L;
+
+		public ConsumerRecord(String id) {
+			super(id);
+		}
+
+		public void addEvent(String event) 
+		{
+			super.addEvent("[Consumer] " + event, jmsJournal);
+		}
+	}
+
+	public void removeConnection(String id) {
+		synchronized (connRecords)
+		{
+			connRecords.remove(id);
+		}
+	}
+
+	public void removeSession(String id) {
+		synchronized (sessRecords)
+		{
+			SessionRecord sr = sessRecords.remove(id);
+			if (sr == null) {
+				jmsJournal.writeRecord("SessionCloseWired: " + id + " gets closed twice is now deemed normal.");
+			}
+		}
+	}
+
+	public void removeConsumer(String id) {
+		synchronized (csumRecords)
+		{
+			csumRecords.remove(id);
+		}
+	}
+
+	public void removeProducer(String id) {
+		synchronized (prodRecords)
+		{
+			prodRecords.remove(id);
+		}
+	}
+	 
+	private List<ConnectionRecord> getConnCopy()
+	{
+		synchronized (connRecords)
+		{
+			ArrayList<ConnectionRecord> records = new ArrayList<ConnectionRecord>();
+			Enumeration<ConnectionRecord> enuRec = connRecords.elements();
+			while (enuRec.hasMoreElements()) {
+				records.add(enuRec.nextElement());
+			}
+			return records;
+		}
+	}
+	 
+	private List<SessionRecord> getSessCopy()
+	{
+		synchronized (sessRecords)
+		{
+			ArrayList<SessionRecord> records = new ArrayList<SessionRecord>();
+			Enumeration<SessionRecord> enuRec = sessRecords.elements();
+			while (enuRec.hasMoreElements()) {
+				records.add(enuRec.nextElement());
+			}
+			return records;
+		}
+	}
+	 
+	private List<ConsumerRecord> getConsumerCopy()
+	{
+		synchronized (csumRecords)
+		{
+			ArrayList<ConsumerRecord> records = new ArrayList<ConsumerRecord>();
+			Enumeration<ConsumerRecord> enuRec = csumRecords.elements();
+			while (enuRec.hasMoreElements()) {
+				records.add(enuRec.nextElement());
+			}
+			return records;
+		}
+	}
+	
+	public class ObjectCheckerThread extends Thread implements Serializable
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = -4202610306272398760L;
+		//11 min, check consumer, session and connection.
+		private long checkPeriod = 660000;
+		
+		public ObjectCheckerThread()
+		{
+			super("object-checker");
+			this.setDaemon(true);
+		}
+		
+		public void run()
+		{
+			logger.writeRecord(this + " starting checking object, period using: " + checkPeriod);
+			while (true)
+			{
+			   try {
+				Thread.sleep(checkPeriod);
+               } catch (InterruptedException e) {
+			   }
+			   logger.writeRecord(this + " checking objects...." + getCurrentTime());
+               checkConnections();
+               checkSessions();
+               checkConsumers();
+               logger.writeRecord(this + " checking done");
+			}
+		}
+		
+		private void checkConnections()
+		{
+            List<ConnectionRecord> connCopy = getConnCopy();
+			for (ConnectionRecord conn : connCopy)
+			{
+				long msLive = conn.age();
+				
+				if (msLive >= checkPeriod)
+				{
+					logger.writeRecord(this + " suspected long lived connection: " + conn.getId() + " age: " + msLive);
+				}
+			}
+			
+		}
+		
+		private void checkSessions()
+		{
+            List<SessionRecord> sessCopy = getSessCopy();
+			for (SessionRecord sess : sessCopy)
+			{
+				long msLive = sess.age();
+				
+				if (msLive >= checkPeriod)
+				{
+					logger.writeRecord(this + " suspected long lived Session: " + sess.getId() + " age: " + msLive);
+				}
+			}
+		}
+		
+		private void checkConsumers()
+		{
+            List<ConsumerRecord> csumCopy = getConsumerCopy();
+			for (ConsumerRecord csum : csumCopy)
+			{
+				long msLive = csum.age();
+				
+				if (msLive >= checkPeriod)
+				{
+					logger.writeRecord(this + " suspected long lived consumer: " + csum.getId() + " age: " + msLive);
+				}
+			}
+		}
+	}
+	
+}
+

Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/MessageTracker.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/MessageTracker.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/MessageTracker.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,236 @@
+package org.jboss.jms.debug;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+
+/*
+ * Track the message life cycle.
+ * 
+ * We can record following properties of a message:
+ * 
+ * 1. Its producer
+ * 2. Its sending time
+ * 3. Its target destination.
+ * 
+ * 4. Its delivery by queue: time of delivery, target consumer, tx
+ * 
+ * 5. Its receiving: receiving time, the consumer, result.
+ * 
+ * 6. Its acknowledgment
+ * 
+ */
+public class MessageTracker
+{
+
+	//write import info, as stuck message
+	protected DebugLogger logger;
+	
+	//write every message
+	private DebugLogger msgJournal;
+	
+	private Hashtable<String, MessageRecord> msgRecords = new Hashtable<String, MessageRecord>();
+	private SimpleDateFormat format = new SimpleDateFormat("MM:dd-HH:mm:ss:SSS");
+	private MessageCheckerThread mct = null;
+	
+	public MessageTracker(String name)
+	{
+		logger = new DebugLogger(name + "-error-msg.log");
+		msgJournal = new DebugLogger(name + "-message-journal");
+	}
+	
+	//need refactor, abstract a bit then make a base class, don't use this as base class
+	public MessageTracker(String name, boolean b) {
+	    logger = new DebugLogger(name + "-error-msg.log");
+	}
+
+	//we don't need to store message on client side.
+	public void messageEvent(String msgId, String event, boolean ifStore)
+	{
+		synchronized (msgRecords)
+		{
+			MessageRecord rec = msgRecords.get(msgId);
+			if (rec == null)
+			{
+				rec = new MessageRecord(msgId);
+				if (ifStore)
+				{
+					msgRecords.put(msgId, rec);
+				}
+			}
+			rec.addEvent(event);
+		}
+	}
+	
+	public void messageEvent(String msgId, String event)
+	{
+		messageEvent(msgId, event, true);
+	}
+
+	
+	public String getCurrentTime()
+	{
+		Date d = new Date();
+		return format.format(d);
+	}
+	
+
+	public class MessageRecord extends EventRecord
+	{
+		
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 6341419723330315307L;
+
+		public MessageRecord(String msg)
+		{
+			super(msg);
+		}
+
+		public void addEvent(String event) {
+			super.addEvent("[Message]" + event, msgJournal);
+		}
+	}
+	
+	public class TimedObject implements Serializable
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 7112975602398320125L;
+		long birth;
+		
+		public TimedObject()
+		{
+			birth = System.currentTimeMillis();
+		}
+		
+		public long age()
+		{
+			long now = System.currentTimeMillis();
+			return now - birth;
+		}
+	}
+
+	public class EventRecord extends TimedObject
+	{
+	    /**
+		 * 
+		 */
+		private static final long serialVersionUID = 5214971419987910110L;
+		private String id;
+	    
+	    public EventRecord(String eid)
+	    {
+	    	id = eid;
+	    }
+		
+		public void addEvent(String event, DebugLogger logger)
+		{
+			String rec;
+			String time = getCurrentTime();
+			rec = time + "-[" + id + "] " + event;
+			logger.writeRecord(rec);
+		}
+		
+		public String getId()
+		{
+			return id;
+		}
+	}
+	
+	public static void main(String[] args)
+	{
+		Date d = new Date();
+		SimpleDateFormat format = new SimpleDateFormat("MM/dd-HH:mm:ss:SSS");
+		String time = format.format(d);
+		
+		System.out.println("time is: " + time);
+		
+		try {
+			Thread.sleep(10);
+		} catch (InterruptedException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		d = new Date();
+	    time = format.format(d);
+		
+		System.out.println("time is: " + time);
+	}
+
+	public void removeMessage(String msgId) {
+		synchronized (msgRecords)
+		{
+			msgRecords.remove(msgId);
+		}
+	}
+	
+	private List<MessageRecord> getCopy()
+	{
+		synchronized (msgRecords)
+		{
+			ArrayList<MessageRecord> records = new ArrayList<MessageRecord>();
+			Enumeration<MessageRecord> enuRec = msgRecords.elements();
+			while (enuRec.hasMoreElements()) {
+				records.add(enuRec.nextElement());
+			}
+			return records;
+		}
+	}
+	
+	public class MessageCheckerThread extends Thread implements Serializable
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 637004467791397191L;
+		//5 min
+		private long checkPeriod = 300000;
+		
+		public MessageCheckerThread()
+		{
+			super("message-checker");
+			this.setDaemon(true);
+		}
+		
+		public void run()
+		{
+			logger.writeRecord(this + " starting checking msg, peroid: " + checkPeriod);
+			while (true)
+			{
+			   try {
+				Thread.sleep(checkPeriod);
+               } catch (InterruptedException e) {
+			   }
+               logger.writeRecord(this + " checking msg..." + getCurrentTime());
+				List<MessageRecord> msgCopy = getCopy();
+				for (MessageRecord msg : msgCopy)
+				{
+					long msLive = msg.age();
+					
+					if (msLive >= checkPeriod)
+					{
+						logger.writeRecord(this + " suspected stuck message: " + msg.getId() + " age: " + msLive);
+					}
+				}
+				logger.writeRecord(this + " checking done.");
+			}
+			
+		}
+	}
+
+	public synchronized void startChecker() {
+		if (mct == null)
+		{
+			mct = new MessageCheckerThread();
+			mct.start();
+		}
+	}
+}

Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ServerFailoverTracker.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ServerFailoverTracker.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/ServerFailoverTracker.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,47 @@
+package org.jboss.jms.debug;
+
+public class ServerFailoverTracker extends MessageTracker {
+
+	private DebugLogger failoverJournal;
+	
+	public ServerFailoverTracker(String name)
+	{
+		super(name, false);
+		failoverJournal = new DebugLogger(name + "-server-failover-journal.log");
+	}
+
+	public synchronized void report(String string, Throwable reason, boolean dumpThread) {
+		failoverJournal.writeRecord(string);
+		if (reason != null) {
+			failoverJournal.writeRecord("--additional info: --");
+			dumpStackTrace(reason);
+			failoverJournal.writeRecord("--end additional info: --");			
+		}
+		if (dumpThread) {
+			dumpThreadStackTrace();
+		}
+	}
+
+	private void dumpStackTrace(Throwable reason) {
+		failoverJournal.writeRecord("Exception: " + reason.getClass().getName());
+		failoverJournal.writeRecord("Message: " + reason.getMessage());
+		failoverJournal.writeRecord("Cause: " + reason.getCause());
+		failoverJournal.writeRecord("Stack: ");
+		StackTraceElement[] elems = reason.getStackTrace();
+		for (StackTraceElement ele : elems) {
+			failoverJournal.writeRecord(ele.toString());
+		}
+	}
+	
+	
+	private void dumpThreadStackTrace() {
+		StackTraceElement[] elems = Thread.currentThread().getStackTrace();
+		failoverJournal.writeRecord("--Thread trace begin--");
+		for (StackTraceElement ele : elems) {
+			failoverJournal.writeRecord(ele.toString());
+		}
+		failoverJournal.writeRecord("--Thread trace end--");
+	}
+
+
+}

Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/TrackerFactory.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/TrackerFactory.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/TrackerFactory.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,73 @@
+package org.jboss.jms.debug;
+
+import java.util.Random;
+
+public class TrackerFactory {
+	
+	private static MessageTracker mTracker;
+	private static JMSObjectTracker jTracker;
+	private static MessageTracker c_mTracker;
+	private static JMSObjectTracker c_jTracker;
+	private static ClientFailoverTracker c_foTracker;
+	private static ServerFailoverTracker s_foTracker;
+	
+	private static final int VMID;
+	
+	static {
+		Random r = new Random();
+		VMID = r.nextInt(100);
+	}
+	
+	public static final synchronized MessageTracker getClientMessageTracker()
+	{
+		if (c_mTracker == null) {
+			c_mTracker = new MessageTracker("client" + VMID);
+			c_mTracker.startChecker();
+		}
+		return c_mTracker;
+	}
+	
+	public static final synchronized JMSObjectTracker getClientJMSObjTracker()
+	{
+		if (c_jTracker == null) {
+			c_jTracker = new JMSObjectTracker("client" + VMID);
+			c_jTracker.startChecker();
+		}
+		return c_jTracker;
+	}
+	
+	public static final synchronized MessageTracker getServerMessageTracker()
+	{
+		if (mTracker == null) {
+			mTracker = new MessageTracker("server" + VMID);
+			mTracker.startChecker();
+		}
+		return mTracker;
+	}
+	
+	public static final synchronized JMSObjectTracker getServerJMSObjTracker()
+	{
+		if (jTracker == null) {
+			jTracker = new JMSObjectTracker("server" + VMID);
+			jTracker.startChecker();
+		}
+		return jTracker;
+	}
+	
+	public static final synchronized ClientFailoverTracker getClientFailoverTracker()
+	{
+		if (c_foTracker == null) {
+			c_foTracker = new ClientFailoverTracker("" + VMID);
+		}
+		return c_foTracker;
+	}
+	
+	public static final synchronized ServerFailoverTracker getServerFailoverTracker()
+	{
+		if (s_foTracker == null) {
+			s_foTracker = new ServerFailoverTracker("" + VMID);
+		}
+		return s_foTracker;
+	}
+
+}

Added: tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/WriterUtil.java
===================================================================
--- tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/WriterUtil.java	                        (rev 0)
+++ tags/JBossMessaging_1_4_0_SP3_CP03_1456/src/main/org/jboss/jms/debug/WriterUtil.java	2009-04-23 11:22:22 UTC (rev 6535)
@@ -0,0 +1,21 @@
+package org.jboss.jms.debug;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.HashMap;
+
+public class WriterUtil {
+
+	public static HashMap<String, PrintWriter> allWriters = new HashMap<String, PrintWriter>();
+	
+	public static synchronized PrintWriter getWriter(String path) throws FileNotFoundException
+	{
+		PrintWriter writer = allWriters.get(path);
+		if (writer == null) {
+			writer = new PrintWriter(new FileOutputStream(path, true), true);
+			allWriters.put(path, writer);
+		}
+		return writer;
+	}
+}




More information about the jboss-cvs-commits mailing list