Hi,
I have some doubts concerning the idea of DOSGi intents
and its implementation. I have being using another DOSGi
implementation (CXF) and, there, the idea of intents is
implemented using the interceptor pattern. In fact, when a
remote service is published locally, a distribution
provider creates a corresponding endpoint. Then, the
intents that are indicated during service publication are
mapped to interceptors which are appended to the endpoint
(in fact, to the corresponding chains of interceptors).
Once this endpoint is created and configured, it can be
exported to an external repository where it can be found
by a client.
In this scenario, a service developer/publisher can
indicate to the SERVER SIDE distribution provider (using
intents) that some special processing is needed in order
to this service become remotely available. Those intents
are interpreted and the corresponding interceptors are
added to the corresponding endpoint's chains. Such an
intent can be, for example, a Log intent which instructs
the distribution provider on the server side to log all
requests that arrive to this service.
When a client is going to use a remote service, the
distribution provider on the CLIENT SIDE creates a proxy
which can also have some interceptors appended to
it. Let´s consider the necessity of cryptography as an
example... Well, when we say that a service should receive
encrypted requests, it will not be able to process a
request which is not encrypted. So, when we create a proxy
to this service on the client side, this proxy should
include an interceptor which is responsible for encrypting
the request before sending it to the server side. The
endpoint on the server side must also have an interceptor
which is responsible for decrypting the request. So, in
this case, an intent set on the SERVER SIDE is motivating
the creation of interceptors on BOTH sides of the
communication.
I wonder, however, if the client could establish some
requirement to the distribution provider on its own side.
For example, consider a client that would like to indicate
that its requests should be monitored from the client
perspective (so that, for example, the round-trip time and
marshalling time could be captured and that failures could
be logged). This kind of "intent" makes sense only to this
client, and not to other clients from the same service.
Well, in this case we could plug the monitoring capability
using the proxy to the remote service (through
interceptors). Can we say that this kind of requirement is
an intent that should be indicated by the client? And in
this case, how could we indicate such intent since the
only thing that the client sends to the registry in order
to select a server is a filter?
Well, sorry about this long email and about those
confused ideas. In fact, this is basically a brainstorm.
Thank you, very much for the attention and patience.
Best regards,
Fábio