Basically, yes.

So here's what I'm thinking.

- Determine that transportId is null
- ask for the registered HTTP one ending with /configuration
- If that's null, loop through all registered and return the first one
ending with /configuration

Thoughts?

On Sun, Feb 25, 2018 at 10:44 AM Andriy Redko <[email protected]> wrote:

> Hey John,
>
> You mean add the capability to DestinationFactoryManager to list all
> registered
> destination factories and in case transport id is not set, just pick the
> first
> one? We could try it out, may be we could also give a preference to HTTP
> transport
> in case more than one is available (at least to minimize the effect of the
> change).
>
> Also, the documentation should be updated to reflect the SSE transport
> presence, I
> will do that shortly. Thanks for spotting it.
>
> Makes sense?
>
> Best Regards,
>    Andriy Redko
>
> JDA> Andriy,
>
> JDA> Sadly no.  Honestly, this leads to broken apps.  Just to clarify my
> setup:
>
> JDA> - WAR File deployed to Tomcat
> JDA> - Has Weld Servlet + CXF CDI + CXF SSE modules deployed
> JDA> - Has no SSE server side components
>
> JDA> At this point, I may use the client to talk to a remote server (for
> JDA> inter-node communication) but don't rely on it long term.  I have no
> server
> JDA> side components.  But you're saying I must set the transportId to SSE.
>
> JDA> The SSE transportId requirement is not documented anywhere as best as
> I can
> JDA> tell.  SSE isn't listed at http://cxf.apache.org/docs/transports.html
> for
> JDA> Atmosphere.
>
> JDA> I think a better approach would be to modify
> JDA> CXFNonSpringServlet.getDestinationRegistryFromBusOrDefault (
> JDA>
> https://github.com/apache/cxf/blob/master/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFNonSpringServlet.java#L119
> JDA> )
> JDA> so that instead of hard coding the HTTP transport as the default, we
> ask
> JDA> for the first destination factory it finds registered (if one is).
>
> JDA> Thoughts?
>
> JDA> John
>
> JDA> On Sun, Feb 25, 2018 at 9:25 AM Andriy Redko <[email protected]>
> wrote:
>
> >> I wish it could be as easy as that :) Hope my previous messages give
> some
> >> context and explanations why we have dedicated transport and why we need
> >> to set Transport Id in a few places, not just one. It would be ideal to
> >> enrich HTTP transport with SSE support but it will take some time, not
> >> an easy one (certainly doable).
>
> >> Best Regards,
> >>     Andriy Redko
>
> >> JDA> I see a bit more when this is failing.
>
> >> JDA> When the JAXRS bean has the transport ID set, In
> >> DestinationFactoryManager
> >> JDA> you have two factories created, both for SSE (regular & config
> >> JDA> namespaces).  However, since on the servlet the transportId is null
> >> when it
> >> JDA> tries to look up the namespace it defaults to the HTTP transport.
> >> This
> >> JDA> causes it to create a new destination factory where nothing has
> been
> >> found.
>
> >> JDA> So I think what I would recommend is coming up with a way for CXF
> to
> >> figure
> >> JDA> out a better default, instead of the using the default transportId.
>
> >> JDA> Or do as Romain says and make it so that SSE works on the normal
> >> JDA> transportId.
>
> >> JDA> John
>
> >> JDA> On Sun, Feb 25, 2018 at 3:05 AM Romain Manni-Bucau <
> >> [email protected]>
> >> JDA> wrote:
>
> >> >> +1 wondered the same and technically sse can just be activated for
> http
> >> >> transport IMHO
>
> >> >> Le 25 févr. 2018 05:10, "John D. Ament" <[email protected]> a
> >> écrit :
>
> >> >> > Here's a reproducer app, if anyone else is curious.
> >> >> > https://github.com/johnament/cxf-demo-reactive-cdi
> >> >> >
> >> >> > If you comment out
> >> >> > https://github.com/johnament/cxf-demo-reactive-cdi/blob/
> >> >> > master/src/main/webapp/WEB-INF/web.xml#L10-L13
> >> >> > then
> >> >> > you'll see the issue, but deploying this as is to tomcat will work
> >> just
> >> >> > fine.
> >> >> >
> >> >> > On Sat, Feb 24, 2018 at 10:59 PM John D. Ament <
> [email protected]
> >> >
> >> >> > wrote:
> >> >> >
> >> >> > > Hi,
> >> >> > >
> >> >> > > So I've finally been able to confirm an issue.
> >> >> > >
> >> >> > > When CXF's SSE libraries are on the classpath, if the
> transportId of
> >> >> the
> >> >> > > servlet does not match the transport ID set with the SSE
> component,
> >> >> then
> >> >> > no
> >> >> > > services are discovered.
> >> >> > >
> >> >> > > IMHO, there may be cases where the SSE libraries are present
> (client
> >> >> > only)
> >> >> > > and no server runtimes are there.  In this case, the transport ID
> >> will
> >> >> > not
> >> >> > > match.
> >> >> > >
> >> >> > > I'm curious, do both need to be set?  What is the benefit/need on
> >> the
> >> >> > > servlet layer needing the transport ID set when the underlying
> >> feature
> >> >> > also
> >> >> > > does it?
> >> >> > >
> >> >> > > John
> >> >> > >
> >> >> >
>
>
>
>

Reply via email to