users@javaee-spec.java.net

[javaee-spec users] Re: Eagerly getting host/port of a JAX-RS endpoint

From: Arun Gupta <arun.gupta_at_gmail.com>
Date: Fri, 19 Jun 2015 16:18:52 +0100

> (1) Where to do the registration?
>
>
> Currently the registration is happening in @Startup @Singleton.
> Ideally would like this in a @ApplicationScoped bean but there is no
> @Startup there.
>
>
> Right, I was only answering from a JAX-RS point of view, assuming you
> didn’t want to use any other API.

Ah, I look at Java EE as the solution provider so anything from the
platform would work.

>
>
> (2) How to access the necessary information like host/port for the
> registration.
>
> JAX-RS typically operates at the level of paths and contexts, not hosts and
> ports. Even though you can get a URI with that info, it is really beyond
> JAX-RS IMO.
>
>
> Host/port can be extracted from @UriInfo but that is only after the
> request has been made.
>
>
> Yes, it can be “extracted”, but it was not really designed for your use
> case.

Understood, and it serves the intended purpose well :)

> As for (1), JAX-RS has its own registration phase for resources, providers
> and features. You can do this when defining an Application subclass and also
> in any DynamicFeature that is automatically discovered (which are processed
> at deploy time). Neither was designed with your use case in mind, though.
>
>
> Can host/port information be retrieved in any of those?
>
>
> Not using JAX-RS. IOW, JAX-RS may provide places for (1) but, as I said
> before, (2) is really beyond JAX-RS and should be provided by the container
> (although, I suppose this could be tricky in environments with load
> balancers/clusters).

+1, this has to be provided by the platform.

Arun

>
> — Santiago
>
> On Jun 19, 2015, at 7:41 AM, Arun Gupta <arun.gupta_at_gmail.com> wrote:
>
> Yes, that would be the ideal and clean solution.
>
> Filed [1] for tracking.
>
> [1] https://java.net/jira/browse/JAVAEE_SPEC-47
>
> Cheers,
> Arun
>
>
> On Fri, Jun 19, 2015 at 6:52 AM, Antonio Goncalves
> <antonio.goncalves_at_gmail.com> wrote:
>
> That brings back a topic we've been talking (and avoiding) for quite a long
> time : EJB services going back to where they should go.
>
> Like @Transactional was created in JTA to be used on any beans, @Startup,
> @Schedule... should follow the same path. @Startup should go to the Java EE
> Concurrency spec and be used anywhere.
>
> Antonoi
>
> On Fri, Jun 19, 2015 at 12:31 PM, Arun Gupta <arun.gupta_at_gmail.com> wrote:
>
>
> Already using ZooKeeper as a service registry [1].
>
> The key question is how does a REST endpoint advertise itself to this
> registry. We need a @Startup for a JAX-RS endpoint. Is there an
> equivalent?
>
> [1]
> http://blog.arungupta.me/zookeeper-microservice-registration-discovery/
>
> Arun
>
> On Fri, Jun 19, 2015 at 11:00 AM, Romain Manni-Bucau
> <rmannibucau_at_gmail.com> wrote:
>
> Maybe I get it wrong but looks like you need a service registry
> *outside*
> the container itself no?
>
> Then just getting injected a client would make it easy to use.
>
> Le 19 juin 2015 10:19, "Arun Gupta" <arun.gupta_at_gmail.com> a écrit :
>
>
> Currently, I'm using @Startup @Singleton EJB [1] for registering the
> REST endpoint but the host/port are statically defined. This endpoint
> could be deployed on a PaaS or a Docker container or somewhere else
> where the host/port could be different every time.
>
> Ideally, I'd love something like:
>
> @Path("catalog")
> @Startup
> public class CatalogItemREST {
>
> @PostConstruct
> public void init() {
> // get Host
> // get Port
> // register the service
> }
> }
>
>
> [1]
>
> https://github.com/arun-gupta/microservices/blob/master/microservice/catalog/src/main/java/org/javaee7/wildfly/samples/everest/catalog/CatalogService.java
>
> [2]
>
> https://github.com/arun-gupta/microservices/blob/master/microservice/catalog/src/main/java/org/javaee7/wildfly/samples/everest/catalog/CatalogItemREST.java
>
> Thoughts?
>
> Cheers
> Arun
>
> On Fri, Jun 19, 2015 at 1:10 AM, Romain Manni-Bucau
> <rmannibucau_at_gmail.com> wrote:
>
> @Arun: can you precise the kind of API you expect (pseudo code is
> fine)?
> Typically I think to these common cases:
> - host is 0.0.0.0
> - you have N connectors (so how do you select)
> - you are behind a proxy (httpd/ngnix)
>
> Romain
>
> Le 18 juin 2015 23:52, "Arun Gupta" <arun.gupta_at_gmail.com> a écrit :
>
>
> If multiple WARs with JAX-RS REST endpoints are deployed, how are
> URIs
> of these endpoints advertised?
>
> Tried using @Startup @Singleton but there is no
> standard/non-standard
> way to access host/port there.
>
> @PostConstruct for JAX-RS endpoint is not called until the endpoint
> is
> invoked once.
>
> @Context UriInfo is only available after the endpoint has been
> invoked.
>
> There is a bit of discussion at:
>
> https://twitter.com/arungupta/status/611493850092322816
>
> Any suggestions?
>
> Cheers
> Arun
>
> --
> http://blog.arungupta.me
> http://twitter.com/arungupta
>
>
>
>
> --
> http://blog.arungupta.me
> http://twitter.com/arungupta
>
>
>
>
> --
> http://blog.arungupta.me
> http://twitter.com/arungupta
>
>
>
>
>
> --
> Antonio Goncalves
> Software architect, Java Champion and Pluralsight author
>
> Web site | Twitter | LinkedIn | Pluralsight | Paris JUG | Devoxx France
>
>
>
>
> --
> http://blog.arungupta.me
> http://twitter.com/arungupta
>
>
>
>
>
> --
> http://blog.arungupta.me
> http://twitter.com/arungupta
>
>



-- 
http://blog.arungupta.me
http://twitter.com/arungupta