Listing 4: Preparing to instantiate the correct persistence implementation class.

Controller::Invoke(ICmd* cmd, Vo* vo)
{
    try {
        if (vo->getImp() == Vo::ODBC_SQLServer) {
            vo->setImpLibrary("ReferenceImp_Odbc.dll");
            vo->setImpAppendName("DB_ODBC_SqlServer");
        }
        if (vo->getImp() == Vo::ODBC_Oracle) {
            vo->setImpLibrary("ReferenceImp_Odbc.dll");
            vo->setImpAppendName("DB_ODBC_Oracle");
        }
        else if (vo->getImp() == Vo::OCCI_Oracle) {
            vo->setImpLibrary("ReferenceImp_Occi.dll");
            vo->setImpAppendName("DB_OCCI");
        }
        // Now invoke since after vo knows all it needs
        cmd->Execute(vo);
    }
    catch (exception ex) {
        // handle error ...
    }
    catch (...) {
        // handle error
    }
}