On Tue, Jun 11, 2019 at 9:49 PM Romain Manni-Bucau <rmannibu...@gmail.com>
wrote:

> My 2cts would be that we have the luck to be fully ASF here so each
> project can likely get back its missing piece(s) and we stay overall
> consistent instead of creating yet another fork in our beloved foundation
> (we already have some concurrent servers or even jdbc pools which does not
> help much user land).
>
> @Rémy do you track the issues you encounter somewhere?
> For instance "CXF is not user friendly" but once you have CDI you get CXF
> set up just adding a servlet. Here, an initializer would have been friendly
> but then you would encounter the servlet initializer ordering issue.
>

Ok :)

So:
- When downloading CXF, I'm facing a myriad of JARs, and I cannot really
figure out what's mandatory (there's a WHICH_JARS file, so that cannot be
that good).
- (Ok I figured it out) Looking at the integration(s), I quickly notice
there are plenty I can use: cxf-integration-cdi, cxf-rt-rs-http-sci and
cxf-rt-transports-http (did I miss any ?). They all need that I define a
Servlet it seems (no idea why at least some of these don't do it for me).
- After getting somewhere and trying a mp health test with your Geronimo
Health CDI bundle, I got:
11-Jun-2019 17:28:34.004 WARNING [http-nio2-8080-exec-2]
org.apache.cxf.jaxrs.model.OperationResourceInfoComparator.compare Both
org.apache.geronimo.microprofile.common.jaxrs.HealthChecksEndpoint#getChecks
and
org.apache.geronimo.microprofile.impl.health.cdi.CdiHealthChecksEndpoint#getChecks
are equal candidates for handling the current request which can lead to
unpredictable results
11-Jun-2019 17:28:34.016 WARNING [http-nio2-8080-exec-2]
org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper.toResponse
javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error
at
org.apache.cxf.jaxrs.utils.SpecExceptions.toInternalServerErrorException(SpecExceptions.java:79)
at
org.apache.cxf.jaxrs.utils.ExceptionUtils.toInternalServerErrorException(ExceptionUtils.java:111)
at
org.apache.cxf.jaxrs.utils.InjectionUtils.invokeLifeCycleMethod(InjectionUtils.java:1450)
at
org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider.createInstance(PerRequestResourceProvider.java:89)
at
org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider.getInstance(PerRequestResourceProvider.java:78)
at org.apache.cxf.jaxrs.JAXRSInvoker.getServiceObject(JAXRSInvoker.java:420)
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
...
Caused by: java.lang.IllegalAccessException: Class
org.apache.cxf.jaxrs.utils.InjectionUtils can not access a member of class
org.apache.geronimo.microprofile.impl.health.cdi.CdiHealthChecksEndpoint
with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at
java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
at java.lang.reflect.Method.invoke(Method.java:491)
at
org.apache.cxf.jaxrs.utils.InjectionUtils.invokeLifeCycleMethod(InjectionUtils.java:1442)
... 47 more

That's where I am right now. The way to use CXF with Tomcat should be more
obvious.

OWB did not have most of these issues, the amount of libraries is
manageable and the integration was labelled as "tomcat7". The main issue
with OWB is that integration had issues [it needed some adjustments in
Tomcat to avoid instance manager replacement timing issues; other more
cosmetic problems were the use of both Catalina internal components and
Servlet level components, an integration should try to choose one or the
other unless there's a showstopper which forces both], so I tried to
modernize and improve it.


>
> In other words I wonder if we can't cumulate our efforts instead of
> working isolated and moreover if we can avoid to split the code and
> deliverables more than necessary - sounds like overlapping will be very
> high without more details.
>

I understand but CXF has too many constraints like the need to support many
many different kind of deployments and uses, so I'm not really blaming
anyone here.


> Do we have a functional showcase app already? Can help building one if
> needed.
> Do you have an idea of where you want to land (in terms of config +
> deliverables)?
>

Yes, ok. So for OWB as an example, here's what I have:
- Use Tomcat 9.0.21.
- Add <Listener className="org.apache.tomcat.webbeans.OpenWebBeansListener"
optional="true" /> to the <Server> element in server.xml. If OWB is not
present, the missing dependency of the listener will be logged as INFO
(without causing further problems). The context listener can also be
configured in conf/context.xml and it would apply to all webapps, but I
prefer avoiding this if possible (it's more hidden).
- Add the JAR from tomcat-owb to the lib folder, then this should CDI
enable all webapps. One thing I'm not sure about yet is the separate
javax.* JARs, so let's ignore that "detail" for now ...
- The integration can also be used at the individual webapp level (as
before) using context.xml.
- It only uses Catalina components.
Does that look better to you ?

Getting there with CXF is harder.


> Answering both can be a way to move forward and see how we can converge.
> To complete David's answer, I kind of see that even without integrating
> some EE things in Tomcat itself, it can benefit to TomEE and enable it to
> align even more on Tomcat in terms of user facing configuration for
> instance.
>

Right.

Rémy

>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://rmannibucau.metawerx.net/> | Old Blog
> <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | Book
> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
>
>
> Le mar. 11 juin 2019 à 21:22, Rémy Maucherat <r...@apache.org> a écrit :
>
>> Hi David,
>>
>> On Tue, Jun 11, 2019 at 8:37 PM David Blevins <david.blev...@gmail.com>
>> wrote:
>>
>>> Hi All,
>>>
>>> At a high level, is there a desire to start supporting more "EE" like
>>> specs such as CDI, JAX-RS, JPA, etc?
>>>
>>> Completely understood if the answer is "depends."  I suspect it would
>>> depend on if the code is clean and light in Tomcat spirit.
>>>
>>
>> Ok, so the plan (my plan, actually) here is that I noticed CDI (and
>> JAX-RS) is the building block of many other APIs (like the Microprofile),
>> so there's a need to be able to use it in a "clean and light [and] in
>> Tomcat spirit" way (as you said). I had a look at OWB and CXF and while the
>> support is there, it needs some work (especially for the latter) and is
>> certainly not user friendly (again, esp for the latter). Note that the work
>> is also in Tomcat itself, since I'm in a good position to make changes and
>> improvements as needed.
>>
>> As for the answer, it would still be "no" at this point, since at most
>> these could be considered as a couple extra optional modules like the jdbc
>> pool, or maybe "build them yourself" poms.
>>
>>
>>>
>>> I write this not from the perspective of "let's move a bunch of TomEE
>>> code into Tomcat", but more of "let's write cleaner newer code in Tomcat
>>> and retire equivalent TomEE code."
>>>
>>> That's not a specific proposal, just curious if appetite has developed
>>> in recent years to entertain tip-toeing beyond the same set of specs.
>>>
>>
>> Rémy
>>
>>>
>>>
>>> --
>>> David Blevins
>>> http://twitter.com/dblevins
>>> http://www.tomitribe.com
>>>
>>> > On Jun 11, 2019, at 8:06 AM, Romain Manni-Bucau <rmannibu...@gmail.com>
>>> wrote:
>>> >
>>> >
>>> >
>>> > Le mar. 11 juin 2019 à 16:57, Rémy Maucherat <r...@apache.org> a
>>> écrit :
>>> > On Thu, May 30, 2019 at 9:35 AM Romain Manni-Bucau <
>>> rmannibu...@gmail.com> wrote:
>>> >
>>> > Once done it can be hosted on both side.Owb has the advantage to be
>>> know by users, tomcat to be a more natural home for an integration. At the
>>> end it is mainly synchronizing both projects for a consistent communication
>>> and code "move" IMHO.
>>> >
>>> > For deep tomcat/cxf integration, you can use
>>> http://svn.apache.org/repos/asf/openwebbeans/meecrowave/trunk/ - core
>>> module. Technically it uses an embedded flavor but it would be easy to move
>>> to a standalone one through a listener based on a small refactoring in
>>> Meecrowave#start. The good part are the lifecycle and scanning integrations
>>> + the tooling to make testing and dev simple -
>>> http://openwebbeans.apache.org/meecrowave/.
>>> >
>>> > Ok, I think things look reasonably good using CDI extensions (looking
>>> at the Geronimo mp implementation you did) except the default CXF "servlet"
>>> integration. I think right now the "servlet" integration from the
>>> cxf-rt-transports-http package is "bad" and that the one from Meecrowave
>>> (in org.apache.meecrowave.cxf) is more likely to be the way to go (it
>>> derives from cxf-integration-cdi).
>>> >
>>> > So this looks a lot closer to Meecrowave than I originally expected,
>>> with a lot of "buts" though:
>>> > - Meecrowave feels a lot like "Tomcat for Meecrowave" while the goal
>>> here is a "Meecrowave for Tomcat"
>>> >
>>> > Guess this one can converge - at least for TomEE it did and we have a
>>> tons of flavors, I dont see a blocker to unify it here to.
>>> >
>>> > - The JAR has all of Tomcat, log4j, API JARs, etc, while it should
>>> here be based off Tomcat, the javax APIs and OWB already present in the
>>> Tomcat OWB implementation JAR (the classic "tomcat7" or the modernized
>>> "tomcat-owb")
>>> >
>>> > The jar is just one flavor of meecrowave - assuming you reference the
>>> fatjar, you should still be able to use it as plain unitary dependencies.
>>> > The missing part here is to extract from Meecrowave master class all
>>> the logic to "glue" the stack in Tomcat (mainly extracting it in a Listener
>>> I guess and ignoring the specific launcher config?)
>>> >
>>> > - log4j would need to be removed as well
>>> >
>>> > It is already supported, in this IT we drop log4j, johnzon, cxf:
>>> https://github.com/apache/meecrowave/blob/trunk/integration-tests/no-cxf/pom.xml#L32
>>> >
>>> > - plenty of configuration files and options in the JARs, but I guess
>>> that's the way it is since all the subcomponents are so flexible
>>> >
>>> > Yep, but all are also settable from a listener or a centralized file,
>>> we are really free here.
>>> >
>>> >
>>> >
>>> >
>>> > More technically: openwebbeans does not need properties files you can
>>> pass Properties when you create the WebBeansContext, this is what tomee
>>> does. Same for cxf and its bus ;).
>>> >
>>> > Ok, I'll have a look at that, it's better than properties files (but
>>> similar).
>>> >
>>> > Biggest short term challenge is to align scanners but it is very
>>> doable, long term it is to drop big core jars in all 3 libs for smaller
>>> bundles ;).
>>> >
>>> > Ok.
>>> >
>>> > Feel free to shout if you need help or more precise pointers.
>>> >
>>> > Rémy
>>> >
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: dev-h...@tomcat.apache.org
>>>
>>>

Reply via email to