[mapguide-commits] r5439 - in trunk/MgDev: Common/Foundation/System Common/MapGuideCommon/System Server/src/Core

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Dec 3 18:01:39 EST 2010


Author: brucedechant
Date: 2010-12-03 15:01:39 -0800 (Fri, 03 Dec 2010)
New Revision: 5439

Modified:
   trunk/MgDev/Common/Foundation/System/Resources.cpp
   trunk/MgDev/Common/Foundation/System/Resources.h
   trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp
   trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.h
   trunk/MgDev/Server/src/Core/Server.cpp
   trunk/MgDev/Server/src/Core/serverconfig.ini
Log:
Fix for trac ticket 1549 - Precache maps at server startup
http://trac.osgeo.org/mapguide/ticket/1549

Notes:
- Added serverconfig.ini PreCacheMaps property to the GeneralProperties section to allow specifying map definitions to precache at sever startup


Modified: trunk/MgDev/Common/Foundation/System/Resources.cpp
===================================================================
--- trunk/MgDev/Common/Foundation/System/Resources.cpp	2010-12-03 18:44:50 UTC (rev 5438)
+++ trunk/MgDev/Common/Foundation/System/Resources.cpp	2010-12-03 23:01:39 UTC (rev 5439)
@@ -52,6 +52,7 @@
 const STRING MgResources::LicenseInvalidSerialNumber    = L"Invalid serial number.";
 const STRING MgResources::LicenseCheckoutError          = L"Generic license checkout error.";
 const STRING MgResources::LicenseNotFound               = L"The license was not found.";
+const STRING MgResources::PreCacheMapsStart             = L"Precaching the following Maps:";
 
 
 

Modified: trunk/MgDev/Common/Foundation/System/Resources.h
===================================================================
--- trunk/MgDev/Common/Foundation/System/Resources.h	2010-12-03 18:44:50 UTC (rev 5438)
+++ trunk/MgDev/Common/Foundation/System/Resources.h	2010-12-03 23:01:39 UTC (rev 5439)
@@ -235,6 +235,7 @@
     static const STRING LicenseCheckoutCancel;
     static const STRING LicenseCheckoutError;
     static const STRING LicenseInvalidSerialNumber;
+    static const STRING PreCacheMapsStart;
 
 
     static const STRING UsingDefaultResourceFile;

Modified: trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp	2010-12-03 18:44:50 UTC (rev 5438)
+++ trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp	2010-12-03 23:01:39 UTC (rev 5439)
@@ -168,6 +168,8 @@
 const STRING MgConfigProperties::DefaultGeneralPropertyRenderer                             = L"GD";
 const STRING MgConfigProperties::GeneralPropertyFailoverRetryTime                           = L"FailoverRetryTime"; // for internal use only
 const INT32  MgConfigProperties::DefaultGeneralPropertyFailoverRetryTime                    = 60;
+const STRING MgConfigProperties::GeneralPropertyPreCacheMaps                                = L"PreCacheMaps";
+const STRING MgConfigProperties::DefaultGeneralPropertyPreCacheMaps                         = L"";
 
 // ******************************************************************
 // Administrative Connection Properties

Modified: trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.h	2010-12-03 18:44:50 UTC (rev 5438)
+++ trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.h	2010-12-03 23:01:39 UTC (rev 5439)
@@ -134,6 +134,10 @@
     static const STRING GeneralPropertyRenderer;                        /// value("Renderer")
     static const STRING DefaultGeneralPropertyRenderer;                 /// value("GD")
 
+    /// Sets the maps to precache
+    static const STRING GeneralPropertyPreCacheMaps;                    /// value("PreCacheMaps")
+    static const STRING DefaultGeneralPropertyPreCacheMaps;             /// value("")
+
 INTERNAL_API:
 
     static const STRING GeneralPropertyWorkerThreadPoolSize;            /// value("WorkerThreadPoolSize")

Modified: trunk/MgDev/Server/src/Core/Server.cpp
===================================================================
--- trunk/MgDev/Server/src/Core/Server.cpp	2010-12-03 18:44:50 UTC (rev 5438)
+++ trunk/MgDev/Server/src/Core/Server.cpp	2010-12-03 23:01:39 UTC (rev 5439)
@@ -29,6 +29,7 @@
 #include "LongTransactionManager.h"
 #include "CacheManager.h"
 #include "ServerFeatureTransactionPool.h"
