The interface of the setter parameter or of the field type. Of course a
restriction. If you want more you could use cglib (or spring aop). Don't
know.
On Mon, 7 Nov 2005 11:27:28 -0800, Igor Vaynberg
<[EMAIL PROTECTED]>
wrote:
> 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
>>
--
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