Hi All

I´ve the need to put my application in various servers with a loadBalancer.

As I don´t want to have replication of sessions I thouhgt to make my own FlowExecutionStorage class to store flow execution in a DB.

My code was:

Code:
public FlowExecution load(String id, Event event) {
        FlowExecution flow = null;
        Statement stmt;
        ResultSet rs;

        if (con == null) {
            con = this.getConnection();
        }

        log.info("En load flow");

        try {
            stmt = con.createStatement();
            rs = stmt.executeQuery("SELECT flowObject FROM flow WHERE id = '" + id + "'");

            while (rs.next()) {

                byte[] st = (byte[]) rs.getObject(1);
                //   or  byte[] st = rs.getBytes(1);
                //   or  Blob aBlob = rs.getBlob(1);
                //       byte[] st = aBlob.getBytes(0, (int) aBlob.length());
                ByteArrayInputStream baip = new ByteArrayInputStream(st);
                ObjectInputStream ois = new ObjectInputStream(baip);
                // re-create the object
                flow = (FlowExecution) ois.readObject();

                if (log.isInfoEnabled()) {
                    log.info("Retrieving flow ID: " + flow.toString());
                }
            }
        } catch (ClassNotFoundException cnf) {
            log.error("Error IOE al recuperar flow id: " + id + " con eventId = " + event.getId()
                    + " -- " + cnf.getMessage());
            throw new FlowExecutionStorageException(cnf.getMessage(), cnf);
        } catch (IOException ioe) {
            log.error("Error IOE al recuperar flow id: " + id + " con eventId = " + event.getId()
                    + " -- " + ioe.getMessage());
            throw new FlowExecutionStorageException(ioe.getMessage(), ioe);
        } catch (SQLException sqle) {
            log.error("Error al recuperar flow id " + id
                    + " con eventId = " + event.getId() + " table: " + sqle.getMessage());
            throw new FlowExecutionStorageException(sqle.getMessage(), sqle);
        }

        return flow;
    }

    public void remove(String id, Event event) {
        boolean result = false;

        log.info("En remove flow");

        try {
            Statement stmt = con.createStatement();
            result = stmt.execute("DELETE FROM flow WHERE id = '" + id + "'");

        } catch (SQLException sqle) {
            log.error("Error SQL al borrar flow id " + id
                    + " y eventId = " + event.getId()
                    + " exception: " + sqle.getMessage());
        }

        log.info("Al borrar flow con id = " + id
                + " y eventId = " + event.getId() + "resultado fue: " + result);
    }

    /**
     * Saves a flow execution session
     *
     * @param id
     * @param flowExecution
     * @param event
     * @return id
     */
    public String save(String id,
                       FlowExecution flowExecution,
                       Event event) {

        if (con == null) {
            con = this.getConnection();
        }

        if (id == null) {
            DefaultRandomStringGenerator drg = new DefaultRandomStringGenerator(40);
            id = drg.getNewString();
        }

        log.info("Event es: " + event.toString());

        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(flowExecution);
            // serialize the employee object into a byte array
            byte[] flowAsBytes = baos.toByteArray();
            ByteArrayInputStream bais =
                    new ByteArrayInputStream(flowAsBytes);

            // Insert into DB
            PreparedStatement pstmt = con.prepareStatement("INSERT INTO flow VALUES(?, ?, ?)");
            pstmt.setString(1, id);
            pstmt.setBinaryStream(2, bais, flowAsBytes.length);
            pstmt.setString(3, event.getId());
            pstmt.executeUpdate();
            pstmt.close();

            log.info("Inserted in DB id = " + id
                    + " and flowExecutin = " + flowExecution.toString()
                    + " and event = " + event.getId());

        } catch (IOException ioe) {
            log.error("Error IOE al insertar en flow table: " + ioe.getMessage());
            throw new FlowExecutionStorageException(ioe.getMessage(), ioe);
        } catch (SQLException sqle) {
            log.error("Error al insertar en flow table: " + sqle.getMessage());
            throw new FlowExecutionStorageException(sqle.getMessage(), sqle);
        }

        return id;
    }

My application uses a login flow then when starts it shows a login page form and I can see in DB that stores data ok.

