Here is the interface (followed by some other modification):

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
package org.apache.jserv;

import javax.servlet.http.*;

/**
 * This is the object that encapsulates a session.
 *
 * @author Richard Bedard
 * @version $Revision: 1.1.1.1 $ $Date: 2000/03/20 14:42:27 $
 */
public interface JServSessionStorage {
    /**
     * Called we we need to add a session object in our local table
     * @PARAM session The session to keep
     * @PARAM id The id of the session
     */
    public void add(JServSession session, String id);

    /**
     * Called we we need to remove a session object of our local table
     * @PARAM id The id of the session
     */
    public void remove(String id);

    /**
     * Called when we need to update a session object in our local table
     * @PARAM session The session to keep
     * @PARAM id The id of the session
     */
    public void update(JServSession session, String id);

    /**
     * Called to retrieve a session object
     * Warning, never do intensive code here, this method can be called a
lot
     * of time during a request
     * @PARAM id The id of the session
     */
    public JServSession get(String id);

    /**
     * Called when we need to load a session object in our local table,
called at
     * the beginning of a request
     * @PARAM id The id of the session
     */
    public void load(String id);

    /**
     * Called we we need to create a session object of our own type
     * @PARAM id The id of the session
     * @PARAM context The context of the session (for base class
constructor)
     * @RETURN session The session to keep
     */
    public JServSession create(String id, JServServletManager context);
}


///////////////////////////////////////////////////////////////////////
/////// Member to add in JServServletManager
///////////////////////////////////////////////////////////////////////
    /**
     * Interface to implement to store or replicate session.
     * By default no Storage is provided, its the user task to
     * implement this interface.
     */
    protected JServSessionStorage sessionStorage;



///////////////////////////////////////////////////////////////////////
/////// Add this in init (at the beginning) method of JServServletManager
///////////////////////////////////////////////////////////////////////

        // Creation of the storage class
        String sessionStorageClassName =
confs.getString("session.storage","none");
        if (!sessionStorageClassName.equals("none"))
        {
            try{
            sessionStorage =
(JServSessionStorage)Class.forName(sessionStorageClassName).newInstance();
            }catch (Exception e){
                JServ.log.log(CH_WARNING,"Error creating Sessin storage
class for servlet zone  " + name + " : " + e.toString());
            }
        }


///////////////////////////////////////////////////////////////////////
/////// Change the creation of the default hashtable (At the end of init
method)
///////////////////////////////////////////////////////////////////////
            if (sessionStorage == null)
                sessions = new Hashtable();

//// And only start the house keeping if we manage session localy

        // Start housekeeping thread
        // If we dont use JServ Session manager, then its not our job
        // to validate session
        if (sessions != null)
        {
            Thread housekeeping = new Thread(this);
            housekeeping.setDaemon(true);
            housekeeping.start();
        }


///////////////////////////////////////////////////////////////////////
/////// The modified getSession method of JServServletManager
///////////////////////////////////////////////////////////////////////
    /**
     * Returns the session bound to the specified session ID.
     *
     * @param sessionID the ID of a particular session object.
     * @return the session name. Returns null if the session ID does not
refer
     * to a valid session.
     */
    public synchronized HttpSession getSession(String sessionId)
    {
        HttpSession out = null;

        // First check the local list
        if (sessions != null)
            out = (HttpSession) sessions.get(sessionId);

        // If we dont find the session, then try the Storage List
        if (sessionStorage != null && out==null)
        {
            out = sessionStorage.get(sessionId);
            if (out != null)
                ((JServSession)out).setSessionContext(this);
        }

        return out;
    }

///////////////////////////////////////////////////////////////////////
/////// The modified createSession method of JServServletManager
///////////////////////////////////////////////////////////////////////
    /**
     * Creates a new session.
     *
     * @param response The response used to send a cookie to the client.
     * @param route Label to append to the id sent from jserv client.
     * @return A new session.
     */
    public synchronized JServSession createSession(HttpServletResponse
response, String route) {
        JServSession s = null;

        // Try to use our own implementation
        if (sessionStorage != null)
            s = sessionStorage.create(getIdentifier(route), this);

        // use default implementation..
        if (s == null)
            s = new JServSession(getIdentifier(route), this);

        if (this.sessionUseCookies) {
          Cookie c = new Cookie(session_identifier, s.id);

          // Removed to ....;
          c.setPath("/");
          response.addCookie(c);
        }

        if (sessions != null)
            sessions.put(s.id, s);

        if (sessionStorage != null)
            sessionStorage.add(s, s.id);

        if (!JServ.TURBO && JServ.log.active)
          JServ.log.log(CH_DEBUG, "Created session: " + s.id);
        return s;
    }



