Sounds reasonable, would you mind to create a ticket? I could pick it up 
shortly (or if you have time, please go ahead). Thanks.

JDA> Actually here's another way.


JDA> Create a new property on bus for the default transport ID
JDA> Default it to the HTTP one
JDA> in the SSE extension, override it to SSE.


JDA> On Sun, Feb 25, 2018 at 10:47 AM John D. Ament <johndam...@apache.org> 
wrote:

JDA> Basically, yes.


JDA> So here's what I'm thinking.


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


JDA> Thoughts?



JDA> On Sun, Feb 25, 2018 at 10:44 AM Andriy Redko <drr...@gmail.com> wrote:

JDA> Hey John,

JDA>  You mean add the capability to DestinationFactoryManager to list all 
registered
JDA>  destination factories and in case transport id is not set, just pick the 
first
JDA>  one? We could try it out, may be we could also give a preference to HTTP 
transport
JDA>  in case more than one is available (at least to minimize the effect of 
the change).

JDA>  Also, the documentation should be updated to reflect the SSE transport 
presence, I
JDA>  will do that shortly. Thanks for spotting it.

JDA>  Makes sense?

JDA>  Best Regards,
JDA>     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 <drr...@gmail.com> 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 <
 >>> rmannibu...@gmail.com>
 >>> 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" <johndam...@apache.org> 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 <johndam...@apache.org
 >>> >
 >>> >> > 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