Package com.caucho.env.warning

Source Code of com.caucho.env.warning.WarningService

/*
* Copyright (c) 1998-2011 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT.  See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
*
*   Free Software Foundation, Inc.
*   59 Temple Place, Suite 330
*   Boston, MA 02111-1307  USA
*
* @author Scott Ferguson
*/

package com.caucho.env.warning;

import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.caucho.env.service.AbstractResinSubSystem;
import com.caucho.env.service.ResinSystem;

/**
* The WarningService is a general way to send warning and critical
* system messages such as shutdown messages.
*/
public class WarningService extends AbstractResinSubSystem
{
  public static final int START_PRIORITY = 1;

  private static final Logger log =
    Logger.getLogger(WarningService.class.getName());

  private final CopyOnWriteArrayList<WarningHandler> _priorityHandlers
    = new CopyOnWriteArrayList<WarningHandler>();
 
  private final CopyOnWriteArrayList<WarningHandler> _handlers
    = new CopyOnWriteArrayList<WarningHandler>();

  public WarningService()
  {
  }
 
  public static WarningService createAndAddService()
  {
    ResinSystem system = preCreate(WarningService.class);
   
    WarningService service = new WarningService();
    system.addService(WarningService.class, service);
   
    return service;
  }
 
  public static WarningService getCurrent()
  {
    return ResinSystem.getCurrentService(WarningService.class);
  }
 
  /**
   * Send a warning message to any registered handlers. A high priority warning
   * only goes to all handlers, high priority first. High priority handlers do
   * not receive non-high priority warnings.
   *
   * @param source source of the message, usually you
   * @param msg test to print or send as an alert
   * @param isHighPriority set true to send to high priority warning handlers
   */
  public void sendWarning(Object source, String msg)
  {
    try {
      String s = "WarningService: " + msg;
   
      // if warning is high-priority then send to high priority handlers first
      System.err.println(s);
     
      for (WarningHandler handler : _priorityHandlers) {
        handler.warning(source, msg);
      }
   
      // now send to the all handlers regardless of if its high priority
      for (WarningHandler handler : _handlers) {
        handler.warning(source, msg);
      }

      log.warning(s);
    } catch (Throwable e) {
      // WarningService must not throw exception
      log.log(Level.WARNING, e.toString(), e);
    }
  }
 
  /**
   * Send a warning message to any registered handlers. A high priority warning
   * only goes to all handlers, high priority first. High priority handlers do
   * not receive non-high priority warnings.
   *
   * @param source source of the message, usually you
   * @param msg test to print or send as an alert
   * @param isHighPriority set true to send to high priority warning handlers
   */
  public void sendWarning(Object source, Throwable e)
  {
    try {
      e.printStackTrace();
   
      String msg = e.toString();
   
      String s = "WarningService: " + e;
   
      // if warning is high-priority then send to high priority handlers first
      System.err.println(s);
     
      for (WarningHandler handler : _priorityHandlers) {
        try {
          handler.warning(source, msg);
        } catch (Throwable e1) {
          // WarningService must not throw exception
          log.log(Level.WARNING, e1.toString(), e1);
        }
      }
   
      // now send to the all handlers regardless of if its high priority
      for (WarningHandler handler : _handlers) {
        try {
          handler.warning(source, msg);
        } catch (Throwable e1) {
          // WarningService must not throw exception
          log.log(Level.WARNING, e1.toString(), e1);
        }
      }

      log.warning(s);
    } catch (Throwable e1) {
      // WarningService must not throw exception
      log.log(Level.WARNING, e1.toString(), e1);
    }
  }

  /**
   * Sends a warning to the current service.
   */
  public static void sendCurrentWarning(Object source, String msg)
  {
    WarningService warning = getCurrent();
   
    if (warning != null)
      warning.sendWarning(source, msg);
    else {
      System.err.println(msg);
      log.warning(msg);
    }
  }

  /**
   * Sends a warning to the current service.
   */
  public static void sendCurrentWarning(Object source, Throwable e)
  {
    WarningService warning = getCurrent();
   
    if (warning != null)
      warning.sendWarning(source, e);
    else {
      e.printStackTrace();
      log.log(Level.WARNING, e.toString(), e);
    }
  }
 
  /**
   * Add a warning event handler.  High priority handlers ONLY get high
   * priority warnings, and they are notified first.  Other handlers gets all
   * warnings after high priority handlers are notified.
   * @param handler an object that implements WarningHandler
   * @param isHighPriority high priority handlers only get high priority warnings.
   */
  public void addHandler(WarningHandler handler)
  {
    _handlers.add(handler);
  }
 
  /**
   * Add a warning event handler.  High priority handlers ONLY get high
   * priority warnings, and they are notified first.  Other handlers gets all
   * warnings after high priority handlers are notified.
   * @param handler an object that implements WarningHandler
   * @param isHighPriority high priority handlers only get high priority warnings.
   */
  public void addPriorityHandler(WarningHandler handler)
  {
    _priorityHandlers.add(handler);
  }

  @Override
  public int getStartPriority()
  {
    return START_PRIORITY;
  }
}
TOP

Related Classes of com.caucho.env.warning.WarningService

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.