///////////////////////////////////////////////////////////////////////
/////// The modified removeSession method of JServServletManager
///////////////////////////////////////////////////////////////////////
    /**
     * Remove a session from the context. This is called by the session
     * when it is invalidated.
     *
     * @param s The session to remove from this context.
     */
    public synchronized void removeSession(JServSession s) {
        if (sessions != null)
            sessions.remove(s.id);

        if (sessionStorage != null)
            sessionStorage.remove(s.id);
    }
        

///////////////////////////////////////////////////////////////////////
/////// Two new method to add in JServServletManager
///////////////////////////////////////////////////////////////////////
    /**
     * Update a session. This is called after a request.
     *
     * @param s The session to update.
     */
    public synchronized void updateSession(JServSession s) {
        if (sessionStorage != null)
            sessionStorage.update(s, s.id);
    }


    /**
     * Force the manager to load a session.
     * To be called before the servlet is execute.
     *
     * @param s The session to update.
     */
    public synchronized void loadSession(String id) {
        if (sessionStorage != null)
            sessionStorage.load(id);
    }


///////////////////////////////////////////////////////////////////////
/////// Add this in the finnaly of processRequest method of JServConnection
///////////////////////////////////////////////////////////////////////
            // Update the session
            if (session != null)
            {
                mgr.updateSession(session);
                session.unlock();
            }


///////////////////////////////////////////////////////////////////////
/////// And this before "JServSession s = (JServSession)
mgr.getSession(requestedSessionId);"
/////// of the processRequest method of JServConnection 
///////////////////////////////////////////////////////////////////////
            //Force the manager to load the session object
            mgr.loadSession(requestedSessionId);


///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////


Richard B�dard
Software Developer
recruitsoft.com
390, Saint-Vallier est
Bureau 401
Qu�bec (Qu�bec)
Canada G1K 3P6
Yahoo fax/voice-mail: 1-507-262-1145



-----Original Message-----
From: sudhi [mailto:[EMAIL PROTECTED]]
Sent: 17 avril, 2000 13:20
To: Java Apache
Subject: Re: Session Fail over/Migration


Thanks Richard,
Thats what I was thinking. But we dont have that much time to implement
this logic. what I was looking was any example or code, so that we can
use it right away.
Thanks
Sudhi

Richard Bedard wrote:
> 
> To solve this problem, i have modified some jserv class. I had an
interface
> with 3 method getSession, setSession and createSession. In
jserv.properties,
> i had a parameters that contains the user implementation of the interface,
> the object is then used instead of the Jserv session hashtable, in the
> implementation we use RMI to store Session Object in a global container,
> with this we have FULL fault tolerance. If you servlet crash in the middle
> of the execution, mod_jserv re-dispatch the call to another jserv, so the
> user never have error!
> 
> Richard B�dard
> Software Developer
> recruitsoft.com
> 390, Saint-Vallier est
> Bureau 401
> Qu�bec (Qu�bec)
> Canada G1K 3P6
> Yahoo fax/voice-mail: 1-507-262-1145
> 
> -----Original Message-----
> From: sudhi [mailto:[EMAIL PROTECTED]]
> Sent: 17 avril, 2000 12:39
> To: [EMAIL PROTECTED]
> Subject: Session Fail over/Migration
> 
> Hello,
> I have question :-)
> I am using apache1.3.12 and apacheJserv 1.1 and ApacheJSSI 1.1.2.
> I am interested in Session Fail over/migration. I looked into all of the
> document and mailing list. I wasn't able to find anything for failure
> and migration. The only thing i was able to find was in the document - "
> How to : Scalability - Load Balancing - Fault tolerance with Apache
> Jserv 1.1 ". In that document, in the fault tolerance section, it
> explains how session failure works (when one Jserv fails the request is
> sent to another Jserv, which creates a new session cookie (which will
> help to associate this request with this Jserv) and erases the old
> cookie. What I am really interested is
> " what happens to the session object ? "
> Is there a way to restore them, if so how to achieve this ?
> Is it possible to achieve session migration (from one jserv to another
> without loosing data) ?
> 
> It would be of great help if some body shed some light on this.
> Thanks in advance.
> Sudhi
> 
> --
> ----------------------------------------------------------
> To subscribe:        [EMAIL PROTECTED]
> To unsubscribe:      [EMAIL PROTECTED]
> Archives and Other:  <http://java.apache.org/main/mail.html>
> Problems?:           [EMAIL PROTECTED]
> 
> --
> ----------------------------------------------------------
> To subscribe:        [EMAIL PROTECTED]
> To unsubscribe:      [EMAIL PROTECTED]
> Archives and Other:  <http://java.apache.org/main/mail.html>
> Problems?:           [EMAIL PROTECTED]


--
----------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Archives and Other:  <http://java.apache.org/main/mail.html>
Problems?:           [EMAIL PROTECTED]


--
----------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Archives and Other:  <http://java.apache.org/main/mail.html>
Problems?:           [EMAIL PROTECTED]

Reply via email to