I agree. This is how the project im working on right now works. We have an iwebapplicationfactory that lets spring create the application object and pulls in all the services in with it. Then a getter in the page looks something like this:

UserService getUserService() { MyApplication.getInstance().getUserService(); }

very clean and simple. Sure the application object now has A LOT of dependencies, but so what?

but people are saying this isnt good enough, they want to declare dependencies on the page level and not the application level. so im just trying to help them find a clean simple solution for that. something that is elegant enough to be maintained as a wicket-stuff project and become  a "standard" way which is what people want.

-Igor


On 11/7/05, Gustavo Hexsel <[EMAIL PROTECTED]> wrote:
  I don't have an answer for the problem, so I'll just give my Free Rant (sorry, can't charge 2 cents for it :)

  One of the reasons why Spring (and IoC in general) is so elegant, is because it usually doesn't add a new dependency to your classes.  Only a couple of root application classes need to know that Spring is there at all.  If for any reason you find out that Spring configuration XML is rotten for projects over 100 configured objects  (i.e. for performance or maintainability), you just pull out the root object and redo the configuration in code or using another library.  Adding a coupling to spring in each class is much less flexible.

  It might sound far-fetched, but I've done exactly that... IoC ruled but the spring configuration xml was a royal pain in the butt as it grew.  IDEA (or any other IDE AFAIK) can't refactor into it, so all changes to object interfaces have to be done by hand.

  []s Gus



---------- InĂ­cio da mensagem original -----------

      De: [EMAIL PROTECTED]
    Para: wicket-user@lists.sourceforge.net
      Cc:
    Data: Mon, 7 Nov 2005 13:56:39 -0200
Assunto: Re: Re: [Wicket-user] My take on Spring integration

> PS.: Someone responded this thread in a way that gmail (only gmail?)
> could not find it associated with previous messages, I hope people
> continue to discuss and keep this, and not open a new thread with (AW:
> Re: Re: My take on Spring integration).
>
> Igor, the class you have implemented is exactly the way I was
> thinking. However Sven pointed out correctly that this is not really
> IoC, since the component itself is looking for its dependencies
> (Alexandru said that even before...).
>
> But even if it is not IoC, I think this is a nice approach. The client
> code it would look exactly like a really IoC implementation (if
> getSpringContext() is implemented in another way). And if I can live
> with the Page constructor automatically attaching itself to the
> Session, I could live with Pages doing serialization as well.
>
> That said, a really IoC approach seems to be achieved either using AOP
> or doing something with onBeginRequest/onBeginResponse, as Sven,
> Juergen and Johan said before.
>
> 2005/11/7, Johan Compagner <[EMAIL PROTECTED] >:
> > And there is also a thing like XML Serialization
> >  Which also doesn't use the java read/write object at all.
> >
> >
> >
> > 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
> > >
> >
> >
>
>
> -------------------------------------------------------
> 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

Reply via email to