Pushed an enhancement, idea is to check if servlet mapping explicitely maps the servlet in the jaxrs subcontext.
I'll let you review the fix (in CxfJAXRSFilter) and the few tests I added in arquillian-tomee-jaxrs-test (AvoidConflict*Test) - on develop. If it is not ok for everybody we can end up having a flag to switch back to real servlet. Romain Manni-Bucau @rmannibucau http://www.tomitribe.com http://rmannibucau.wordpress.com https://github.com/rmannibucau 2015-01-26 11:58 GMT+01:00 Thiago Veronezi <[email protected]>: > Hi guys, > > I won't have much time to check it further today, but I was able to update > this project so you can use as example. > > https://github.com/tveronezi/rssreader > > It works on 1.7.1, but it crashes on 1.7.2. > > []s, > Thiago. > > > > > On Mon, Jan 26, 2015 at 5:52 AM, Jean-Louis Monteiro < > [email protected]> wrote: > >> From your summary Romain, I'd go back to the servlet solution. >> Seems more deterministic and easy. >> >> From a performance point of view, it's seems also much better isn't it? >> From my understanding, even a simple JS or HTML static resource needs to go >> through the filter. >> >> It seems hard to get the filter work without re-implementing part or the >> servlet mapping and the JAX RS mapping. >> I mean really work without any tricks. >> >> For example, I often get a WebApplicationException when I want a simple >> resource or a simple servlet. >> So from my point of view the filter seems to solve interesting situations >> for JAX-RS but at the price of adding more complexity to Tomcat servlet >> management as well as probably impacting performances. >> >> And when you say the impl is more complicated, I can't imagine someone else >> maintaining this code and logic. >> >> conflict immediately with resources (html, css, js) >> > >> --> can you add more details please? >> >> Probably does not bring much to the discussion, but I'm use to say, the >> simpler the better. >> There is another point that matters (at least to me). >> >> Having a simple app on Tomcat works fine. Having the same app on WebProfile >> flavor also works fine. >> But having the same one on JAX RS or plus may or not fail and have less >> throughput. >> >> For instance, not the same stack nor process between Tomcat, TomEE WP and >> TomEE Plus is a stopper for me. >> >> Jean-Louis >> >> -- >> Jean-Louis Monteiro >> http://twitter.com/jlouismonteiro >> http://www.tomitribe.com >> >> On Mon, Jan 26, 2015 at 10:31 AM, Romain Manni-Bucau < >> [email protected]> >> wrote: >> >> > well basically we have 2 ways of implementing JAXRS "mapping" >> > - as the result of a servlet (old implementation) >> > - as a filter (current) >> > >> > Pro for servlet: >> > - everybody does it -> NO surprises in its usage >> > - simpler than what we have >> > >> > Cons for servlet: >> > - conflict immediately with resources (html, css, js) >> > - standard servlet rules applies so we can conflict with servlets as well >> > >> > >> > Pro for filter: >> > - we can solve it >> > - more complicated impl >> > >> > Cons: >> > - nobody does it (means we are not as close of a standard as we could) >> > - we loose some servlet rules like /foo/* has a higher priority than >> > /* for request /foo/bar >> > >> > >> > Current implementation simply does this logic: if a servlet is mapped >> > and is not the default one then use this servlet, else if a resource >> > matches the request then return its content else use jaxrs. This allow >> > JAXRS to not hide resources even when mapping is conflicting - default >> > case whatever we do when a user doesn't specify an Application mapping >> > for an @ApplicationPath. >> > >> > I know David wanted it to work OOTB, personally I don't care that much >> > since I consider it is a bad practise to have conflicting endpoints - >> > the case in this example, index should be mapped to a welcome-file and >> > that's it IMO. >> > >> > Last point it is still deactivable through >> > openejb.jaxrs.static-first=false in conf/system.properties and >> > shouldn't happen if there is a JAXRS mapping. >> > >> > >> > Hope I didn't forget too much points. >> > >> > >> > >> > Romain Manni-Bucau >> > @rmannibucau >> > http://www.tomitribe.com >> > http://rmannibucau.wordpress.com >> > https://github.com/rmannibucau >> > >> > >> > 2015-01-26 10:18 GMT+01:00 Jonathan Gallimore < >> > [email protected]>: >> > > Hi, >> > > >> > > Interesting issue. I thought I'd create a new thread for this issue as >> I >> > > think it probably needs some discussion and agreement on how best to >> fix, >> > > and think that's best done on a discussion thread as opposed to the >> vote >> > > thread. >> > > >> > > I'll leave the vote open at least for a few more hours to see if there >> is >> > > any further feedback that comes in. >> > > >> > > If I have understood it correctly, the issue is that you have servlet >> > > mappings like: >> > > >> > > <servlet-mapping> >> > > <servlet-name>default</servlet-name> >> > > <url-pattern>/app/*</url-pattern> >> > > </servlet-mapping> >> > > <servlet> >> > > <servlet-name>index</servlet-name> >> > > <jsp-file>/index.jsp</jsp-file> >> > > </servlet> >> > > <servlet-mapping> >> > > <servlet-name>index</servlet-name> >> > > <url-pattern>/*</url-pattern> >> > > </servlet-mapping> >> > > >> > > and an EJB or POJO like: >> > > >> > > @Path("rest") >> > > public class RestService { >> > > >> > > @Path("users") >> > > public List<Users> getUsers() { >> > > .... >> > > } >> > > } >> > > >> > > and for some reason the index.jsp is "trumping" the Rest endpoint for >> > > /rest/users. >> > > >> > > Is that correct? Reverting out those 2 commits does give us other >> issues >> > so >> > > it sounds like this may require a different fix potentially? >> > > >> > > Any thoughts? >> > > >> > > Jon >> > > >> > > On Mon, Jan 26, 2015 at 8:21 AM, Romain Manni-Bucau < >> > [email protected]> >> > > wrote: >> > > >> > >> Hello Thiago, >> > >> >> > >> if you map >> > >> >> > >> <servlet> >> > >> <servlet-name>index</servlet-name> >> > >> <jsp-file>/index.jsp</jsp-file> >> > >> </servlet> >> > >> <servlet-mapping> >> > >> <servlet-name>index</servlet-name> >> > >> <url-pattern>/*</url-pattern> >> > >> </servlet-mapping> >> > >> >> > >> then you explicitely ask all your calls to be mapped to index servlet >> > >> so it seems ok to me. >> > >> >> > >> Did I misunderstand you? >> > >> >> > >> >> > >> >> > >> Romain Manni-Bucau >> > >> @rmannibucau >> > >> http://www.tomitribe.com >> > >> http://rmannibucau.wordpress.com >> > >> https://github.com/rmannibucau >> > >> >> > >> >> > >> 2015-01-26 3:00 GMT+01:00 Thiago Veronezi <[email protected]>: >> > >> > -1 -> The default servlet is catching the RS requests. >> > >> > >> > >> > Basically, in single-page-applications, I need to map the default >> > servlet >> > >> > in a special way... >> > >> > >> > >> > . >> > >> > . >> > >> > . >> > >> > <!-- The trick is to put all your static files under the same >> > directory >> > >> > and map the "default" servlet to it --> >> > >> > <servlet-mapping> >> > >> > <servlet-name>default</servlet-name> >> > >> > <url-pattern>/app/*</url-pattern> >> > >> > </servlet-mapping> >> > >> > >> > >> > <!-- Any other request will point to the "index.jsp" page. This >> way >> > YUI >> > >> > will be able to manage page transitions >> > >> > at the client side in case the user starts the application >> > from a >> > >> > permalink. --> >> > >> > <servlet> >> > >> > <servlet-name>index</servlet-name> >> > >> > <jsp-file>/index.jsp</jsp-file> >> > >> > </servlet> >> > >> > <servlet-mapping> >> > >> > <servlet-name>index</servlet-name> >> > >> > <url-pattern>/*</url-pattern> >> > >> > </servlet-mapping> >> > >> > . >> > >> > . >> > >> > . >> > >> > >> > >> > TomEE 1.7.2 returns "index.jsp" for all my rest calls (GET >> > >> > http://localhost:8080/myapp/rest/users, for example). >> > >> > >> > >> > After reverting back these two commits, the system gets back to >> > normal. >> > >> > >> > >> >> > >> https://git1-us-west.apache.org/repos/asf?p=tomee.git;a=commit;h=544806da419bc2f5ab8bc936a989ff99bc9d891b >> > >> > >> > >> >> > >> https://git1-us-west.apache.org/repos/asf?p=tomee.git;a=commit;h=cb135dd6344f93ed24888cafcc05d0cfbb0c62a9 >> > >> > >> > >> > @Romain, >> > >> > Can you take a look? I'm not sure what was the idea. >> > >> > >> > >> > []s, >> > >> > Thiago. >> > >> > >> > >> > >> > >> > On Sun, Jan 25, 2015 at 9:36 AM, Jonathan Gallimore < >> > >> > [email protected]> wrote: >> > >> > >> > >> >> Hi, >> > >> >> >> > >> >> Sorry, should have added that. It's: >> > >> >> >> > https://repository.apache.org/content/repositories/orgapachetomee-1045 >> > >> >> >> > >> >> Regards >> > >> >> >> > >> >> Jon >> > >> >> >> > >> >> >> > >> >> >> > >> >> > On 25 Jan 2015, at 14:19, jieryn <[email protected]> wrote: >> > >> >> > >> > >> >> > On Sat, Jan 24, 2015 at 4:20 PM, Jonathan Gallimore >> > >> >> > <[email protected]> wrote: >> > >> >> >> Maven Repo: >> > >> https://dist.apache.org/repos/dist/dev/tomee/staging-1045/ >> > >> >> > >> > >> >> > Where is the actual Maven artifact staging repository for this? >> So >> > my >> > >> >> > projects which depend on TomEE can be built and tested against >> the >> > >> >> > candidate. Thanks! >> > >> >> >> > >> >> > >>
