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