users@javaee-spec.java.net

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

From: Romain Manni-Bucau <rmannibucau_at_gmail.com>
Date: Fri, 19 Jun 2015 16:45:55 +0200

2015-06-19 16:29 GMT+02:00 Arun Gupta <arun.gupta_at_gmail.com>:

> Santiago,
>
> On Fri, Jun 19, 2015 at 2:29 PM, Santiago Pericas-Geertsen
> <Santiago.PericasGeertsen_at_oracle.com> wrote:
> > Arun,
> >
> > Seems to me that there are two parts to your question:
> >
> > (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.
>
>
@Observes @ApplicationScoped startup? or through an extension
AfterValidation event?


> > (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.
>

Issue is it can be irrelevant as well (internal calls/public calls etc...).
JAXRS is passive where container is active on this aspect.


>
> > 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?
>
> 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
>