Sergei:

But you're getting there..:)  Take the declaration of ArrayList *out* of:

>public class MyAction  extends Action {
>     protected ArrayList list = new ArrayList(); --->Take this out: BAD!!

and move it inside the methods to make them local..:

>public ActionForward execute(...) ... {
>         ArrayList list = new ArrayList(); -->GOOD!!
>         myMethod(list); --->GOOD!!

and:

>     protected void myMethod(ArrayList list) { -->GOOD!!
>         ArrayList list = new ArrayList();        -->Take this out: BAD!!

Regards,
Geeta

Niall Pemberton wrote:

> This is no good either. Action classes are not thread safe.
>
> Why not read the user manual. Theres a section "4.4.1 Action Class Design
> Guidelines"
>
> http://jakarta.apache.org/struts/userGuide/building_controller.html#action_classes
>
> ----- Original Message -----
> From: "Sergei P. Volin" <[EMAIL PROTECTED]>
> To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
> Sent: Thursday, March 04, 2004 9:32 AM
> Subject: Re: ConcurrentModificationException
>
> >
> > Greetings,
> >
> > That is the question! Today morning I've found the reason of my troubles.
> It
> > was my negligence in how I assigned a value to the iterated list that I
> > placed in the object which I then stored in a session for JSP's iterator.
> I
> > declared the list in my action as a global variable, assigned a value to
> it
> > in the protected void method which is called by the action execute method
> > like this:
> >
> > public class MyAction  extends Action {
> >     protected ArrayList list = new ArrayList();
> > ...
> >     public ActionForward execute(...) ... {
> >         list = new ArrayList();
> >         myMethod(...);
> >         obj.setList(list)
> >         session.setAttribute("buinessObj", obj);
> >         ...
> >         return mapping.findForward(forward);
> >     }
> >     protected void myMethod(...) {
> >         ...
> >         while (rs.next()) {
> >         ...
> >             list.add(el);
> >         ...
> >         }
> >     }
> > }
> >
> > Now this piece of code looks like:
> >
> > public class MyAction  extends Action {
> >     protected ArrayList list = new ArrayList();
> > ...
> >     public ActionForward execute(...) ... {
> >         list = new ArrayList();
> >         myMethod(...);
> >         obj.setList(list)
> >         session.setAttribute("buinessObj", obj);
> >         ...
> >         return mapping.findForward(forward);
> >     }
> >     protected void myMethod(...) {
> >         ArrayList list = new ArrayList();        // new
> >         ...
> >         while (rs.next()) {
> >         ...
> >             list.add(el);
> >         ...
> >         }
> >         this.list =list;                        // new
> >     }
> > }
> >
> > It looks that with this code I rid off all my troubles now - no
> > ConcurrentModificationException, no doubling of list size. I made a dozen
> of
> > tests - no exceptions and the results were correct.
> >
> > Mr. Craig R. McClanahan! Am I right now with my code? Please, reply.
> > Thanks a lot,
> >
> > Sergei Volin.
> >
> >
> > ----- Original Message -----
> > From: "Craig R. McClanahan" <[EMAIL PROTECTED]>
> > To: "Struts Users Mailing List" <[EMAIL PROTECTED]>; "Sergei
> P.
> > Volin" <[EMAIL PROTECTED]>
> > Cc: "Struts Users Mailing List" <[EMAIL PROTECTED]>
> > Sent: Thursday, March 04, 2004 1:08 AM
> > Subject: Re: ConcurrentModificationException
> >
> >
> > |
> > | Quoting "Sergei P. Volin" <[EMAIL PROTECTED]>:
> > |
> > | >
> > | > I know this and I do not add/remove elements to/from list at all. Just
> > as I
> > | > said - only reading elements from list.
> > | > Are jsps (Tomcat) thread safe? I'm really worry about that.
> > | >
> > |
> > | Using instance variables to store request-specific state information, in
> a
> > JSP
> > | or servlet (or in a Struts Action class), is *not* thread safe, because
> > there
> > | is only one instance of the corresponding class, shared by simultaneous
> > | requests.  Using local variables, though, should be fine.
> > |
> > | Craig McClanahan
> > |
> > |
> > | ---------------------------------------------------------------------
> > | To unsubscribe, e-mail: [EMAIL PROTECTED]
> > | For additional commands, e-mail: [EMAIL PROTECTED]
> > |
> > |
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to