If your business class is thread-safe then it doesn't make much difference which way you do it. You still didn't say which version of Struts you're using; it makes a difference.
If it's Struts 2, then it doesn't make any difference whatsoever, because each action will have its own instance of AddBusinessImpl.
If it's Struts 1, approach one will create a new instance of AddBusinessImpl in each request thread: even though there's only one instance of the action each method call is in its own thread.
Approach two uses a shared AddBusinessImpl; if it's truly thread-safe the worse-case scenario is that both requests create a new AddBusinessImpl and one of them replaces the first. If the action's execute() method is invoked at "EXACTLY THE SAME TIME" then you've introduced a race condition since you're not synchronizing the instantiation. Since the business class is thread-safe, it may not matter, but I'd argue it's a bad habit.
Of course, if it's Struts 1, and AddBusinessImpl actually *is* thread-safe, there's zero reason to create the instance in the execute() method--you could just use:
On a stylistic note, if AddBusinessImpl is really an implementation, the addBusiness member should really reference its interface, allowing for easier injection of
test implementations. That would also affect the code inside the execute method: the point of having interfaces and implementations is so the main-line code doesn't care what the implementation is; it would simply access addBusiness, the implementation of which is determined elsewhere.
[ November 28, 2008: Message edited by: David Newton ]