Thanks for the clarification and sorry for the confusion. So readObject() as you have it in your code is fine.

To get the bean context i simply make my applicationbean implement
applicationcontextaware and then i use
((MyApplication)Application.get()).getBeanContext() static lookup which
works because application object is always present.

Still one question. The threadlocal used in Application.get() is set at the beginning of a request - on the request thread. I do not know but maybe the deserialization of the session could happen outside of a request - even in a totally different thread?

Maybe in readObject() a dynamic proxy could be injected which triggers on first access the onInject() method.

Christian


-Igor


On 11/7/05, Christian Essl <[EMAIL PROTECTED]> wrote:

On Mon, 7 Nov 2005 15:25:29 +0100, Johan Compagner <[EMAIL PROTECTED]>
wrote:

> And there is also a thing like XML Serialization
> Which also doesn't use the java read/write object at all.
>

Does this mean that the readObject is guaranteed to be called on Page
because it is serialized through the PageMap and is not a direct session
attribute?

I don't get realy clear with 'Serializable closure' in the spec:

"Developers are not guaranteed that containers will call readObject and
writeObject methods on
session attributes if they implement them, but are guaranteed that the
Serializable closure of their attributes will be preserved."

And if readObject() gets called on Pages can I than acess somehow the
ApplicationContext to get to the BeanContext?

Please help.

Thanks,
Christian

