All Downloads are FREE. Search and download functionalities are using the official Maven repository.

clime.messadmin.core.MessAdmin Maven / Gradle / Ivy

Go to download

Notification system and Session administration for J2EE Web Applications

There is a newer version: 4.1.1
Show newest version
/**
 * 
 */
package clime.messadmin.core;

import java.util.Set;

import clime.messadmin.model.Application;
import clime.messadmin.model.Server;
import clime.messadmin.model.Session;

/**
 * Manages actions on WebApp and Sessions. Used by admin servlet and JMX.
 * @author Cédrik LIME
 */
public class MessAdmin {

	private MessAdmin() {
		super();
	}


	public static String getVersion() {
		String result = "";
		Package p = MessAdmin.class.getPackage();
		if (p != null) {
			result = p.getImplementationVersion();
		}
		return result;
	}

	/**
	 * If message if blank or null, remove ServletContext attribute, otherwise inject message into ServletContext
	 * @param applicationIds
	 * @param message
	 * @return number of modified sessions
	 */
	public static int injectApplicationsPermanent(String[] applicationIds, String message) {
		if (null == applicationIds) {
			return 0;
		}
		int nbAffectedApplications = 0;
		for (int i = 0; i < applicationIds.length; ++i) {
			String applicationId = applicationIds[i];
			Application application = Server.getInstance().getApplication(applicationId);
			if (null == application) {
				// Shouldn't happen, but let's play nice...
				//log("WARNING: can't inject message for null application " + applicationId);
				continue;
			}
			boolean actionDone = application.injectPermanentMessage(message);
			if (actionDone) {
				++nbAffectedApplications;
			}
		}
		return nbAffectedApplications;
	}

	/**
	 * If message if blank or null, remove ServletContext attribute, otherwise inject message into ServletContext
	 * @param applicationIds
	 * @param message
	 * @return number of modified sessions
	 */
	public static int injectApplicationsOnce(String[] applicationIds, String message) {
		if (null == applicationIds) {
			return 0;
		}
		int nbAffectedApplications = 0;
		for (int i = 0; i < applicationIds.length; ++i) {
			String applicationId = applicationIds[i];
			int result = injectAllSessions(applicationId, message);
			if (result > 0) {
				++nbAffectedApplications;
			}
		}
		return nbAffectedApplications;
	}

	/**
	 * If message if blank or null, remove HttpSession attribute, otherwise inject message into HttpSessions
	 * @param message
	 * @return number of modified sessions
	 */
	public static int injectAllSessions(String context, String message) {
		Set/**/ activeSessionIds = Server.getInstance().getApplication(context).getActiveSessionsIds();
		String[] sessionIds = new String[activeSessionIds.size()];
		sessionIds = (String[]) activeSessionIds.toArray(sessionIds);
		return injectSessions(context, sessionIds, message);
	}

	/**
	 * If message if blank or null, remove HttpSession attribute, otherwise inject message into HttpSessions
	 * @param sessionIds
	 * @param message
	 * @return number of modified sessions
	 */
	public static int injectSessions(String context, String[] sessionIds, String message) {
		if (null == sessionIds) {
			return 0;
		}
		int nbAffectedSessions = 0;
		Application application = Server.getInstance().getApplication(context);
		for (int i = 0; i < sessionIds.length; ++i) {
			String sessionId = sessionIds[i];
			Session session = application.getSession(sessionId);
			if (null == session) {
				// Shouldn't happen, but let's play nice...
				//log("WARNING: can't inject message for null session " + sessionId);
				continue;
			}
			boolean actionDone = session.injectMessage(message);
			if (actionDone) {
				++nbAffectedSessions;
			}
		}
		return nbAffectedSessions;
	}

	/**
	 * Invalidate HttpSessions
	 * @param sessionIds
	 * @return number of invalidated sessions
	 */
	public static int invalidateSessions(String context, String[] sessionIds) {
		if (null == sessionIds) {
			return 0;
		}
		int nbAffectedSessions = 0;
		Application application = Server.getInstance().getApplication(context);
		for (int i = 0; i < sessionIds.length; ++i) {
			String sessionId = sessionIds[i];
			Session session = application.getSession(sessionId);
			if (null == session) {
				// Shouldn't happen, but let's play nice...
				//log("WARNING: can't invalidate null session " + sessionId);
				continue;
			}
			try {
				session.getSessionInfo().invalidate();
				++nbAffectedSessions;
				//log("Invalidating session id " + sessionId);
			} catch (IllegalStateException ise) {
				//log("Can't invalidate already invalidated session id " + sessionId);
			}
		}
		return nbAffectedSessions;
	}

	/**
	 * Removes an attribute from an HttpSession
	 * @param sessionId
	 * @param attributeName
	 * @return true if there was an attribute removed, false otherwise
	 */
	public static boolean removeSessionAttribute(String context, String sessionId, String attributeName) {
		Session session = Server.getInstance().getApplication(context).getSession(sessionId);
		if (null == session) {
			// Shouldn't happen, but let's play nice...
			//log("WARNING: can't remove attribute '" + attributeName + "' for null session " + sessionId);
			return false;
		}
		boolean wasPresent = false;
		try {
			wasPresent = (null != session.getSessionInfo().getAttribute(attributeName));
			session.getSessionInfo().removeAttribute(attributeName);
		} catch (IllegalStateException ise) {
			//log("Can't remote attribute '" + attributeName + "' for invalidated session id " + session.getId());
		}
		return wasPresent;
	}

	/**
	 * Sets the maximum inactive interval (session timeout) an HttpSession
	 * @param sessionId
	 * @param maxInactiveInterval in seconds
	 * @return old value for maxInactiveInterval
	 */
	public static int setSessionMaxInactiveInterval(String context, String sessionId, int maxInactiveInterval) {
		Session session = Server.getInstance().getApplication(context).getSession(sessionId);
		if (null == session) {
			// Shouldn't happen, but let's play nice...
			//log("WARNING: can't set timout for null session " + sessionId);
			return 0;
		}
		try {
			int oldMaxInactiveInterval = session.getSessionInfo().getMaxInactiveInterval();
			session.getSessionInfo().setMaxInactiveInterval(maxInactiveInterval);
			return oldMaxInactiveInterval;
		} catch (IllegalStateException ise) {
			// invalidated session
			return 0;
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy