TestRecording.java :  » J2EE » Pustefix » de » schlund » pfixxml » testrecording » Java Open Source

Java Open Source » J2EE » Pustefix 
Pustefix » de » schlund » pfixxml » testrecording » TestRecording.java
package de.schlund.pfixxml.testrecording;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import de.schlund.pfixxml.resources.FileResource;
import de.schlund.pfixxml.resources.ResourceUtil;
import de.schlund.pfixxml.serverutil.SessionAdmin;
import de.schlund.pfixxml.serverutil.SessionData;
import de.schlund.pfixxml.serverutil.SessionInfoStruct;
import de.schlund.pfixxml.util.Xml;

public class TestRecording implements TestRecordingMBean {

   private final static Logger LOG=Logger.getLogger(TestRecording.class);
   
   private static TestRecording instance=new TestRecording();
   
   private final List<String> knownClients=new ArrayList<String>();
   
   public static TestRecording getInstance() {
      return instance;
   }
   
   public void init(Properties props) { 
      LOG.info("TestRecording init");
      try {
         MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); 
         ObjectName objectName = new ObjectName("Pustefix:type=TestRecording"); 
         mbeanServer.registerMBean(this, objectName);
      // otherwise, clients cannot instaniate TrailLogger objects:
         ObjectName createName = new ObjectName("Pustefix:type=TestRecording,name=loader");
         mbeanServer.registerMBean(this.getClass().getClassLoader(),createName);
     } catch(Exception x) {
         throw new RuntimeException("Can't register TestRecording MBean.",x);
     } 
   }
   
   public TestRecording() {
    
   }
   
   // TODO: who's responsible for unregister?
   public ObjectName startRecording(String sessionId) throws IOException {
     ObjectName name;
     TrailLogger logger;
     
     logger = new TrailLogger(TrailLogger.getVisit(getSession(sessionId)));
     
     try {
      name = new ObjectName("Pustefix:type=TestRecording,name=TrailLogger,session="+sessionId);
      MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); 
      mbeanServer.registerMBean(logger, name);
      return name;
     } catch(Exception x) {
        LOG.error("Can't register TrailLogger MBean!",x);
        throw new RuntimeException("Can't register TrailLogger MBean!",x);
     } 
   
   }
   
   public ApplicationList getApplicationList(boolean tomcat, String sessionSuffix) {
      FileResource file;
      
      file = ResourceUtil.getFileResourceFromDocroot("servletconf/projects.xml");
      try {
          return ApplicationList.load(Xml.parseMutable(file), tomcat, sessionSuffix);
      } catch (Exception e) {
          throw new RuntimeException(e);
      }
  }
   
   public List<SessionData> getSessions(String serverName, String remoteAddr) {
      SessionAdmin admin;
      Iterator<String> iter;
      String id;
      List<SessionData> lst;
      SessionInfoStruct info;
      
      lst = new ArrayList<SessionData>();
      admin = SessionAdmin.getInstance();
      iter = admin.getAllSessionIds().iterator();
      while (iter.hasNext()) {
          id = (String) iter.next();
          info = admin.getInfo(id);
          if (serverName.equals(info.getData().getServerName()) && remoteAddr.equals(info.getData().getRemoteAddr())) {
              lst.add(info.getData());
          }
      }
      return lst;
  }
   
   public void invalidateSession(String id) throws IOException {
      getSession(id).invalidate();
  }
   
   public boolean isKnownClient(String remoteAddr) {
      return knownClients.contains(remoteAddr);
  }

  public void addKnownClient(String remoteAddr) {
      knownClients.add(remoteAddr);
  }
  
  public void removeKnownClient(String remoteAddr) {
      knownClients.remove(remoteAddr);
  }
   
   public static HttpSession getSession(String id) throws IOException {
      SessionInfoStruct info;
      
      info = SessionAdmin.getInstance().getInfo(id);
      if (info == null) {
          throw new IOException("session not found: " + id);
      }
      return info.getSession();
  }
   
}
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.