Le 24 déc. 2017 21:40, "Andriy Redko" <drr...@gmail.com> a écrit :
No API sounds good. Just to clarify the second part. "By reflection" you mean just go with classpath scan? No, CXF must never scan anything, it is already done and would defeat any integration and user experience to redo it. Just meant test deltaspike, if no value test microprofile, if no value cxf properties and last system properties. The first two needs to be done by reflection to avoid to enforce them as dependency. A spi can be tested as well first but not having to impl it would be a big plus and is easy technically, no? RMB> No hard dep on any api would be nice but a chain can work even if by reflection no? Kind of test them all. Then RMB> put the active ones in the server map to be able to reuse it later no? RMB> Le 24 déc. 2017 19:07, "Andriy Redko" <drr...@gmail.com> a écrit : RMB> Hey guys, RMB> So I have been looking around to understand how the activation around CDI is worked out by others, RMB> including ConfigResolver and Jersey. Here is what I have discovered so far. RMB> #1. Deltaspike. Uses own ConfigResolver approach: among other things, allows to deactivate beans / extensions RMB> using a list of config sources. Because Deltaspike is pure CDI, all extensions are automatically discovered but RMB> could be deactivated by means of ConfigResolver. In case of CXF, we could take a similar approach by activating RMB> the necessary beans (as most of our components are non-beans archives and as such, won't be discovered by CDI), RMB> f.e.: RMB> <full.class.name>.active = true RMB> <full.class.name>.active = true RMB> <full.class.name>.active = true RMB> Once the JAXRS extension is picked up by CDI runtime, it would add annotated types during the discovery phase for RMB> activated providers / features. In the future, this could be done using beans.xml (https://issues.jboss.org/browse/CDI-526), RMB> hopefully, but as Romain pointed out, it is problematic at the moment. RMB> We could make it per-module (so each component would provide such configuration) or bundle as a single module RMB> (f.e. cxf-cdi-discovery, or cxf-cdi-beans, ...). Surely, each application would be able to override any of the RMB> activations and/or provide its own if necessary. RMB> #2. Jersey. Uses own mechanism to autodiscover and register features and providers. Essentially, in a simplified form, it could RMB> be summarized like this. Each module (component) provides binding (in a form contract -> class -> scope) which it thinks should be RMB> autodiscovered by the runtime (in this case, CDI). The bindings are brought into context using service loader. In this case, every RMB> component has a compile-time dependency on CDI API. RMB> No doubts, there are more options available. Picking between the ones above, could/should we implement #1? If yes, should we build it RMB> on top of Microprofile Config API (https://github.com/eclipse/ microprofile-config)? Or just keep it as simple as RMB> possible (around new/use existing property file)? What do you think guys? RMB> Thanks. RMB> Best Regards, RMB> Andriy Redko RMB>> Something like deltaspike where it is on by default and deactivable by config is not bad for such modules. Issue RMB>> is: what is config? For spring it is obvious but for cdi it must be the 2 mentionned solution and maybe a 3rd fallback with a cxf specific solution - or system props. RMB>> An alternate more advanced option can be a cxf-autoload module which would read some classpath file like a spi RMB>> where cxf modules could register such feature but would be on only when this module is in the cp. Maybe something RMB>> to study but to be honest i believe more in the previous integrations (as a user). RMB>> Le 23 déc. 2017 20:29, "Sergey Beryozkin" <sberyoz...@gmail.com> a écrit : RMB>> Well, was not clear what you meant, the whole conversation was about optionally choosing whether to auto-load a RMB>> given provider or not with CDI and you referred to SpringBoot which could do some magic and CXF having the related RMB>> module and possibly getting some ideas from there and I thought I'd clarify that there was no magic there in the RMB>> Spring-Boot starters/auto-configuration, nothing SpringBoot or Spring specific (well we do refer to Spring to scan RMB>> but CDI can scan too) about optionally loading specific providers from the specific packages. RMB>> CXF itself ships many providers in different modules and packages and it is hard to see how one can let users RMB>> control auto-loading them (which is) without letting users choose at the config time... RMB>> Cheers, Sergey RMB>> On 22/12/17 23:15, Andriy Redko wrote: RMB>> That is right, I was not refering to autodiscovery but Spring Boot module we RMB>> have. As per my understading, CDI has different means for achieving the desired RMB>> outcomes but Spring is more flexible in this regard. SB>>> CXF SpringBoot module does not do any auto-discovery. The code is in the SB>>> rt/frontend/jaxrs/.../spring which can be loaded by the spring boot SB>>> module, and it does what I said in the prev email, scans for the classes SB>>> annotated as providers in the user-requested packages... SB>>> Cheers, Sergey SB>>> On 22/12/17 22:40, Andriy Redko wrote: RMB>> Documenting make sense. To project it to Spring-based runtime, fe, without RMB>> Spring-specific annotations + configuration the discovery won't happen ... RMB>> But there is Spring Boot which could do magic here, and CXF does have a RMB>> module for it. Same, in theory, could be possible with CXF+CDI (let say by RMB>> adding `cxf-cdi` module where we could supply the limited, handcrafted RMB>> set of CDI beans available for discovery in the beans.xml). Do you think it RMB>> is worth exploring the idea? RMB>> Best Regards, RMB>> Andriy Redko JDA>>> I would do nothing but document a strategy that users can implement. The JDA>>> biggest question I have is whether a provider like this should be JDA>>> registered automatically? Does that happen with spring based runtimes? JDA>>> What about when there is no DI framework present? Is it clear enough that JDA>>> user would need to list it in their Application class as a singleton/class? JDA>>> John JDA>>> On Fri, Dec 22, 2017 at 5:08 PM Andriy Redko <drr...@gmail.com> wrote: RMB>> Sure, removed/reverted. So here are the general thoughts. Yes, most (if RMB>> not all) of the providers/features/... are not CDI RMB>> specific and as such, they are not bean archives (and it make sense). Now, RMB>> how could we make the CXF more CDIish? There RMB>> are a couple of option we could explore, but what would be the idiomatic RMB>> CDI way? RMB>> Best Regards, RMB>> Andriy Redko JDA>>> Personally, I would actually recommend removing the beans.xml from RMB>> open tracing (and really any module that isn't JDA>>> a cdi specific module). While it does allow for a bit more automatic RMB>> binding, my question was more around what is JDA>>> missing. I missed the fact that there is no build in automatic RMB>> discovery of providers in CDI if they're not CDI JDA>>> managed - which is OK and the answer I was working through. JDA>>> And realistically, this issue is not specific to the open tracing RMB>> integration, I can replicate it with other JDA>>> providers. Its just a matter of documenting and knowing what to RMB>> setup. JDA>>> So if you don't mind, I'd like to revert that commit; and add some RMB>> docs around how to create an automatically registered provider. JDA>>> John JDA>>> On 2017-12-22 15:24, Romain Manni-Bucau <rmannibu...@gmail.com> RMB>> wrote: RMB>> How can i disable it now? Tink that cxf feature - even if in separate RMB>> modules - shouldnt be auto registered until it has a deactivable flag - RMB>> classpath properties + overridable through system prop. RMB>> Wdyt? RMB>> Le 22 déc. 2017 18:38, "Andriy Redko" <drr...@gmail.com> a écrit : RMB>> Hi Sergey, RMB>> It wasn't (for CDI only), but it could have been always included RMB>> manually. RMB>> Thanks. RMB>> Best Regards, RMB>> Andriy Redko SB>>> Hi Andriy SB>>> So how was a JAX-RS (OpenTracing) Feature discovered without RMB>> beans.xml RMB>> ? SB>>> Cheers, Sergey SB>>> On 22/12/17 17:24, Andriy Redko wrote: RMB>> The beans.xml was missed indeed, I added it and OpenTracingFeature RMB>> has RMB>> been discovered right away. RMB>> The commit is on its way. Thanks! RMB>> Best Regards, RMB>> Andriy Redko JDA>>> I'm holding off on doing anything to fix it. For one, a user RMB>> may RMB>> not want to use the global tracer so making it JDA>>> so that they register it makes more sense. Ultimately to RMB>> solve RMB>> it, I think we should be moving server JDA>>> customizations outside of CDI to ensure that it can be auto RMB>> registered. JDA>>> John JDA>>> On Fri, Dec 22, 2017 at 11:12 AM Andriy Redko < RMB>> wrote: JDA>>> Hey John, JDA>>> The OpenTracingFeature RMB>> (org.apache.cxf.tracing.opentracing.jaxrs RMB>> package) is JAX-RS feature, JDA>>> which JAXRS CDI extension should recognize out of the box. RMB>> There RMB>> is also CXF feature ( JDA>>> in org.apache.cxf.tracing.opentracing package) to be used for RMB>> JAX-WS services. The only explanation JDA>>> I have why it is not being picked up it the absense of RMB>> bean.xml RMB>> so we could fix that. I will JDA>>> take a look shorly (if you haven't figured this one out RMB>> already). RMB>> Thanks. JDA>>> Best Regards, JDA>>> Andriy Redko RMB>> JDA>> I'm not sure either, this is the behavior I see in the RMB>> code: RMB>> JDA>> - Register JAX-RS resources (with @ApplicationPath) RMB>> JDA>> - Register JAX-RS resources (with @Path) RMB>> JDA>> - Register JAX-RS providers (with JAX-RS @Provider) RMB>> JDA>> - Register JAX-RS features (with JAX-RS @Feature) RMB>> JDA>> - Register CXF features (doesn't care if it has a CXF RMB>> @Provider RMB>> annotation but I see the OpenTracing one does have it) RMB>> JDA>> - Otherwise we assume its the CXF Bus object RMB>> JDA>> There's not much happening with a CXF @Provider RMB>> declaration in RMB>> the extension. But at the end of the day, I'm only RMB>> JDA>> dealing with a JAX-RS @Provider and that doesn't get RMB>> registered RMB>> since it's not a CDI bean. I don't see any issue RMB>> JDA>> registering CXF @Provider this way as well, but its RMB>> possible RMB>> it's not a CDI bean still, but that's ultimately what the customizer RMB>> was RMB>> put in for. RMB>> JDA>> John RMB>> JDA>> On 2017-12-22 09:56, Sergey Beryozkin < RMB>> sberyoz...@gmail.com> RMB>> wrote: RMB>> >>> Sure, I just don't understand what is the difference between RMB>> a RMB>> JAX-RS RMB>> >>> feature and CXF feature, as far as the CXF CDI code is RMB>> concerned. RMB>> If it RMB>> >>> can load the JAX-RS features which have not been written RMB>> with CDI RMB>> in RMB>> >>> mind, why can't it load CXF features without some extra work RMB>> going into RMB>> >>> these features... RMB>> >>> Thanks, Sergey RMB>> >>> On 22/12/17 14:50, John D. Ament wrote: RMB>> >>> > That's not really the issue though. The extension will RMB>> only RMB>> receive CDI managed beans. Take a look at my pull to see what I had RMB>> to do RMB>> to get it to register automatically. If nothing else, this is an RMB>> argument RMB>> for moving JAXRSServer Customization into core and using service RMB>> loader RMB>> :-) Perhaps after the new year. RMB>> >>> > RMB>> >>> > On 2017-12-22 09:23, Sergey Beryozkin < RMB>> sberyoz...@gmail.com> RMB>> wrote: RMB>> >>> >> I was not referring the OpenTracing module offering a CDI RMB>> extension, but RMB>> >>> >> to the work Andriy did in the CXF CDI integration where RMB>> the RMB>> providers RMB>> >>> >> and feature are picked up. Thought, when we were RMB>> discussing RMB>> the SSE RMB>> >>> >> feature I thought Andriy said it was looking at the CXF RMB>> @Provider as RMB>> >>> >> well, may be I misunderstood. RMB>> >>> >> Updating the CDI code to check CXF @Provider, if it is not RMB>> already RMB>> >>> >> checked, makes sense IMHO RMB>> >>> >> RMB>> >>> >> Sergey RMB>> >>> >> On 22/12/17 14:08, John D. Ament wrote: RMB>> >>> >>> Actually one more thing. The CDI extension only looks RMB>> for RMB>> JAX-RS @Provider not CXF @Provider. RMB>> >>> >>> RMB>> >>> >>> On 2017-12-22 09:06, "John D. Ament"< RMB>> johndam...@apache.org> RMB>> wrote: RMB>> >>> >>>> I'm not sure what the CDI extension has to do with RMB>> this. It RMB>> has no bean defining annotations, and there is no beans.xml in the RMB>> JAR that RMB>> it ships with so I'm not sure it would be picked up by the extension. RMB>> >>> >>>> RMB>> >>> >>>> There's nothing special done for TomcatwarTest to make RMB>> more RMB>> JARs available, right? RMB>> >>> >>>> RMB>> >>> >>>> On 2017-12-22 08:15, Sergey Beryozkin < RMB>> sberyoz...@gmail.com> RMB>> wrote: RMB>> >>> >>>>> It is annotated with CXF @Provider annotation - should RMB>> be RMB>> picked up by RMB>> >>> >>>>> the CXF CDI extension RMB>> >>> >>>>> RMB>> >>> >>>>> Sergey RMB>> >>> >>>>> On 22/12/17 13:07, John D. Ament wrote: RMB>> >>> >>>>>> I'm trying to finish up testing CDI injection of RMB>> Context RMB>> objects. The one RMB>> >>> >>>>>> area I'm struggling with is the automatic RMB>> registration of RMB>> this feature. I RMB>> >>> >>>>>> added a dependency on OpenTracing, just to confirm RMB>> that RMB>> injection via CDI RMB>> >>> >>>>>> works (and to be honest, this is one of my use cases, RMB>> working with RMB>> >>> >>>>>> tracing). However, it seems that this feature isn't RMB>> automatically RMB>> >>> >>>>>> registered via CDI. Is there something I have to do RMB>> to RMB>> make it work? RMB>> >>> >>>>>> RMB>> >>> >>>>>> John RMB>> >>> >>>>>> RMB>> >>> >>>>> RMB>> >>> >>>> RMB>> >>> >>