Indeed I didn't read well your lastname ;-).

You are right I actually use OSGi service to expose that service but in my
implementation I use camel (with ProducerTemplate and some route if
needed). It allows me to easily change the technology stack if needed (for
example netty, jetty, restlet, spark-rest and so on).

Thx again for sharing your experiences !

On Fri, Sep 25, 2015 at 3:45 PM Christian Schneider <[email protected]>
wrote:

> Hi Arnaud,
>
> I guess your mean Christian Müller who I know worked at Worldline some
> time ago. That is not me .. though we both are active in the Camel project
> which already led to some confusions :-)
>
> I think I would skip sharing the common prefix and simply have one config
> per service you call like http://example.com/api/customers and
> http://example.com/api/contracts <http://example.com/api/contacts>. I
> would wrap each such service in king of a proxy as an OSGi service with a
> plain java interface. So then each service proxy can have its own config
> for the uri. You would then still not share the common prefix but you
> achieve a nice separation of business logic and technology. It might be
> some additional effort at the start but it makes your project more
> manageable when it grows.
>
> In general I would try to implement business logic completely outside of
> camel. It should just offer and consume OSGi services. The main effect of
> this is that you have a much clearer picture of what the business
> requirements are when looking at the code. Unfortunately camel makes it
> very easy to mix technology and business logic but this does not scale well
> with project size.
>
>
> Christian
>
>
> On 25.09.2015 15:25, Arnaud Deprez wrote:
>
> Thanks for your answers guys and glad to have some news of your Christian
> (It's been a while since Worldline).
>
> So for example, what I'd like to share is endpoint url. For the database
> it's very easy to expose a datasource as a service.
>
> So to give you the picture, I'm designing an API gateway in front of
> multiple backends (I can't say Micro Services right now because it's not as
> micro as it's supposed to be right now).
> The goal of this API is to be the gateway for third party application.
> My design choices was to split my APIs and my Implementations by business
> context.
> The thing is that for different context, I've to reach the same backend
> right now.
>
> So let's say this backend as the following context-path url :
> http://example.com/api
> In one bundle I need to call http://example.com/api/customers and in
> another one http://example.com/api/contracts
> <http://example.com/api/contacts>.
> My first idea was to have a environment PID configuration which contains
> "backend.base.url = http://example.com/api"; and in each bundles
> "customers.url = ${backend.base.url}/customers" and "contracts.url =
> ${backend.base.url}/contracts".
> I know that it's possible to merge properties like that but only in the
> same configuration PID.
> The advantage with this solution is that if they decided to split their
> backend into one for customer and one for backend (and if they keep the
> same API), I can just update my properties customers.url and contracts.url.
>
> As it doesn't seem to be possible, I think creating proxies for those
> service is the best design choice right now but it's a bit over work when I
> can simply the http4 camel component.
>
> Regards,
>
> Arnaud
>
>
> --
> Christian Schneiderhttp://www.liquid-reality.de
>
> Open Source Architecthttp://www.talend.com
>
>

Reply via email to