[mapguide-internals] Strange multithreading issue / slow dbxml access

Andreas Morf a.morf at fkl.ch
Fri May 20 05:44:12 EDT 2011


Hi all,

While customizing my runtime map within java-webtier I am using following
code seqence: 
---
resourceService.SetResource(newLayerResId, layerDefContent, null);
layer.SetLayerDefinition(newLayerResId, resourceService);
layer.ForceRefresh();
---

Using this code in a sequential manner there is no problem but it is quite
slow because the map building process allways has to wait for SetResource
(see below).
Trying to parallelize and outsourcing execution of the code sequence to
different threads (ThreadPoolExecutor) leads to following problem:

resourceService.SetResource(newLayerResId, layerDefContent, null); -->
execution ok in different threads
layer.SetLayerDefinition(newLayerResId, resourceService); --> allways throws
MgUnclassifiedException

I was able to debug in Layerbase.cpp until the last line of
MgLayerBase::SetLayerDefinition
--
m_layers->GetMap()->OnLayerDefinitionChanged(this);
--
which always throwed that Exception but i was not able to determine why...


..and again, with parallel resourceService.SetResource there are these
annoying

> (8096) An exception occurred in DB XML component.
> Please try your operation later as the repository was busy.

coming up again..

Besides, storing about 40 layer-xml to dbxml always takes around 3 seconds -
my opinion: this is really slow  (on a quite fast XEON machine)
Any hints for optimisation places?

So I'm stuck with tuning mgserver on a multi-processor machine again.

Andreas







More information about the mapguide-internals mailing list