+#include "ServerResourceService.h"
 
 #include "Stylizer.h"
 #include "Bounds.h"
@@ -1110,6 +1111,57 @@
             ACE_DEBUG ((LM_DEBUG, ACE_TEXT("    Parameters                    : %s\n"), MG_WCHAR_TO_TCHAR(pLogManager->GetTraceLogParameters())));
             ACE_DEBUG ((LM_DEBUG, ACE_TEXT("\n")));
 #endif
+
+            if((!m_bTestMode) && (!m_bTestFdo))
+            {
+                // Precache the specified maps
+                STRING preCacheMaps;
+                pConfiguration->GetStringValue(MgConfigProperties::GeneralPropertiesSection, MgConfigProperties::GeneralPropertyPreCacheMaps, preCacheMaps, MgConfigProperties::DefaultGeneralPropertyPreCacheMaps);
+
+                // Check if there is actually anything to precache
+                if(!preCacheMaps.empty())
+                {
+                    Ptr<MgStringCollection> preCacheMapsCollection;
+                    preCacheMapsCollection = MgStringCollection::ParseCollection(preCacheMaps, L",");
+
+                    if(preCacheMapsCollection->GetCount() > 0)
+                    {
+                        Ptr<MgUserInformation> userInfo = new MgUserInformation(MgUser::Administrator, L"");
+                        MgUserInformation::SetCurrentUserInfo(userInfo);
+
+                        Ptr<MgSiteConnection> siteConnection = new MgSiteConnection();
+                        siteConnection->Open(userInfo);
+
+                        Ptr<MgServerResourceService> resourceService = dynamic_cast<MgServerResourceService*>(pServiceManager->RequestService(MgServiceType::ResourceService));
+                        assert(NULL != resourceService.p);
+
+                        ACE_DEBUG((LM_INFO, ACE_TEXT("%W\n"), MgResources::PreCacheMapsStart.c_str()));
+
+                        for(INT32 i=0;i<preCacheMapsCollection->GetCount();i++)
+                        {
+                            try
+                            {
+                                STRING mapRes = preCacheMapsCollection->GetItem(i);
+                                ACE_DEBUG((LM_INFO, ACE_TEXT("  %W  "), mapRes.c_str()));
+                                Ptr<MgResourceIdentifier> mapResId = new MgResourceIdentifier(mapRes);
+                                Ptr<MgMap> map = new MgMap(siteConnection);
+                                map->Create(resourceService, mapResId, L"PreCacheMap");
+                                ACE_DEBUG((LM_INFO, ACE_TEXT("<%W>\n"), MgResources::Success.c_str()));
+                            }
+                            catch(MgException* e)
+                            {
+                                // Skip map entries that fail to be cached
+                                STRING message = e->GetDetails();
+                                SAFE_RELEASE(e);
+                                ACE_DEBUG((LM_INFO, ACE_TEXT("<%W> %W\n"), MgResources::Failure.c_str(), message.c_str()));
+                            }
+                        }
+
+                        ACE_DEBUG((LM_INFO, ACE_TEXT("\n")));
+                        MgUserInformation::SetCurrentUserInfo(NULL);
+                    }
+                }
+            }
         }
     }
     MG_CATCH(L"MgServer.open")

Modified: trunk/MgDev/Server/src/Core/serverconfig.ini
===================================================================
--- trunk/MgDev/Server/src/Core/serverconfig.ini	2010-12-03 18:44:50 UTC (rev 5438)
+++ trunk/MgDev/Server/src/Core/serverconfig.ini	2010-12-03 23:01:39 UTC (rev 5439)
@@ -69,6 +69,9 @@
 #                                  kilobytes (KB)
 #                                       0 < Value <= 2000000
 # MaxLogFileSizeEnabled            0 = max size disabled, 1 = max size enabled
+# PreCacheMaps                     The list of maps to precache at server startup.
+#                                       Value = Map resource name(s) separated by ","
+#                                       Example: Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition
 # Renderer                         Image renderer to use (GD or AGG)
 # ResourcesPath                    Path where the localization resource files are stored
 # SerialNumber                     The MapGuide Server serial number (not used by MapGuide Open Source)
@@ -92,6 +95,7 @@
 MachineIp                          = 127.0.0.1
 MaxLogFileSize                     = 1024
 MaxLogFileSizeEnabled              = 0
+PreCacheMaps                       =
 Renderer                           = AGG
 ResourcesPath                      = Resources/
 SerialNumber                       =



More information about the mapguide-commits mailing list