what interface would you use for the proxy though?
-Igor


On 11/7/05, Christian Essl <[EMAIL PROTECTED]> wrote:
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