Hi Ken,
It looks like time to start versioning service interfaces.
How about moving the new command into new interface that extends original service interface:
interface IProcessesV2 extends IProcesses {
static final String name = "ProcessesV2";
IToken start(.....);
}
Clients then can easily check presence of IProcessesV2 and use new command only if available.
This is the versioning scheme that we have planned for TCF originally.
What do you think?
Regards,
Eugene
Forwarding to tcf-dev.
From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx]
On Behalf Of ken.ryall@xxxxxxxxx
Sent: Monday, February 21, 2011 10:57 PM
To: dsdp-tcf-dev-bounces@xxxxxxxxxxx; cdt-dev@xxxxxxxxxxx
Subject: [cdt-dev] Changing TCF APIs
A few weeks back the API in org.eclipse.tm.tcf.services.IProcesses changed. A new version of IProcesses.start was added and the old one deprecated. When
I was adapting the EDC sources for this change I realized that the scope goes well beyond the java API change. The format for the TCF "start" command for the Processes service may now be sent to the agent in either the old way or the new one. New agents can
easily be revised to handle this, or take advantage or the additional options, but existing agents will at best behave unexpectedly or at worst fail or crash. I don't think a TCF client has any way of knowing which version of "start" is supported by the agent.
So changing TCF APIs has more consequences that just changing an API in Eclipse, it may break behavior that existing agents are relying on. So if we want
to revise the API to TCF service definitions we need a way to discover what version of a service is supported and not sent it commands in a format it doesn't support.
For now EDC will continue to use the old deprecated version of IProcesses.start so it will continue to work with existing agents.
|