wicket-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tomasz Dziurko <tdziu...@gmail.com>
Subject Re: Bean not properly injected into another bean when using Wicket stateless page
Date Wed, 05 Apr 2017 12:40:29 GMT
Ok, thank you Martin for detailed explanation. I understand your rationale,
to avoid future problems I have added check to our tests that makes sure
that all classes annotated with @SpringBean must have no-args constructor :)

On 5 April 2017 at 09:52, Martin Grigorov <mgrigorov@apache.org> wrote:

> On Tue, Apr 4, 2017 at 9:40 PM, Tomasz Dziurko <tdziurko@gmail.com> wrote:
>
> > Hi Martin
> >
> > Two questions:
> > 1. Which class? HomePageHandler ?
> >
>
> Yes, HomePageHandler.
> The problem is the following:
>  @SpringBean tell Wicket to inject a proxy in the Wicket components.
> If the class is an interface then Wicket uses java.lang.reflect.Proxy and
> all is fine.
> If it is a proper class then Wicket uses CGLIB to create the proxy. CGLIB
> requires a default constructor to be able to create the specialization
> class.
>
>
> > 2. I have digged deeper and in fact there is a check whether to use CGLib
> > or Objenesis (if there is no-args constructor Objenesis is chosen) but is
> >
>
> Objenesis is a bit smarter than CGLIB. It looks for the available
> constructors and creates proxies for the parameters to be able to
> instantiate the class (HomePageHandler).
>
> Wicket uses CGLIB since day 1 of wicket-inject module.
> Objenesis fallback has been added recently (1-2 years ago) so that people
> can "migrate" from CGLIB to the more powerful Objenesis if they want by
> excluding CGLIB from the classpath and adding Objenesis.
> Few months ago there was a discussion at dev@ to replace CGLIB with
> ByteBuddy (the most powerful and maintained proxy creation library at the
> moment) but we decided that it is not worth the troubles yet.
>
>
> > it an expected behaviour? Or maybe this case could be a trigger to
> discuss
> > proper way to deal with such cases?
> >
> > On 4 April 2017 at 21:26, Martin Grigorov <martin.grigorov@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > > On Apr 4, 2017 7:38 PM, "Tomasz Dziurko" <tdziurko@gmail.com> wrote:
> > >
> > > Hello
> > >
> > > I have a problem with wicket-spring-boot <-> wicket integration. Bean
> > > annotated with @Serviceis not properly injected into a backing bean
> that
> > is
> > > injected into a stateless Page using @SpringBean annotation.
> > >
> > > Generally:
> > >
> > > @StatelessComponent
> > > @MountPath("home-page")
> > > public class HomePage extends WebPage {
> > >
> > >     @SpringBean
> > >     private HomePageHandler handler;
> > > }
> > >
> > > and
> > >
> > > @Service
> > > public class HomePageHandler {
> > >
> > >     private final CommandPublisher commandPublisher;
> > >
> > >     @Autowired
> > >     public HomePageHandler(
> > >
> > >
> > > I think you will need an additional default constructor for this class.
> > > CGLIB needs it.
> > > It might have lesser visibility than public too.
> > >
> > > CommandPublisher commandPublisher) {
> > >         this.commandPublisher = commandPublisher;
> > >     }
> > >
> > >     public void executeAction(String name) {
> > >         commandPublisher.publish(name); /// <----------- NPE
> > > (commandPublisher is null)
> > >     }
> > > }
> > >
> > > and:
> > >
> > > @Service
> > > public class CommandPublisher {
> > >
> > >     public void publish(String text) {
> > >         eventPublisher.publishEvent(text);
> > >     }
> > >
> > > }
> > >
> > > Wicket 7.6.0, wicket-spring-boot 1.0.6.
> > >
> > > I have created a simple starter (
> > > https://github.com/tdziurko/wicket-spring-bean-issue) to reproduce the
> > > problem. Problem disappears when page is not stateless (more info in
> > readme
> > > in the starter).
> > >
> > >
> > > Thank you in advance for help.
> > >
> > > --
> > > Regards / Pozdrawiam,
> > > Tomek Dziurko
> > > http://tomaszdziurko.com/
> > >
> >
> >
> >
> > --
> > Regards / Pozdrawiam,
> > Tomek Dziurko
> > http://tomaszdziurko.com/
> >
>



-- 
Regards / Pozdrawiam,
Tomek Dziurko
http://tomaszdziurko.com/

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message