> I'm still not completely clear of what "server-side state management" means,

First and foremost, the reason for Wicket managing the state of
components transparently is that it aims to provide it's users with a
true object oriented programming model. Remember that objects are data
+ behavior. Isn't it crazy that a large part of the developer
community uses Java to develop web applications in a procedural
fashion? I think it is.

What this buys you besides having a programming model that doesn't
suck? That depends on the situation.  Take for example this sketch of
a component that is used in the day project I'm working on.

-------------------------------------------------
|                [switch to normal editor]    |
|   -------------------------------------------   |
|   |                                                       |   |
|   |                                                       |   |
|   |                                                       |   |
|   -------------------------------------------   |
-------------------------------------------------

It is a text editor with a link that will switch between rich editing
and a plain text area. Simple as it sounds, creating such a component
is not trivial in most frameworks; you either have to carry it's state
(what mode it is in) over in all the URLs that can have an effect on
the page, including URLs that take you to intermediate pages (when you
work with tabs are are in a wizard for instance), or you have to keep
it in the session object. The latter is what programmers typically use
(in my experience, and for a good reason, as carrying URL parameters
over is pure maintenance hell), though this has the disadvantage that
such ad-hoc session usage leaks all over the place. Programmers forget
or can't know when to clean up, and on a larger application, there may
be tons of instances of such ad-hoc session usage. Alternatively
people start telling their customers certain funcationality can't be
done or only at a great price or with a different technology (like
flash). But now, with Wicket, creating such a component is super easy.

Going from there, there are actually quite a lot of components that
benefit from the ability of keeping state. Think about paginated
lists, trees, tab panels, wizards, etc, etc. Such components can be
created with other frameworks usually with quite a lot of pain and/ or
limitations, but with Wicket it is easy. And the main reason why it is
easy is because it is a stateful framework.

But it doesn't stop with simply reusable components. Once you get the
hang of it, you'll find that creating complex navigation structures
(more opinionated ranting here:
http://chillenious.wordpress.com/2006/07/16/on-page-navigation/) and
dependencies between components (such as e.g. the breadcrumps
component employs) are relatively easy to implement largely because of
the ability to use state in your components.

> but seeing as Wicket is built on the standard technology, I assume this
> means using HttpSession to store information.

By default, Wicket stores:
1) The user session
2) PageMaps, which contain the current page for call backs (links,
forms, etc) and and a number of pages for back button support.

Where exactly that info is stored depends on the ISessionStore
implementation. In Wicket 1.3 (our default), the default
implementation uses a HttpSession instance to store the use session
and current page, and it saves (using serialization) older pages to a
second level cache (temp dir by default) for back button support. All
as much optimized and non-blocking as we could get away with :)

> Things being Serializable
> seems to be a common technique within Wicket; does this mean that the
> HttpSession will become full of serialized objects? How can this not affect
> memory usage? Or is this the trade-off, that is, if you use a
> component-based framework, you don't have to worry about the session state
> so much, but you better add more memory to the production box(?).

Yep, that's it. It's a trade off. If memory is a prime concern, Wicket
may not be your best choice. But I think that in general, the
programming model is well worth the price, especially considering for
most applications, the larger share of costs is in development hours,
and then specially those spent for maintaining the application. But if
you are developing the next Google, this may not be the case of
course. Best thing for anyone to do is look at the pros and cons and
try to do your calculations. Remember that the root of all evil in our
business is premature optimization. :)

Hope this helped,

Eelco

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to