I guess I'm confused.  If Spring is injecting the data, why do you
need it to also inject the Service?
  (*Chris*)

On Thu, Jul 10, 2008 at 10:41 AM, Gabriel Belingueres
<[EMAIL PROTECTED]> wrote:
> IMHO both approaches are similar, as the intention is to inject the
> required data when you need it. The difference is that you created
> both an interface and an interceptor to perform the injection, while I
> relied on Spring to do this work.
>
> As a general rule I think on writing custom interceptors only when
> there is some generic pre/post processing that would need to take on a
> set of actions but that are not part of regular functional
> requirements.
>
> See between the lines:
>
> 2008/7/10 Chris Pratt <[EMAIL PROTECTED]>:
>> But then your Service Bean/DAO has to be injected into every Action
>> that might need to load it
>
> Yes, in the same way you need to implement the xxxAware interface in
> every action that need to access the data.
>
>> and the code to check for the Data Object
>> and load it,
>
> Not quite; this is the job of Spring, I only declare it one time in
> the spring configuration xml file.
>
>>then store it to the context has to be Cut-n-Pasted
>
> Don't know what you meant here. There is not too much C&P. Just 2
> instance variables: one for the service, and the other for the data.
> Same as implementing the interface and declaring a variable to hold
> the data.
>
>> between each of those Actions.  Way too many chances for Cut-n-Paste
>> errors or incomplete fixes for my taste.  By using the Interceptor
>> that code is consolidated in one place and the only thing the Action
>> has to worry about it what it was created specifically to accomplish,
>> not all the other housekeeping chores.
>>  (*Chris*)
>>
>> On Wed, Jul 9, 2008 at 6:10 PM, Gabriel Belingueres
>> <[EMAIL PROTECTED]> wrote:
>>> Wow it is amazing how S2 can be used.
>>> This is a use of interceptor I've never seen before.
>>>
>>> IMHO, I think it is too much trouble to declare an xxxAware interface
>>> and an xxxInterceptor to just share the same database data across
>>> multiple pages. I would stick to store the data in session or
>>> application scope. You have available the SessionAware and
>>> ApplicationAware interfaces that injects into an action a
>>> java.util.Map that usually is enough for testability.
>>>
>>> My own common solution to this problem would be to use Spring to
>>> inject a service bean into the action that would retrieve the category
>>> list from a cache (OSCache works great for me and has easy Spring
>>> integration.) When data is not in the cache or it times-out, it is
>>> read from the database.
>>>
>>> 2008/7/9 Chris Pratt <[EMAIL PROTECTED]>:
>>>> That's usually how I start.  The one thing I usually add is an Aware
>>>> interface that allows me to inject the value into my Actions when it's
>>>> needed.  So in your case I'd add a simple interface:
>>>>
>>>> interface CategoryListAware {
>>>>  void setCategoryList(List<Category> categories);
>>>> }
>>>>
>>>> And at the end of your interceptor I'd add:
>>>>
>>>> Object action = invocation.getAction();
>>>> if(action instanceof CategoryListAware) {
>>>>  ((CategoryListAware)action).setCategoryList(categoryList);
>>>> }
>>>>
>>>> That way you can add the Interceptor to your default stack and the
>>>> Actions that need the category list can have it injected without
>>>> having to have any knowledge about the Session.  (which makes the
>>>> system much easier to unit test).
>>>>
>>>>  (*Chris*)
>>>>
>>>> On Wed, Jul 9, 2008 at 3:28 PM, Dhiraj Thakur <[EMAIL PROTECTED]> wrote:
>>>>> Hello there,
>>>>>
>>>>> There are 4 jsp page in which i want to show same category by retrieving 
>>>>> it
>>>>> from database.
>>>>>  What is the best way to do that? should i write a intercepter which will
>>>>> retrieve Category from database and store it in session?
>>>>> something like this
>>>>>
>>>>>
>>>>>        if (session.getAttribute("category") == null) {
>>>>>
>>>>>            CategoryDAO categoryDAO = new CategoryDAO();
>>>>>
>>>>>            categoryList = categoryDAO.listCategory();
>>>>>
>>>>>            session.setAttribute(ConfigAPP.CATEGORY_KEY, categoryList);
>>>>>
>>>>>            categoryList = (List)
>>>>> session.getAttribute(ConfigAPP.CATEGORY_KEY);
>>>>>
>>>>>            System.out.println(categoryList.size());
>>>>>
>>>>>        } else {
>>>>>            categoryList = categoryList = (List)
>>>>> session.getAttribute(ConfigAPP.CATEGORY_KEY);
>>>>>        }
>>>>>
>>>>>
>>>>> or is there any other way to do that ?
>>>>>
>>>>>
>>>>>
>>>>> *Dhiraj*
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> 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]
>
>

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

Reply via email to