On Wed, Jun 2, 2021 at 11:31 AM Sven Meier <s...@meiers.net> wrote:

> Hi,
>
> I wasn't aware that Optional actually isn't serializable:
>

The real problem is that it is `final class`.
Even if it was Serializable we would still wrap it in a proxy that looks up
the real bean on demand / after deserialization.
We could use
https://github.com/nipafx/demo-serialize-optional/blob/master/src/org/codefx/lab/optional/SerializableOptional.java
but it is yet another extra code to maintain.


>
>
> https://stackoverflow.com/questions/24547673/why-java-util-optional-is-not-serializable-how-to-serialize-the-object-with-suc#24564612
>
> "The JSR-335 EG felt fairly strongly that Optional should not be on any
> more than needed to support the optional-return idiom only. (Someone
> suggested maybe even renaming it to OptionalReturn to beat users over
> the head with this design orientation; perhaps we should have taken that
> suggestion.)"
>
> (I wonder whether we follow this usage guideline everywhere.)
>

We don't.
We pass Optional<AjaxRequestTarget> to AjaxFallback**#onClick() methods.
It works fine so far!


>
> So it seems an optional @Inject is not possible with our usecase.
>
> I'm +0 on changing anything here, although @Autowired would be fine too.
>

Yes, I also wonder whether we should do anything here. There are no
problems with SpringBean at the moment.


>
> Regards
> Sven
>
>
> On 02.06.21 10:09, Martin Grigorov wrote:
> > Hi,
> >
> > In my email about ideas what to do for Wicket 10 (
> > https://markmail.org/message/vpptsmt4ysxbktzc) I have suggested to
> > drop @SpringBean and use jakarta.inject.Inject/Named instead.
> > While working on it I've faced one issue - there is no support for
> > non-required bean:
> >
> > @SpringBean(required = false)
> > private SomeBean someBean;
> >
> > If there is no matching bean in the Spring application context then
> nothing
> > will be injected. Without 'required = false' the instantiation of the
> > Component will fail with an Exception.
> >
> > With jakarta.inject APIs there is no way to say that something is
> optional.
> > I've tried by using java.util.Optional:
> >
> > @Inject
> > private Optional<SomeBean> someBean;
> >
> > but the problem here is that j.u.Optional is a final class and cannot be
> > enhanced by CGLib to create a serializable proxy around it.
> >
> > Another option is to create a custom annotation, e.g. @Optional in
> > wicket-ioc.
> >
> > Do you have other ideas ?
> > Or should we stay with @SpringBean or even use Spring's @Autowired ?!
> >
> > Martin
> >
>

Reply via email to