users@javaee-spec.java.net

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

From: Santiago Pericas-Geertsen <Santiago.PericasGeertsen_at_oracle.com>
Date: Fri, 19 Jun 2015 10:59:25 -0400

> On Jun 19, 2015, at 10:29 AM, Arun Gupta <arun.gupta_at_gmail.com> wrote:
>
> Santiago,
>
> On Fri, Jun 19, 2015 at 2:29 PM, Santiago Pericas-Geertsen
> <Santiago.PericasGeertsen_at_oracle.com <mailto: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.

 Right, I was only answering from a JAX-RS point of view, assuming you didn’t want to use any other API.

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

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

— 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://blog.arungupta.me/>
> http://twitter.com/arungupta <http://twitter.com/arungupta>