= FDO RFC 4 - Provider Support for ArcSDE 9.2 = This page contains a change request (RFC) for the FDO Open Source project. More FDO RFCs can be found on the [wiki:FDORfcs RFCs] page. == Status == ||RFC Template Version||(1.0)|| ||Submission Date||Apr 19, 2007|| ||Last Modified||[[Timestamp]]|| ||Author||Greg Boone|| ||RFC Status||Draft|| ||Implementation Status||pending|| ||Proposed Milestone||3.2.2.0|| ||Assigned PSC guide(s)||Greg Boone|| ||'''Voting History'''||TBD|| ||+1|||| ||+0|||| ||-0|||| ||-1|||| == Overview == Various FDO !OpenSource community users and clients have requested that the FDO ArcSDE Provider support access to both the ArcSDE 9.1 and 9.2 clients. In its current !OpenSource build configuration, the ArcSDE provider is not able to accomplish this requirement. At this time only the ArcSDE 9.1 client support is provided. Therefore the question arises: how can we most effectively provide support for both ArcSDE client platforms without placing additional administrative burdens on our users? == Motivation == It is our assertion that it would be impractical to create two separate ArcSDE providers, one for 9.1 and another for 9.2. We ascertain that such a system would be difficult to maintain by the developers and users of the FDO open source community. We also ascertain that having two providers, either named identically or separately, would be difficult for our clients to install, switch between and generally support in conjunction with their users. It is the position of this RFC that a solution be implemented that would enable support for both ArcSDE clients without requiring a change to the primary entry point of the ArcSDE provider and it’s associated registration content in the FDO providers.xml file. It is position of this RFC that two new pseudo “provider” libraries, ArcSDEProvider91.dll, ArcSDEProvider92.dll, and a loader dll, ArcSDEProvider.dll, be generated that would replace the current provider dll setup. The loader dll will take the same name as the current FDO Provider: ArcSDEProvider.dll. The ArcSDE loader dll will load and use the ArcSDEProvider92.dll pseudo-provider dll if the client installed ArcSDE 9.2, otherwise it will load and use ArcSDEProvider91.dll. If a client installs both ArcSDE versions, ArcSDEProvider92.dll will be loaded and used. The ArcSDE 9.1 client will not be used. == Implementation Details == To implement the above recommendations, a design has been proposed that would result in the modification of the FDO ArcSDE build process so that it creates two separate provider libraries. Each library in turn will link against separate client SDK versions of ArcSDE 9.1 and 9.2. In conjunction with the above changes, the ArcSDE build process will create a loader dll which will export only one function: extern "C" FDOSDE_API FdoIConnection* !CreateConnection(). !CreateConnection is the public global method that is required to allow a provider to be found and loaded by the FDO !ClientServices API. Finally, the updated design proposes that a helper class be defined in the loader dll which will load one of the providers based on the installed ArcSDE client. The ArcSDE 9.1 pseudo-provider dll will link against the ArcSDE client libraries in %FDOTHIRDPARTY%\ESRI\ArcSDEClient91\Windows. If the libraries are not found in that location it will try and find the libraries in %SDEHOME%. If not found in either location, the build will fail. The ArcSDE 9.2 pseudo-provider dll will link against the ArcSDE client libraries in %FDOTHIRDPARTY%\ESRI\ArcSDEClient92\Windows. If the libraries are not found in that location it will try and find the libraries in %SDEHOME%. If not found in either location, the build will fail. The ArcSDE unit test project will only search for include and lib files in %SDEHOME%. In case user has only one version of the ArcSDE client installed, the location must be specified using %SDEHOME%