AlarmGenerator.java :  » J2EE » JOnAS-4.8.6 » org » objectweb » alarm » Java Open Source

Java Open Source » J2EE » JOnAS 4.8.6 
JOnAS 4.8.6 » org » objectweb » alarm » AlarmGenerator.java
// AlarmGenerator.java

package org.objectweb.alarm;

import java.rmi.RemoteException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.jms.*;

class ClientThread extends Thread {
    String name;

    public ClientThread(int num) {
  name = AlarmGenerator.m_device;
  if (name == null) {
      name = "device"+num;
  }
  setName(name);
    }

    /**
     * random returns an integer between 0 and max - 1
     */
    private int random(int max) {

  double d = Math.random();
  int ret = (int) (max * d);
  return ret;
    }

    private String getReason(int sev) {
  String reason;
  int num = AlarmGenerator.m_mess;
  if (num == 0) {
      num = random(10) + 1;
  }
  switch (sev) {
  case 1:
      reason = "Severe Error "+num;
      break;
  case 2:
      reason = "Warning "+num;
      break;
  case 3:
      reason = "Running OK";
      break;
  default:
      reason = "Unknown Alarm";
      break;
  }
  return reason;
    }

    public void run() {

  // Create Session + Publisher
  TopicSession session = null;
  TopicPublisher tp = null;
  try {
      session = AlarmGenerator.mytc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);  
      tp = session.createPublisher(AlarmGenerator.mytopic);
   } catch (Exception e) {
      System.err.println("Cannot create JMS Publisher:"+ e);
  }

  // main loop
  int severity = AlarmGenerator.m_severity;
  try {
      for (int i = 0; i < AlarmGenerator.m_loops; i++) {
    // publish messages to the topic
    try {
        MapMessage message = session.createMapMessage();
        // randomize the severity level if not specified
        if (severity == 0)
      severity = random(2)+1;
        message.setInt("Severity", severity);
        message.setString("From", name);
        message.setString("Reason", getReason(severity));
        tp.publish(message);
    } catch (JMSException e) {
        System.err.println("Exception occurred: "+ e);
    }
      }
  } catch (Exception e) {
      System.err.println("Exception in main loop"+ e);
  }
    }
}


public class AlarmGenerator { 

    static Context ictx = null;
    static Topic mytopic = null;
    static TopicConnection mytc = null;


    static boolean m_reinit = false;
    static int m_threads = 1;
    static int m_loops = 1;
    static int m_severity = 0;
    static int m_mess = 0;
    static String m_device = null;

    private static void usage() {
  System.out.println("AlarmGenerator [-d device] [-l loops] [-t threads] [-s severity] [-m num]");
    }

    public static void main(String[] args) {

  TopicConnectionFactory tcf = null;

  // Get Args
  // Get command args
  for (int argn = 0; argn < args.length; argn++) {
      String s_arg = args[argn];
      Integer i_arg;
      if (s_arg.equals("-l")) {
    s_arg = args[++argn];
    i_arg = java.lang.Integer.valueOf(s_arg);
    m_loops = i_arg.intValue();
      } else if (s_arg.equals("-d")) {
    m_device = args[++argn];
      } else if (s_arg.equals("-t")) {
    s_arg = args[++argn];
    i_arg = java.lang.Integer.valueOf(s_arg);
    m_threads = i_arg.intValue();
      } else if (s_arg.equals("-s")) {
    s_arg = args[++argn];
    i_arg = java.lang.Integer.valueOf(s_arg);
    m_severity = i_arg.intValue();;
      } else if (s_arg.equals("-m")) {
    s_arg = args[++argn];
    i_arg = java.lang.Integer.valueOf(s_arg);
    m_mess = i_arg.intValue();
      } else {
    usage();
    System.exit(2);
      }
  }

  // Get InitialContext
  try {
      ictx = new InitialContext();
  } catch (NamingException e) {
      System.err.println("Cannot get InitialContext:"+ e);
  }

  // Lookup JMS resources
  try {
      // lookup the TopicConnectionFactory through its JNDI name
      tcf = (TopicConnectionFactory) ictx.lookup("JTCF");
      // lookup the Topic through its JNDI name
      mytopic = (Topic) ictx.lookup("AlarmTopic");
  } catch (NamingException e) {
      System.err.println("Cannot lookup JMS Resources:"+ e);
  }

  // Create Connection
  try {
      mytc = tcf.createTopicConnection();
   } catch (Exception e) {
      System.err.println("Cannot create JMS Connection:"+ e);
  }

  // If reinit: send a special message to reinit AlarmTable first.
  // This doesn't work (DuplicateKey exception)
  // Code to remove!
  if (m_reinit) {
      TopicSession session = null;
      TopicPublisher tp = null;
      MapMessage message;
      try {
    session = AlarmGenerator.mytc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);  
    tp = session.createPublisher(AlarmGenerator.mytopic);
    message = session.createMapMessage();
    message.setInt("Severity", 1);
    message.setString("From", "reinit");
    message.setString("Reason", "reinit");
    tp.publish(message);
      } catch (JMSException e) {
    System.err.println("Exception occurred: "+ e);
      } finally {
    try {
        session.close();
    } catch (Exception i) {}
      }
  }

  // Create and start threads
  ClientThread[] t_thr = new ClientThread[m_threads];
  for (int i = 0; i < m_threads; i++) {
      t_thr[i] = new ClientThread(i+1);
      t_thr[i].start();
  }

  // Wait end of all threads
  for (int p = 0; p < m_threads; p++) {
      try {
    t_thr[p].join();
      } catch (InterruptedException e) {
    System.err.println("ERROR: Problem in ClientThread.join"+ e);
      }
  }

  // close connection
  try {
      mytc.close();
  } catch (Exception e) {
      e.printStackTrace();
  }
    }
}
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.