You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Andriy Redko <dr...@gmail.com> on 2018/05/09 01:22:53 UTC
Re: A few 'Feature' questions
My apologies for delaying the response, Mark. So I have been looking for options here,
and I believe we could have it solved. The suggestion would be to provide the JAX-RS
feature (f.e. org.apache.cxf.ext.logging.jaxrs.LoggingFeature), which would internally
be implemented using the interceptors logic (so 99% of the implementation would be shared
between both features). Mark, Christian, would it make sense guys?
Best Regards,
Andriy Redko
Monday, April 30, 2018, 4:56:48 AM, you wrote:
MS> Well, we tried that via the @Feature annotation but then it was enabled for very endpoint.
MS> And the config switch to disable logging didn't work somehow.
MS> The solution with the Bus works great in my setup. But I'd love to find a more portable solution.
MS> LieGrue,
MS> strub
>> Am 29.04.2018 um 14:27 schrieb Christian Schneider <ch...@die-schneider.net>:
>> It does not work automagically. You still have to add the logging feature
>> to your service.
>> Christan
>> 2018-04-28 21:39 GMT+02:00 Mark Struberg <st...@yahoo.de.invalid>:
>>> Hi Christian!
>>>> ( I hope you are talking about the new logging feature described here:
>>>> http://cxf.apache.org/docs/message-logging.html).
>>> Yes. I actually tried that but failed. Probably I missed something.
>>> Should this work like a plugin? Means, should it simply work out of the
>>> box if I just drop it into the classpath?
>>> Because I tried that and it didn't work...
>>> Note that I'm using CXF as part of Apache Meecrowave. So not with Spring
>>> but with Apache OpenWebBeans as CDI container.
>>> txs and LieGrue,
>>> strub
>>>> Am 27.04.2018 um 09:10 schrieb Christian Schneider <
>>> chris@die-schneider.net>:
>>>> I think your case is valid in general.
>>>> What I do not understand is why you do not install the logging feature in
>>>> production
>>>> ( I hope you are talking about the new logging feature described here:
>>>> http://cxf.apache.org/docs/message-logging.html).
>>>> The feature is designed to be added to all services and then be enabled /
>>>> disabled via the logging configuration. So it should have almost no
>>>> performance impact
>>>> when switched off). I think it is very important to be able to enable
>>>> logging while in production if it is needed and you typically do not know
>>>> if it is needed at build time.
>>>> Christian
>>>> 2018-04-27 8:36 GMT+02:00 Mark Struberg <st...@yahoo.de.invalid>:
>>>>> Sure, here is my use case:
>>>>> We want to make use of the LoggingFeature, but would love to completely
>>>>> disable it in production. So we don't even want to enable the Feature
>>>>> depending on a configuration setting.
>>>>> That means we also cannot use the @Feature annotation but need to apply
>>> it
>>>>> programmatically.
>>>>> I know that I can enable a Feature programmatically via the Bus. But
>>>>> setFeatures() has to be done at exactly the right point in time. This
>>> is a
>>>>> bit tricky as it depends on the integration scenario.
>>>>> In my case (Apache Meecrowave) I went the way of doing this in my
>>>>> Application.
>>>>>> @ApplicationScoped
>>>>>> @ApplicationPath("/api")
>>>>>> public class MyApp extends Application {
>>>>>> // configuration is done via Apache DeltaSpike
>>>>>> private static ConfigResolver.TypedResolver<Boolean> logEnabled
>>>>>> = ConfigResolver.resolve("myapp.cxf.logging.enabled")
>>>>>> .as(Boolean.class)
>>>>>> .evaluateVariables(true)
>>>>>> .withDefault(Boolean.FALSE)
>>>>>> .cacheFor(TimeUnit.MINUTES, 30);
>>>>>> private @Inject Bus bus;
>>>>>> @PostConstruct
>>>>>> public void initKonnektorApp() {
>>>>>> if (Boolean.TRUE == logEnabled.getValue()) {
>>>>>> log.info("CXF LogInterceptors enabled");
>>>>>> Collection<Feature> features = new ArrayList<>();
>>>>>> features.add(new LoggingFeature());
>>>>>> bus.setFeatures(features);
>>>>>> }
>>>>>> }
>>>>>> }
>>>>> This works great in Meecrowave since the Application is picked up as CDI
>>>>> bean and the Bus is also available via CDI.
>>>>> But this is actually not guaranteed, so it's not really portable. It
>>> isn't
>>>>> guaranteed to work that way in say IBM Liberty or Apache TomEE.
>>>>> That's the reason why I'd love to see a more portable version.
>>>>> Which brought me to using @DynamicFeature to register that Feature.
>>>>> But as already noted: cxf.Feature != javax rs.Feature
>>>>> Makes sense?
>>>>> Is there another way to enable that feature in a programmatic way which
>>>>> I've simply missed?
>>>>> txs and LieGrue,
>>>>> strub
>>>>>> Am 26.04.2018 um 22:22 schrieb Andrey Redko <dr...@gmail.com>:
>>>>>> Yeah, certainly, would be good to get a bit more details or small code
>>>>>> snippets to understand the problem. Mark, is it possible? Thanks.
>>>>>> Best Regards,
>>>>>> Andriy Redko
>>>>>> On Thu, Apr 26, 2018, 12:40 AM Romain Manni-Bucau <
>>> rmannibucau@gmail.com
>>>>>> wrote:
>>>>>>> Hi guys
>>>>>>> Think CXF should support that case or support its own features (for
>>> cdi
>>>>>>> integ it is easy since we have the bus ;)). Otherwise as a user you
>>> are
>>>>> in
>>>>>>> a half baked position and the featureful part of cxf is kind of faked.
>>>>>>> Is the work that hard? Sime interceptors already play with the chain
>>> so
>>>>>>> should be really doable and it matches the way register was designed
>>>>> too.
>>>>>>> Le 26 avr. 2018 00:52, "Andriy Redko" <dr...@gmail.com> a écrit :
>>>>>>>> Hi Mark,
>>>>>>>> I would agree with Andy here, the CXF interceptors / features have
>>>>> existed
>>>>>>>> way before the JAX-RS spec. Alhough it is possible to support
>>>>> additional
>>>>>>>> provider contracts in DynamicFeature, it is difficult to match it
>>>>> exactly
>>>>>>>> to the JAX-RS lifecycle. As an option, you may consider converting
>>> the
>>>>>>>> LoggingInterceptor into full-feldged JAX-RS provider (if it makes
>>> sense
>>>>>>>> for sure).
>>>>>>>> Best Regards,
>>>>>>>> Andriy Redko
>>>>>>>> AM> Hi Mark,
>>>>>>>> AM> For #1 - I'll take a look - I've been meaning to ever since I saw
>>>>> the
>>>>>>>> JIRA,
>>>>>>>> AM> but I've been swamped lately. My bad.
>>>>>>>> AM> For #2 - I'd like others to weigh in, but I do think that this is
>>>>> the
>>>>>>>> AM> intended behavior. IIUC, org.apache.cxf.feature.Feature existed
>>>>>>>> before the
>>>>>>>> AM> JAX-RS spec and is used in a variety of non-JAX-RS scenarios
>>>>> (JAX-WS,
>>>>>>>> AM> etc.). The LoggingInterceptor is not actually a JAX-RS provider
>>> -
>>>>>>>> rather
>>>>>>>> AM> it is an interceptor used on the CXF chain. JAX-RS Providers are
>>>>>>>> typically
>>>>>>>> AM> invoked from the JAXRSInInterceptor and JAXRSOutInterceptor on
>>> the
>>>>>>>> chain.
>>>>>>>> AM> It may be possible to add a LoggingInterceptor to the chain at
>>> that
>>>>>>>> point,
>>>>>>>> AM> but it doesn't seem advisable - I haven't done much with chain
>>>>>>>> AM> manipulation, so would definitely recommend a second opinion
>>> here.
>>>>>>>> AM> Thanks for the patch,
>>>>>>>> AM> Andy
>>>>>>>> AM> On Wed, Apr 25, 2018 at 3:26 PM, Mark Struberg
>>>>>>>> <st...@yahoo.de.invalid>
>>>>>>>> AM> wrote:
>>>>>>>>>> hi folks!
>>>>>>>>>> I have two questions:
>>>>>>>>>> 1.) Could anybody plz take a quick look at CXF-7713 and review the
>>>>>>>> patch?
>>>>>>>>>> 2.) I've created a DynamicFeature @Provider and tried to register a
>>>>> CXF
>>>>>>>>>> LoggingInterceptor.
>>>>>>>>>> And this doesn't work since it seems to only pick up
>>>>>>>>>> javax.ws.rs.core.Feature instances, but not
>>>>>>>>>> org.apache.cxf.feature.Feature
>>>>>>>>>> Is this observation correct?
>>>>>>>>>> Is this behaviour intended?
>>>>>>>>>> I know I can register it via Bus#setFeatures, but that is not as
>>>>>>>> modular
>>>>>>>>>> in comparison to the @Provider.
>>>>>>>>>> txs and LieGrue,
>>>>>>>>>> strub
>>>> --
>>>> --
>>>> Christian Schneider
>>>> http://www.liquid-reality.de
>>>> Computer Scientist
>>>> http://www.adobe.com
>> --
>> --
>> Christian Schneider
>> http://www.liquid-reality.de
>> Computer Scientist
>> http://www.adobe.com