Interfaces are immutable … well, in the case of the IServerPathTranslationService interface we broke this rule and introduced a new method that allows the platform to pass the session configuration to be passed to the Translation Service, as is the case for all other services. The new interface definition is as follows, whereby the new method is highlighted in yellow:
Up to and excluding this change any implementation of the Translation service was configuration less and dependent on itself, unless you kludged the platform code and forced yourself to configuration … which is not a clean or maintainable solution. The initialization of the Custom POC Adapter solution, for example, looked something like this:
During the initialization phase of the migration pipeline, the providers receive a reference to the MigrationServiceContainer class implementing the IServiceContainer, which in turn can and is used to retrieve a reference to the ConfigurationService service by calling the IServiceContainer.GetService(…) method. Unfortunately the PoCVCAdapterTranslation service has been waiting for such a reference in vain and is, as shown, isolated from the configuration world.
As the translation service was stranded with no easy way of getting the session configuration, we opted for hard coding of the POC drop drive … yuck, not a great solution, but it worked.
Note that the translation service does not get the IServiceContainer as it would be an overkill, but receives the filter pairs which could be invaluable reference to specialised translation services.
In case you are wondering, as I did, how the Translation Service works, then have a look at @@.
- If you have developed a custom adapter and implemented a translation service, your build should break when you upgrade to the latest platform code base. Implement the interface change, which is a snap!
- If you have downloaded the TFS Integration Platform Documentation or the Custom POC Adapter, you need to download the bits again, including the new platform codebase if you are involved with custom adapter development and/or runtime installation if you need the latest runtime.
Change has been implemented in changeset 46037 on Codeplex and in the documentation and guidance, dated 2010-January-27 or later.
Other changes implemented in this build include (notes in italic extracted from Codeplex):
Codeplex alpha update (as of 36634)
- Increase filter string column size in DB
- Fix conflict resolution bug
- Add Add-in Management service
- Added WITDiff functionality that uses adapters.
- Added ServerDiff command tool in the MigrationTools solution that provides both wit and vc options with similar command line arguments including a default to perform the diff at the tiime of the last completed sync point.
- Added a SYNC_POINT table to the database and code in the SyncOrchestrator to write a row to it at the end of each one-way pass in a session.
- Fixed the memory usage problem for the VC diff problem by going down two levels in the tree before beginning to request full recursion.
- Config schema updated for user id lookup
- DB schema updated to persist user id related setting
- SyncContext default to "Disabled" and Frequency default to ContinuousManual
- Fix multiple enumeration bug in session status update when Frequency=OneTime is configured for WorkFlowType
- Fix issue reported on CodePlex: http://tfsintegration.codeplex.com/WorkItem/View.aspx?WorkItemId=15892
- Wildcard char support for field mapping
- Basic configuration validation
- Wit adapter: add project-scope context to query base