Uploaded image for project: 'Axis-C++'
  1. Axis-C++
  2. AXISCPP-856

Add Platform Services Abstraction Layer

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Won't Fix
    • None
    • None
    • Basic Architecture
    • None
    • N/A

    Description

      I am creating this issue relating to something we talked about months ago in the mailing list - you can search on "Platform abstraction layer thoughts" in the axis-c-dev mailing list. To summarize and refine the discussion, the goal is to attempt to concentrate as much as possible any platform differences in one area - code will be located in the platforms/ directory. There occasionally will be times when this cannot be done, but hopefully those occasions will be few and any platform-specific code changes required outside of platforms/ directory will be minimal.

      I have initially identified several areas that need to be abstracted: DLL loading, mutex, socket, and obtaining OS errors. There may be more (such as event log for FFDC kinds of stuff - on Unix maybe syslog() will be used, on windows to the event log), but that will be identified and done
      later.

      The idea (still to be hashed out) is to have classes for the various platform-specific stuff. The header files and default implementation would be in platforms/ directory as follows:

      platforms/AxisPsLibraryLoader.hpp
      platforms/AxisPsLibraryLoader.cpp
      platforms/AxisPsMutex.hpp
      platforms/AxisPsMutex.cpp
      platforms/AxisPsSocket.hpp
      platforms/AxisPsSocket.cpp
      platforms/AxisPsOSError.hpp
      platforms/AxisPsOSError.cpp

      The default implementation of these classes will be patterned after Unix and packaged in a DLL/library called, for lack of a better name, axis_platformservices. The AXIS engine will need to link to this DLL/library and thus it will need to be created first prior to creating any other DLLs/libraries.

      The implementation code for other platforms will be in each platform directory. For example, OS/400 will need to have its own AxisPsLibraryLoader.cpp file so one will be located as follows:

      platforms/os400/AxisPsLibraryLoader.cpp

      When building the axis_platformservices DLL/shared library, which files are build is dependent on the platform. For example, OS/400 would build everything in platforms/os400/ and would also build
      platforms/AxisPsMutex.cpp, platforms/AxisPsSocket.cpp and platforms/AxisPsOSError.cpp.

      The platform abstraction layer a separate library that will be statically linked to other service programs.

      The abstraction layer can also be used for to possibly simplify tracing support.

      More details later.

      Attachments

        Activity

          People

            nadiramra Nadir K. Amra
            nadiramra Nadir K. Amra
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: