ThreadMonitorContext.java :  » Portal » Open-Portal » com » sun » portal » util » Java Open Source

Java Open Source » Portal » Open Portal 
Open Portal » com » sun » portal » util » ThreadMonitorContext.java
package com.sun.portal.util;

import com.sun.portal.netlet.econnection.GWRunnable;
import com.sun.portal.util.TaskWrapper;
import com.sun.portal.rproxy.monitoring.MonitoringSubsystem;

import java.util.HashMap;
import java.util.Map;

/**
 * author: Noble Paul
 * Date: Jun 4, 2004, 12:38:48 PM
 */
public class ThreadMonitorContext {
    private static final int STARTED = 1;
    public static final int WAITING_IN_QUEUE = 2;
    public static final int RUNNING = 3;
    public static final int WAITING_FOR_RESP = 4;

    public static final ThreadLocal threadLocal = new ThreadLocal();
    private final Map attributeStore = new HashMap();
    private Runnable task;
    private boolean isTaskKnown = false;
    private int state;
    private long taskStartTime= -1;
    private Thread thisThread;

    private static final Map threadMonitorContexts = new HashMap();

    public void setTask(Runnable runnable) {
        this.task = runnable;
        if(runnable == null) return;
        if (runnable instanceof TaskWrapper) {
            TaskWrapper taskWrapper = (TaskWrapper) runnable;
            if (taskWrapper.getTask() instanceof GWRunnable) {
                isTaskKnown = true;
            } else{
                isTaskKnown = false;
            }
        }
    }

    public Thread getThread() {
        return thisThread;
    }

    public static void startThread() {
        ThreadMonitorContext context = new ThreadMonitorContext();
        threadLocal.set(context);
        synchronized(threadMonitorContexts){
            threadMonitorContexts.put(Thread.currentThread().getName(),context);
        }
        context.state = STARTED;
        context.thisThread = Thread.currentThread();
    }

    public static void endThread(){
        synchronized(threadMonitorContexts){
            threadMonitorContexts.remove(Thread.currentThread().getName());
        }
        threadLocal.set(null);

    }

    public static void waitingInQueue() {
        ThreadMonitorContext context = (ThreadMonitorContext) threadLocal.get();
        if(context== null) return;
        context.state = WAITING_IN_QUEUE;
    }

    public long getTaskStartTime() {
        return taskStartTime;
    }

    public static void newTask(Runnable task) {
        ThreadMonitorContext context = (ThreadMonitorContext) threadLocal.get();
        if(context == null) return;
        context.setTask(task);
        context.taskStartTime = System.currentTimeMillis();
        context.state = RUNNING;
        MonitoringSubsystem.handleEvent(SRAEvent.START_TASK,context);
    }

    public static void taskEnds() {
        ThreadMonitorContext context = (ThreadMonitorContext) threadLocal.get();
        if(context == null || context.state == WAITING_IN_QUEUE) return;
        context.state = WAITING_IN_QUEUE;
        context.setTask(null);
        context.taskStartTime = -1;
        MonitoringSubsystem.handleEvent(SRAEvent.END_TASK,context);

    }

    public Runnable getTask(){
         return task;
    }

    public boolean isTaskKnown() {
        return isTaskKnown;
    }

    public int getState() {
        return state;
    }

    public static Map getThreadMonitorContexts() {
        return new HashMap(threadMonitorContexts);
    }

    public static ThreadMonitorContext getContext(){
        ThreadMonitorContext context = (ThreadMonitorContext) threadLocal.get();
        return context;
    }

    public static void storeAttribute(Object key , Object value){
        ThreadMonitorContext context = (ThreadMonitorContext) threadLocal.get();
        if (context == null) return;
        context.attributeStore.put(key, value);
    }

    public static Object retrieveAttribute(Object key) {
        ThreadMonitorContext context = (ThreadMonitorContext) threadLocal.get();
        if (context == null) return null;
        return context.attributeStore.get(key);
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.