/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.connection; import Sirius.navigator.connection.proxy.*; import org.apache.log4j.*; import de.cismet.tools.CurrentStackTrace; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public final class SessionManager { //~ Static fields/initializers --------------------------------------------- private static final Logger logger = Logger.getLogger(SessionManager.class); private static SessionManager manager = null; private static double nonce = Math.random(); private static final Object blocker = new Object(); //~ Instance fields -------------------------------------------------------- private ConnectionProxy proxy; //~ Constructors ----------------------------------------------------------- /** * Creates a new SessionManager object. * * @param proxy DOCUMENT ME! */ private SessionManager(final ConnectionProxy proxy) { this.proxy = proxy; if (logger.isInfoEnabled()) { logger.info("singleton shared instance of SessionManager created"); // NOI18N } } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param proxy DOCUMENT ME! */ public static void init(final ConnectionProxy proxy) { if (logger.isDebugEnabled()) { logger.debug("init SessionManager " + nonce, new CurrentStackTrace()); // NOI18N } synchronized (blocker) { if (manager == null) { manager = new SessionManager(proxy); } else { manager.proxy = proxy; logger.warn("SessionManager has already been initialized"); // NOI18N // throw new RuntimeException("SessionManager has alreadyt been initialized"); } } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static boolean isInitialized() { synchronized (blocker) { return manager != null; } } /** * DOCUMENT ME! */ public static void destroy() { if (logger.isInfoEnabled()) { logger.info("destroy SessionManager" + manager, new CurrentStackTrace()); // NOI18N } synchronized (blocker) { logger.warn("destroying singelton SessionManager instance"); // NOI18N // manager = null; } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static boolean isConnected() { if (manager == null) { return false; } else { return getManager().proxy.isConnected(); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static boolean onClientSide() { return isConnected(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws RuntimeException DOCUMENT ME! */ private static SessionManager getManager() { if (manager == null) { final Throwable t = new CurrentStackTrace(); logger.warn("SessionManager has not been initialized", t); // NOI18N throw new RuntimeException("SessionManager has not been initialized", t); // NOI18N } return manager; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static Connection getConnection() { try { return getManager().proxy.getSession().getConnection(); } catch (Exception e) { logger.error("Error in getConnection()\nmaybe the manager is null" + getManager(), e); // NOI18N } return null; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static ConnectionSession getSession() { return getManager().proxy.getSession(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static ConnectionProxy getProxy() { return getManager().proxy; } }