But when I make the submit, my app hangs and I see the followin error:

Code:
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Request submited>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Execution listener...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Session starting>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Execution listener...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Session started...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <State entered...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Execution listener...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction&#93; - <Entre en TGTCheckAction>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction&#93; - <EN TGTCheckAction appId es&#58; null>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction&#93; - <No hay ST ni TGT hay renew>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction&#93; - <Service es null>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Session started...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <State entered...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Execution listener...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Session started...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.BSFlowListenerImpl&#93; - <Session started...>
2005-10-03 15&#58;15&#58;09,788 INFO &#91;com.bs.its.tp.cas.web.flow.DBFlowExecutionStorage&#93; - <Event es&#58; &#91;ServletEvent@10e9df source = org.apache.coyote.tomcat5.CoyoteRequestFacade@6a2f81, id = &#91;null&#93;, stateId = &#91;null&#93;, parameters = map&#91;&#91;empty&#93;&#93;&#93;>
2005-10-03 15&#58;15&#58;09,803 INFO &#91;com.bs.its.tp.cas.web.flow.DBFlowExecutionStorage&#93; - <Inserted in DB id = f5MurWyM4p3qQzceJzBjIiGVcxaOcw2OGGFjoweo and flowExecutin = &#91;FlowExecutionImpl@154ea79 activeFlowId = 'logonFlow', currentStateId = 'viewLogonForm', rootFlow = &#91;Flow@1e2c841 id = 'logonFlow', startState = &#91;ActionState@205756 id = 'ticketGrantingTicketCheck', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@3299f6 action = com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction@19fc25, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@996cca on = 'success', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@b57e9a on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@18adae2 on = 'bindAndValidate', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1283052 on = 'gateway', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@17c96a9 on = 'noService', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, states = set&#91;&#91;ActionState@205756 id = 'ticketGrantingTicketCheck', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@3299f6 action = com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction@19fc25, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@996cca on = 'success', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@b57e9a on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@18adae2 on = 'bindAndValidate', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1283052 on = 'gateway', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@17c96a9 on = 'noService', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@873723 id = 'authorize', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@1533c8 action = com.bs.its.tp.cas.web.flow.AuthorizeAction@1faa614, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@16ef705 on = 'warn', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1b7c76 on = 'validated', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@883357 on = 'errorXml', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1e2afb2 on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ViewState@17cfd38 id = 'viewLogonForm', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@ffc3eb, setupCriteria = &#91;null&#93;, setupErrorStateId = &#91;null&#93;, transitions = set&#91;&#91;Transition@15b8520 on = 'submit', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@18105e8 id = 'bindAndValidate', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@1978933 action = com.bs.its.tp.cas.web.flow.LoginFormAction@1b0889a, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@1250ff2 on = 'success', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@3a0ab1 on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@940f82 id = 'submit', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@d844a9 action = com.bs.its.tp.cas.web.flow.LoginFormAction@1b0889a, properties = map&#91;'method' -> 'submit'&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@17c2891 on = 'noService', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@4b82d2 on = 'authorize', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@179d854 on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@69a4cb on = 'ticketException', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@1c20eb7 id = 'warn', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@185fe0c action = com.bs.its.tp.cas.web.flow.WarnAction@1e9f5cc, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@b86944 on = 'redirect', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@107108e on = 'warn', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;EndState@cfe049 id = 'viewGenericLogon', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@831a91&#93;, &#91;EndState@18e18a3 id = 'showWarningView', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@1453d72&#93;, &#91;EndState@1f38fc6 id = 'redirect', flow = 'logonFlow', viewDescriptorProducer = org.jasig.cas.web.flow.RedirectViewDescriptorCreator@1c70315&#93;, &#91;EndState@179f36b id = 'viewNoAuthorized', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@9b59a2&#93;, &#91;EndState@15bfdbd id = 'viewNotAuthorizedXML', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@119db9e&#93;, &#91;EndState@6f8b2b id = 'viewValidated', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@a166bd&#93;&#93;&#93;, executingFlowSessions = list&#91;&#91;FlowSessionImpl@17d2f0e flow = &#91;Flow@1e2c841 id = 'logonFlow', startState = &#91;ActionState@205756 id = 'ticketGrantingTicketCheck', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@3299f6 action = com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction@19fc25, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@996cca on = 'success', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@b57e9a on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@18adae2 on = 'bindAndValidate', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1283052 on = 'gateway', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@17c96a9 on = 'noService', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, states = set&#91;&#91;ActionState@205756 id = 'ticketGrantingTicketCheck', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@3299f6 action = com.bs.its.tp.cas.web.flow.TicketGrantingTicketCheckAction@19fc25, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@996cca on = 'success', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@b57e9a on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@18adae2 on = 'bindAndValidate', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1283052 on = 'gateway', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@17c96a9 on = 'noService', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@873723 id = 'authorize', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@1533c8 action = com.bs.its.tp.cas.web.flow.AuthorizeAction@1faa614, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@16ef705 on = 'warn', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1b7c76 on = 'validated', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@883357 on = 'errorXml', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@1e2afb2 on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ViewState@17cfd38 id = 'viewLogonForm', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@ffc3eb, setupCriteria = &#91;null&#93;, setupErrorStateId = &#91;null&#93;, transitions = set&#91;&#91;Transition@15b8520 on = 'submit', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@18105e8 id = 'bindAndValidate', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@1978933 action = com.bs.its.tp.cas.web.flow.LoginFormAction@1b0889a, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@1250ff2 on = 'success', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@3a0ab1 on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@940f82 id = 'submit', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@d844a9 action = com.bs.its.tp.cas.web.flow.LoginFormAction@1b0889a, properties = map&#91;'method' -> 'submit'&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@17c2891 on = 'noService', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@4b82d2 on = 'authorize', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@179d854 on = 'error', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@69a4cb on = 'ticketException', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;ActionState@1c20eb7 id = 'warn', flow = 'logonFlow', actions = set&#91;&#91;AnnotatedAction@185fe0c action = com.bs.its.tp.cas.web.flow.WarnAction@1e9f5cc, properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;, transitions = set&#91;&#91;Transition@b86944 on = 'redirect', properties = map&#91;&#91;empty&#93;&#93;&#93;, &#91;Transition@107108e on = 'warn', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, &#91;EndState@cfe049 id = 'viewGenericLogon', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@831a91&#93;, &#91;EndState@18e18a3 id = 'showWarningView', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@1453d72&#93;, &#91;EndState@1f38fc6 id = 'redirect', flow = 'logonFlow', viewDescriptorProducer = org.jasig.cas.web.flow.RedirectViewDescriptorCreator@1c70315&#93;, &#91;EndState@179f36b id = 'viewNoAuthorized', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@9b59a2&#93;, &#91;EndState@15bfdbd id = 'viewNotAuthorizedXML', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@119db9e&#93;, &#91;EndState@6f8b2b id = 'viewValidated', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@a166bd&#93;&#93;&#93;, currentState = &#91;ViewState@17cfd38 id = 'viewLogonForm', flow = 'logonFlow', viewDescriptorProducer = org.springframework.web.flow.SimpleViewDescriptorCreator@ffc3eb, setupCriteria = &#91;null&#93;, setupErrorStateId = &#91;null&#93;, transitions = set&#91;&#91;Transition@15b8520 on = 'submit', properties = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93;, attributesCount = 0, attributes = map&#91;&#91;empty&#93;&#93;&#93;&#93;&#93; and event = null>
2005-10-03 15&#58;15&#58;38,647 ERROR &#91;org.springframework.web.servlet.DispatcherServlet&#93; - <Could not complete request>
java.lang.NullPointerException
	at org.springframework.web.flow.execution.impl.FlowExecutionImpl.toString&#40;FlowExecutionImpl.java&#58;483&#41;
	at com.bs.its.tp.cas.web.flow.DBFlowExecutionStorage.load&#40;DBFlowExecutionStorage.java&#58;57&#41;
	at org.springframework.web.flow.execution.FlowExecutionManager.onEvent&#40;FlowExecutionManager.java&#58;272&#41;
	at org.springframework.web.flow.execution.FlowExecutionManager.onEvent&#40;FlowExecutionManager.java&#58;245&#41;
	at org.springframework.web.flow.execution.servlet.ServletFlowExecutionManager.handle&#40;ServletFlowExecutionManager.java&#58;77&#41;
	at org.springframework.web.flow.mvc.FlowController.handleRequestInternal&#40;FlowController.java&#58;137&#41;
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest&#40;AbstractController.java&#58;128&#41;
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle&#40;SimpleControllerHandlerAdapter.java&#58;44&#41;
	at org.springframework.web.servlet.DispatcherServlet.doDispatch&#40;DispatcherServlet.java&#58;684&#41;
	at org.springframework.web.servlet.DispatcherServlet.doService&#40;DispatcherServlet.java&#58;625&#41;
	at org.springframework.web.servlet.FrameworkServlet.serviceWrapper&#40;FrameworkServlet.java&#58;386&#41;
	at org.springframework.web.servlet.FrameworkServlet.doPost&#40;FrameworkServlet.java&#58;355&#41;
	at javax.servlet.http.HttpServlet.service&#40;HttpServlet.java&#58;709&#41;
	at javax.servlet.http.HttpServlet.service&#40;HttpServlet.java&#58;802&#41;
	at org.jasig.cas.web.init.SafeDispatcherServlet.service&#40;SafeDispatcherServlet.java&#58;115&#41;
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter&#40;ApplicationFilterChain.java&#58;237&#41;
	at org.apache.catalina.core.ApplicationFilterChain.doFilter&#40;ApplicationFilterChain.java&#58;157&#41;
	at org.apache.catalina.core.StandardWrapperValve.invoke&#40;StandardWrapperValve.java&#58;214&#41;
	at org.apache.catalina.core.StandardValveContext.invokeNext&#40;StandardValveContext.java&#58;104&#41;
	at org.apache.catalina.core.StandardPipeline.invoke&#40;StandardPipeline.java&#58;520&#41;
	at org.apache.catalina.core.StandardContextValve.invokeInternal&#40;StandardContextValve.java&#58;198&#41;
	at org.apache.catalina.core.StandardContextValve.invoke&#40;StandardContextValve.java&#58;152&#41;
	at org.apache.catalina.core.StandardValveContext.invokeNext&#40;StandardValveContext.java&#58;104&#41;
	at org.apache.catalina.core.StandardPipeline.invoke&#40;StandardPipeline.java&#58;520&#41;
	at org.apache.catalina.core.StandardHostValve.invoke&#40;StandardHostValve.java&#58;137&#41;
	at org.apache.catalina.core.StandardValveContext.invokeNext&#40;StandardValveContext.java&#58;104&#41;
	at org.apache.catalina.valves.ErrorReportValve.invoke&#40;ErrorReportValve.java&#58;118&#41;
	at org.apache.catalina.core.StandardValveContext.invokeNext&#40;StandardValveContext.java&#58;102&#41;
	at org.apache.catalina.core.StandardPipeline.invoke&#40;StandardPipeline.java&#58;520&#41;
	at org.apache.catalina.core.StandardEngineValve.invoke&#40;StandardEngineValve.java&#58;109&#41;
	at org.apache.catalina.core.StandardValveContext.invokeNext&#40;StandardValveContext.java&#58;104&#41;
	at org.apache.catalina.core.StandardPipeline.invoke&#40;StandardPipeline.java&#58;520&#41;
	at org.apache.catalina.core.ContainerBase.invoke&#40;ContainerBase.java&#58;929&#41;
	at org.apache.coyote.tomcat5.CoyoteAdapter.service&#40;CoyoteAdapter.java&#58;160&#41;
	at org.apache.coyote.http11.Http11Processor.process&#40;Http11Processor.java&#58;799&#41;
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection&#40;Http11Protocol.java&#58;705&#41;
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt&#40;PoolTcpEndpoint.java&#58;577&#41;
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run&#40;ThreadPool.java&#58;683&#41;
	at java.lang.Thread.run&#40;Thread.java&#58;534&#41;
03-oct-2005 15&#58;21&#58;44 org.apache.coyote.http11.Http11Protocol pause
I really don't know why the error is produced.

Also, I saw that event parameter comes to save method always without data and is never used to return a vale. Why all methods receives an event parameter ?

Could someboyd give me a clue about this ?


Thanks in advance

J