On Wed, 23 Apr 2025 at 23:26, Martin Terra <martin.te...@koodaripalvelut.com>
wrote:

> As long as it doesn't take over Wicket. Roughly it looks like "what do you
> need wicket for if you decided to go heavy on CDI".


The idea is to make such an integration that it would sit along side with
wicket-cdi or such. However if one was to use quarkus and wicket it would
come with some price.

Thinking out loud: can't you just spin a non wicket CDI handler into a
> different servlet and keep it separate from wicket?


I'm not sure how that would help with injection of services in Wicket
components.

>
Martijn

Become a Wicket expert, learn from the best: http://wicketinaction.com





>
> **
> Martin
>
> ke 23.4.2025 klo 22.10 Martijn Dashorst (martijn.dasho...@gmail.com)
> kirjoitti:
>
> > After some soul searching for a while I might have a workable idea for
> > using Quarkus CDI and Wicket, which is probably the biggest hold back for
> > using these technologies together.
> >
> > I've put my thoughts in this JIRA ticket in the last comment:
> >
> >
> https://issues.apache.org/jira/browse/WICKET-6917?focusedCommentId=17946818&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17946818
> >
> > I'll also paste my comment here:
> >
> > The issue is that ARC (the cdi implementation behind quarkus) doesn't
> > support and isn't going to support non-contextual injections as it wants
> to
> > resolve injections at build time rather than deploy- and runtime.
> Wicket's
> > basic premise is that it is a non-managed framework where you are allowed
> > to new your components and behaviors and models at will, which all escape
> > the management of a CDI container.
> >
> > I'm thinking about this a bit for a while, and I figure that it might be
> > possible to provide some form of integration if we limit some constructs
> > that are now available for Wicket developers.
> >
> > First we need to make pages managed, and the restored state of pages
> > managed when they are retrieved from the page store. This is probably
> > fairly easy to build using a `@SessionScoped` CDI producer that retrieves
> > pages either from a factory or from the pagestore if there's state
> > available (i.e. there's a pageid in the request). This also means that
> you
> > are no longer allowed to instantiate pages yourself, but that they must
> > have a default constructor, a pageparameters constructor or a
> > mapper/factory that can instantiate the page based on the provided URL.
> > This allows CDI to perform its injections on the retrieved instance(s).
> I'm
> > sure this would work for instantiating new pages. I'm not so sure about
> > retrieving pages from the page store and getting those managed again
> (about
> > 90% hopeful that it works). This should also work with injected services
> in
> > the page instances, but not general component instances.
> >
> > Next we need a way to make Panels injectable with CDI beans. This is a
> > hairy one. For now the only way I can foresee this working is to have an
> > Instance<MyPanel> field in your page and get an instance from that to add
> > to the page's component hierarchy. I'm open to other suggestions.
> >
> > As for scoping, I'm not 100% sure, but using the @RequestScope for the
> page
> > producers and panel instances might just work. We might need our own
> scope,
> > but I wouldn't know how that differs from the request scope for our
> > purposes.
> > Injection into behaviors and models is something that either needs to go
> > through the Instance<Behavior> / Instance<FooModel> route or using
> producer
> > methods. My guess is that it is probably easier to use constructor
> > parameters and use the page/panel injected beans as parameters to the
> > models/behaviors.
> >
> > This is all without providing any integration libraries such as a "Wicket
> > Arc" that would plug into arc for our purposes. It might be possible to
> do
> > all the above automatically given the right integration, but I'm not an
> arc
> > knower, nor a CDI implementation builder.
> >
> > What do y'all think?
> >
> > Martijn
> >
>

Reply via email to