UriInfo matches the http request info... Le 6 févr. 2013 07:16, "Chet Hosey" <[email protected]> a écrit :
> After building httpd 2.2.23 and mod_jk 1.2.37, I configured an AJP proxy > for the TomEE test instance and set the jvmRoute in server.xml to match the > worker name from workers.properties. > > A request through httpd shows httpd's port number for the > httpServletRequest methods, but still shows the TomEE HTTP connector port > in the URIs returned by the uriInfo methods. > > Doing string replacements seems fairly inelegant but I suppose it's an > option for custom apps. It would be surprising to learn that the only other > option is to configure the TomEE instances' HTTP connectors on the same > port as the httpd server, since each TomEE instance would then need a > dedicated IP. > > I've filed TOMEE-757 in JIRA, as it's hard to imagine that this behavior is > intended. > > > On Tue, Feb 5, 2013 at 9:17 AM, Chet Hosey <[email protected]> wrote: > > > Ahh, that's a good thought. It was the default value of "localhost". > After > > changing the "name" attribute on the Host entry and updating the > > defaultHost on the Engine, I'm getting the expected host name in the > > response. > > > > This leads me to wonder what happens when using AJP. I'm picturing a > setup > > where httpd runs on port 80 and proxies to multiple TomEE instances via > > AJP. If the HTTP connector port is still used by the UriInfo methods, > then > > TomEE would require special access (root or authbind) to bind to port 80 > to > > work around this behavior. And it wouldn't be possible to run multiple > > TomEE instances on the same IP, since they'd all have to bind to port 80 > to > > ensure URI correctness. > > > > I'll have to experiment to find out. If I get the chance to do so, I'll > > report results back. > > > > Thanks! > > > > > > On Tue, Feb 5, 2013 at 1:16 AM, Romain Manni-Bucau < > [email protected]>wrote: > > > >> Hi, > >> > >> What's your host in the server.xml? > >> Le 5 févr. 2013 06:30, "Chet Hosey" <[email protected]> a écrit : > >> > >> > I've been using apache-tomee-1.5.1-jaxrs as a platform for learning > >> JAX-RS > >> > and have run into some confusion about UriInfo determines the base > URI. > >> In > >> > my testing the URIs returned by UriInfo include the correct port > number. > >> > But the host name is always "localhost", even when I'm accessing TomEE > >> from > >> > a remote machine. > >> > > >> > It's possible that UriInfo is meant to build identifiers, and not > >> locators. > >> > This would explain why it's not called UrlInfo. But the design of > >> > UriBuilder suggests that one should be able to call > >> > > >> > uriInfo.getBaseUriBuilder() > >> > .path(User.class, "getUserInfo") > >> > .path(userId).build(); > >> > > >> > and use the result as a hyperlink in a JAX-RS response. > >> > > >> > Having used mod_jk with JBoss, I know that it can override the values > >> > returned by HttpServletRequest methods with parameters like > >> JK_LOCAL_NAME. > >> > But since this is just a sandbox I'm accessing Tomcat directly, > without > >> an > >> > Apache httpd proxy. But this led me to wonder what > >> > httpServletRequest.getlocalName() would return. So I created a test > >> method > >> > to find out, using the following signature: > >> > > >> > @GET > >> > @Produces({MediaType.TEXT_PLAIN}) > >> > public String defaultPage(@Context UriInfo uriInfo, > >> > @Context HttpHeaders hh, > >> > @Context HttpServletRequest httpServletRequest) { > >> > > >> > The output surprised me. The HttpServletRequest methods use the > correct > >> > host name and IP address, and the "Host" header uses the public > address. > >> > The UriInfo methods get the port correct, but they still use > >> "localhost" as > >> > the host name. > >> > > >> > uriInfo.getAbsolutePath(): > >> > http://localhost:8081/sample-app-1.0-SNAPSHOT/ > >> > uriInfo.getBaseUri(): > http://localhost:8081/sample-app-1.0-SNAPSHOT > >> > uriInfo.getRequestUri(): > >> http://localhost:8081/sample-app-1.0-SNAPSHOT/ > >> > httpServletRequest.getLocalAddr(): 1.2.3.4 > >> > httpServletRequest.getLocalName(): www.example.com > >> > httpServletRequest.getLocalPort(): 8081 > >> > httpServletRequest.getServerName(): www.example.com > >> > httpServletRequest.getServerPort(): 8081 > >> > > >> > host: > >> > www.example.com:8081 > >> > > >> > Is there a way to use TomEE's embedded CXF REST implementation to > >> generate > >> > URIs that can be used by external clients to locate other resources > >> within > >> > the same application? Or am I making bad assumptions about the purpose > >> of > >> > the UriInfo methods that return UriBuilders? > >> > > >> > -- Chet > >> > > >> > > > > >
