As I pointed out, it de-couples your business logic and the data from how it is 
presented to the user.  Further, it promotes re-usability.

You have found your problem to disappear when you mark the execute() method as being 
syncrhonized.  Is this a tenable alternative?  Won't it affect the scalability of your 
application?

As you've probably seen, 
http://jakarta.apache.org/struts/userGuide/building_controller.html#action_classes is 
a good read.

Sri

-----Original Message-----
From: Dan Bunea [mailto:danbunea@;linksystems.ro] 
Sent: Monday, October 28, 2002 9:18 AM
To: 'Struts Users Mailing List'
Subject: RE: Huge action instance synchronization problem



Thank you, but what happens if I set the execute method from the action synchronized? 
I did that and it works fine. I have also run some tests to see if performance drops 
but it did not.

-----Original Message-----
From: Sri Sankaran [mailto:Sri.Sankaran@;sas.com] 
Sent: Monday, October 28, 2002 4:13 PM
To: Struts Users Mailing List
Subject: RE: Huge action instance synchronization problem

It is good practice to have a delegate class that handles all business logic.  This 
will not only ensure that you don't run into problems such as you state but also 
de-couples your business logic from the Struts framework -- which *should* be used 
only for controlling your presentation.

public class SomeAction extends Action {
  public void execute(...) {
    Delegate delegate = new Delegate(...);
    delegate.execute(...);
  }
}

The delegate is responsible for all business operations including (any) database 
calls. Also make sure that your action class doesn't have any instance variables and 
only stack-resident method scope variables.  The delegate should have all the 
information that would be needed.  This way sessions don't step on each other.

Sri

-----Original Message-----
From: Dan Bunea [mailto:danbunea@;linksystems.ro] 
Sent: Monday, October 28, 2002 3:14 AM
To: [EMAIL PROTECTED]
Cc: 'Craig R. McClanahan'
Subject: Huge action instance synchronization problem


 
My problem: I have a search action. When 2 (or more) users submit the search form 
simultaniously, because the seach usually takes about 1-2 seconds, the same action 
instance is rethrieved to complete the search and sessions are combined like this: the 
action makes the search for the first session but does not finish until the second 
search is performed and because the resultset is divided into pages and this 
divisation is stored into session, both pages with results are put in the second 
session, and the second user shall be dispalyed the correct results but the first 
shall have null pointer exception because in his session there is no object 
representing the divisation of the resultset on pages. 
 
The problem in my opinion is because the same action instance performs the same task 
for the 2 users and so the sessions are combined, which is a huge problem, because 
like this every method of an action (dispatch
action) that takes a while to complete shall have the same problem.
 
Please advise me how to solve this problem. 
Thank you , 
Dan Bunea
 
PS Dear Craig , I am sorry to bother you but this problem is very urgent, as the 
project is in final stages and this is a potentially huge problem.  I have read that 
each action is instantiated only once in the RequestProcessor and for each request the 
action is rethrieved and its methods executed, but I have also read that this is not 
synchronized.
 

--
To unsubscribe, e-mail: <mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>


--
To unsubscribe, e-mail:   <mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>


--
To unsubscribe, e-mail:   <mailto:struts-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@;jakarta.apache.org>

Reply via email to