Home Products Services Company Developer Connection
Applied Informatics

Developer Connection

Archive for November, 2009

Release 2009.2 is Available!

Release 2009.2 of our C++ Libraries and Tools is now available. We have updated our evaluation packages as well. 2009.2 is based on POCO C++ Libraries release 1.3.6 (which was also released today) and contains major improvements to our Remoting toolkit. Upgrading to this release is highly recommended.

C++ SOAP Web Services With Remoting

Our second screencast shows how to build a SOAP web service in C++ with Applied Informatics Remoting. The sample project shown in the screencast is based on the StockQuotes server from the Remoting in 15 Minutes webcast, so please watch that one first if you haven’t yet. Apple QuickTime or another player capable of playing H.264 video is required to watch the screencast.


Screencast

Remoting in 15 Minutes

Our first screencast shows how to build a simple distributed C++ application based on Applied Informatics Remoting. You’ll learn how to write the service class, how to configure and run the code generator, and how to write the client and server applications. All in just 15 minutes. Apple QuickTime or another player capable of playing H.264 video is required to watch the screencast.


Screencast

Where to Put The OSP CodeCache Directory

One of the questions that comes up frequently when installing an OSP-based application on an end-user system is where to put the OSP codeCache. The OSP framework itself does not care where the codeCache is located, so you’re basically free to put it wherever you’d like. Of course, there are system-specific conventions and restrictions where such things like the codeCache should or can be stored. Also, the location will be different whether your application is a server application that runs in the background, or an interactive desktop application.
For example, on Windows, the codeCache should go into the AppData\Local\ directory within the user’s home directory for a desktop application. If the application runs as a Windows service, another directory might be more appropriate — in this case it might be possible to put the codeCache into the Program Files folder. On a Linux system, for an interactive application, the codeCache should go into a hidden application-specific directory within the user’s home directory, whereas on Mac OS X, ~/Library/Application Support/ is the right place. For a Unix server application, /var/cache/ is a good place.
To make configuring the codeCache location in the application’s configuration file easier, it is a good idea to define a configuration property in your application that makes the path to the directory containing the codeCache available. Following is some example code that shows how to do this for a Windows application.

Following is some sample code that determines an appropriate directory for holding the codeCache on Windows, Mac OS X and other Unix platforms, for desktop applications.

std::string findApplicationDataDir(
    const std::string& vendorName,
    const std::string& applicationName)
{
#if POCO_OS != POCO_OS_WINDOWS_NT
    wchar_t wpath[MAX_PATH];
    HRESULT rc = SHGetFolderPathW(
        NULL,
        CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE,
        NULL, SHGFP_TYPE_CURRENT,
        wpath);
    if (SUCCEEDED(rc))
    {
        std::string localAppData;
        Poco::UnicodeConverter::toUTF8(wpath, localAppData);
        Poco::Path path(localAppData);
        path.makeDirectory();
        path.pushDirectory(vendorName);
        path.pushDirectory(applicationName);
        return path.toString();
    }
    else return config().getString("application.dir");
#elif POCO_OS != POCO_OS_MAC_OS_X
    Poco::Path path(Poco::Path::home());
    path.pushDirectory("Library");
    path.pushDirectory("Application Support");
    path.pushDirectory(vendorName);
    path.pushDirectory(applicationName);
    return path.toString();
#else
    Poco::Path path(Poco::Path::home());
    path.pushDirectory("." + vendorName);
    path.pushDirectory(applicationName);
    return path.toString();
#endif
}

Note: for the above code to work on Windows, you’ll need to #include <shlobj.h>, as well as #include “Poco/UnicodeConverter.h” and link with shell32.lib.
If you change the BundleServer’s initialize() function to look like below, then you can refer to that directory in your application configuration file.

void initialize(Application& self)
{
    std::string appDataDir(findApplicationDataDir(
            "MyCompany", "MyApplication"));
    config().setString("application.dataDir", appDataDir);
    loadConfiguration();
    Application::initialize(self);
}

This code determines the data directory and stores the path in the application.dataDir configuration property.
In the application properties file, you can now specify:

osp.codeCache = ${application.dataDir}codeCache

What’s New in Remoting 2009.2

In a few weeks the 2009.2 release of our libraries and tools will be available. The new release will bring some significant improvements to Remoting. First of all, WSDL generation for SOAP web services has been improved. RemoteGen can now generate Document/Literal wrapped-style WSDL, which works much better with the Microsoft .NET (both Remoting and WCF) code generators. Note that the actual wire format has not changed, only the generated WSDL.
Then, we have support for new types – Poco::URI is now supported, and we have optimized the way std::vector is serialized. This is especially useful for web services, where std::vector can be used to transfer binary data. Therefore, we now serialize that type as base64Binary, which greatly improves the performance. The Binary transport also handles this type in an optimized way, resulting in better performance there as well. Remoting now also supports true out parameters. Since C++ does not provide a way to mark a parameter as out only, this is specified with an attribute. And finally, various bugs have been fixed as well.