>
> On 11/7/05, Christian Essl <[EMAIL PROTECTED]> wrote:
>>
>> Hi Igor,
>>
>> I looked through your code. Thanks for implementing it. I am not sure
>> wheter readObject() is the right place to do the (re)injection.
>> According
>> to the servlet-spec in SVR 7.7.2 readObject() is not guaranteed to be
>> called on session-attributes. (Instead session attributes which
>> implement
>> HttpSessionActiviationListeners are informed on deserialization). Even
>> if
>> readObject is called I am not sure wheter there is an
ApplicationContext
>> to get to the BeanContext.
>>
>> I don't know wheter wicket has a mean to propogate these
>> HttpSessionEvents
>> on deserialization or a similar callback? If so I guess you could do
the
>> (re)injection there.
>>
>> Christian
>>
>> On Mon, 7 Nov 2005 01:13:31 -0800, Igor Vaynberg
>> <[EMAIL PROTECTED]>
>> wrote:
>>
>> > here is something i threw together that solves the deserialization
and
>> > ability to use the new operator to create pages. atleast i think it
>> > does....its really late here and all i really know so far is that it
>> > compiles :)
>> >
>> > the idea is pretty simple, do the injection in the default
>> constructor,
>> > and
>> > then do it anytime the object is deserialized. you use a @SpringBean >> > annotation to denote the dependency. it can either be used on a field
>> or
>> > on
>> > a setter. If you specify the bean name it will be used to find the
>> bean,
>> > if
>> > you dont then the field's type or the setters argument type will be
>> used
>> > for
>> > the lookup.
>> >
>> > -Igor
>> >
>> >
>> > On 11/7/05, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
>> >>
>> >> and you have to have the pages defined as beans in the application
>> >> context? with their properties specified?
>> >>
>> >> -Igor
>> >>
>> >>
>> >> On 11/7/05, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
>> >> >
>> >> > but how does the above handle deserealization of pages? there is
>> >> nothing
>> >> > to reinject the dependencies.
>> >> >
>> >> > -Igor
>> >> >
>> >> >
>> >> > On 11/7/05, [EMAIL PROTECTED] < [EMAIL PROTECTED]> wrote:
>> >> > >
>> >> > > IMHO pages are standing on the borderline between a stateful GUI
>> and
>> >> > > the rest of the application in form of stateless services.
>> >> > > DI should be done by the IoC container, creating the pages can
>> >> better
>> >> > > be done the standard Wicket way (e.g. with PageParameters).
>> >> > >
>> >> > > As described before I'm using a custom page factory that
>> cooperates
>> >> > > with a wrapped page factory and the containing bean factory:
>> >> > >
>> >> > > public class SpringInjectingPageFactory implements IPageFactory,
>> >> > > BeanFactoryAware {
>> >> > >
>> >> > > private AutowireCapableBeanFactory beanFactory;
>> >> > > private IPageFactory pageFactory;
>> >> > >
>> >> > > public void setPageFactory(IPageFactory pageFactory) {
>> >> > > this.pageFactory = pageFactory;
>> >> > > }
>> >> > >
>> >> > > public void setBeanFactory(BeanFactory beanFactory) throws
>> >> > > BeansException {
>> >> > > this.beanFactory = (AutowireCapableBeanFactory)beanFactory;
>> >> > > }
>> >> > >
>> >> > > public Page newPage(Class pageClass) {
>> >> > > Page page = this.pageFactory.newPage(pageClass);
>> >> > >
>> >> > > injectDependencies(page, pageClass.getName ());
>> >> > >
>> >> > > return page;
>> >> > > }
>> >> > >
>> >> > > public Page newPage(Class pageClass, PageParameters parameters)
{
>> >> > > Page page = this.pageFactory.newPage(pageClass, parameters);
>> >> > >
>> >> > > injectDependencies(page, pageClass.getName ());
>> >> > >
>> >> > > return page;
>> >> > > }
>> >> > >
>> >> > > private void injectDependencies(Page page, String beanName) {
>> >> > > if (this.beanFactory.containsBean(beanName)) {
>> >> > > this.beanFactory.applyBeanPropertyValues(page, beanName);
>> >> > > }
>> >> > > }
>> >> > > }
>> >> > >
>> >> > > Note that if you don't specify a name or id attribute for beans,
>> >> they
>> >> > > will be registered under their classname in Spring.
>> >> > > And NO, I don't use autowiring: applyBeanPropertyValues() does
>> not
>> >> > > autowire although it is located in AutowireCapableBeanFactory.
>> >> > >
>> >> > > Sven
>> >> > >
>> >> > > >you are right, this is not ioc. but are pages/components
managed
>> by
>> >> > > an ioc
>> >> > > >container?
>> >> > > >-Igor
>> >> > > >
>> >> > > >
>> >> > > >On 11/6/05, Alexandru Popescu <
>> >> [EMAIL PROTECTED]>
>> >> > > wrote:
>> >> > > >>
>> >> > > >> #: Igor Vaynberg changed the world a bit at a time by saying
>> on
>> >> > > 11/6/2005
>> >> > > >> 7:06 PM :#
>> >> > > >> > Or how about a simple solution:
>> >> > > >> >
>> >> > > >> > public MyApplication extends WebApplication {
>> >> > > >> > public Object lookup(String name) {
>> >> > > >> > Object=...do a lookup from somewhere like spring context or
>> app
>> >> > > >> object...;
>> >> > > >> > return object;
>> >> > > >> > }
>> >> > > >> > }
>> >> > > >> >
>> >> > > >> > public MyPage extends Page {
>> >> > > >> > public transient SomeService service;
>> >> > > >> >
>> >> > > >> > public SomeService getService() {
>> >> > > >> > if (service==null) {
>> >> > > >> >
>> service=getApplication().lookup(SomeService.class.getName());
>> >> > > >> > }
>> >> > > >> > return service;
>> >> > > >> > }
>> >> > > >> >
>> >> > > >> > I know its not quiete as elegant as ioc but it has none of
>> the
>> >> > > >> performance
>> >> > > >> > hits an automatic injection would cause if it would be done
>> on
>> >> > > >> > deserialization of every component. Also its a lazy lookup
>> so
>> >> you
>> >> > > dont
>> >> > > >> do it
>> >> > > >> > until its needed, and its only done once per page (until it
>> >> gets
>> >> > > >> > deserialized).
>> >> > > >> >
>> >> > > >> > -Igor
>> >> > > >> >
>> >> > > >>
>> >> > > >> But this was exactly what I was suggesting to avoid ;-).
>> Lookups
>> >> > > and
>> >> > > >> factories are not ioc/di.
>> >> > > >>
>> >> > > >> ./alex
>> >> > > >> --
>> >> > > >> .w( the_mindstorm )p.
>> >> > > >>
>> >> > > >>
>> >> > > >>
>> >> > > >> -------------------------------------------------------
>> >> > > >> SF.Net email is sponsored by:
>> >> > > >> Tame your development challenges with Apache's Geronimo App
>> >> Server.
>> >> > > >> Download
>> >> > > >> it for free - -and be entered to win a 42" plasma tv or your
>> very
>> >> > > own
>> >> > > >> Sony(tm)PSP. Click here to play:
>> >> > > http://sourceforge.net/geronimo.php
>> >> > > >> _______________________________________________
>> >> > > >> Wicket-user mailing list
>> >> > > >> Wicket-user@lists.sourceforge.net
>> >> > > >> https://lists.sourceforge.net/lists/listinfo/wicket-user
>> >> > > >>
>> >> > >
>> >> > >
>> >> > > -------------------------------------------------------
>> >> > > SF.Net email is sponsored by:
>> >> > > Tame your development challenges with Apache's Geronimo App
>> Server.
>> >> > > Download
>> >> > > it for free - -and be entered to win a 42" plasma tv or your
very
>> >> own
>> >> > > Sony(tm)PSP. Click here to play:
>> http://sourceforge.net/geronimo.php
>> >> > > _______________________________________________
>> >> > > Wicket-user mailing list
>> >> > > Wicket-user@lists.sourceforge.net
>> >> > > https://lists.sourceforge.net/lists/listinfo/wicket-user
>> >> > >
>> >> >
>> >> >
>> >>
>>
>>
>>
>> --
>> Christian Essl
>>
>>
>>
>>
>>
>> ___________________________________________________________
>> Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier
>> anmelden: http://mail.yahoo.de
>>
>>
>>
>> -------------------------------------------------------
>> SF.Net email is sponsored by:
>> Tame your development challenges with Apache's Geronimo App Server.
>> Download
>> it for free - -and be entered to win a 42" plasma tv or your very own
>> Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
>> _______________________________________________
>> Wicket-user mailing list
>> Wicket-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/wicket-user
>>



--
Christian Essl





___________________________________________________________
Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier
anmelden: http://mail.yahoo.de



-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server.
Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user




--
Christian Essl
        

        
                
___________________________________________________________ Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier anmelden: http://mail.yahoo.de



-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to