Announcement

Collapse
No announcement yet.

Midas3 - PoolManager-Beispiel threadsicher?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Midas3 - PoolManager-Beispiel threadsicher?

    Hallo,

    wir planen einen Midas-Server als MultiInstance-MultiThread- oder als PoolManager-Server zu entwickeln.

    Im Buch von A. Kosch wurde für Delphi4 für beide Server die TThreadedClassFactory verwendet, auch das Pooler-Beispiel von Delphi4 benutzt diese Klasse.

    In Delphi5 ist die zugehörige Unit ThrddCF.pas nicht mehr enthalten, im Pooler-Beispiel wird einfach die TAutoObjectFactory benutzt.

    Frage: Ist in Delphi5 schon TAutoObject threadsicher?

    Vielen Dank!

    Karsten.

  • #2
    Hallo,

    in Delphi 4 war <b>TThreadedClassFactory</b> nur im Demos-Verzeichnisbaum zu finden - die Klasse war also nicht "offiziell" ein Bestandteil von Delphi 4. Diese ClassFactory konnte jede angeforderte Objekt-Instanz in einem eigenen Thread ausführen.

    Mit Delphi 5 ist nun <b>TComponentFactory</b> ein offizieller Bestandteil. Das bedeutet, das immer dann, wenn <b>tmApartment</b> für das Threading Model der TComponentFactory definiert wird, diese Klasse automatisch einen neuen Thread abspaltet (in Delphi 4 hat dieser Eintrag nur den Registry-Eintrag für das Apartment Model gesetzt).

    Somit ist TThreadedClassFactory in Delphi 5 überflüssig (aber noch verwendbar, wenn ein Projekt in beiden Delphi-Versionen bearbeitet werden soll).

    Und das Pooler-Demo von Delphi 5 verwendet TComponentFactory, so dass auch in diesem Beispiel TThreadedClassFactory nicht mehr benötigt wird:
    <pre>
    unit SrvrDM;

    {
    This is the Remote Data Module (RDM) that is going to be pooled.
    The differences between this RDM and a regular RDM are as follows;
    1) In order to share RDMs the client must be stateless. This means that the
    all calls that come into the server, must not rely on any informatin passed
    in previous calls.
    2) The RDMs need to run in their own thread which is why the factory
    constructor is specifying tmApartment as the threading model. tmFree or
    tmBoth could also be used if the server is written to support Free threading.
    3) This class is an internal accesible class only and is not registered in the
    registry. All access to this object is done from the pooler object. If
    you look in the Type Library you will see 2 different CoClasses for this
    project. One is for this class and one is for the Pooler.
    }
    ...
    ...
    ...
    initialization
    RDMFactory := <b>TComponentFactory.Create</b>(ComServer, TPooledRDM,
    Class_PooledRDM, ciInternal, <b>tmApartment</b>);
    </pre>
    &#10

    Comment


    • #3
      Hallo und vielen Dank für die Antwort!

      1. Noch kurz zum Verständnis: In Delphi5 fallen demnach der MultiInstance-Server und der MultiInstance-Multithread-Server zusammen, da schon der MultiInstance-Server automatisch Threads benutzt (bei tmApartment).

      2. Der Schwachpunkt bei TThreadedClassFactory hinsichtlich Win95/NT3.5 war ja die Verwendung von InterlockedIncrement / InterlockedDecrement. Wie verhält sich hier nun TComponentFactory in Delphi5? Mir ist aufgefallen, das auch TComObject diese Funtionen benutzt

      Comment


      • #4
        Hallo,

        zur ersten Frage: Ja (siehe unten). <br>
        zur zweiten Frage: Windows 95 ist <b>definitiv</b> keine Plattform für Server jeglicher Art ;-)

        Anmerkung zur ersten Frage: <br>
        Ironischerweise kommen gerade in dem Moment, wo TComponentFactory zur Verfügung steht, die EXE-Server außer Mode. Heute würde ich nur noch In-Process-Server (also DLLs) im <b>MTS</b> oder <b>COM+</b> laufen lassen - denn hier übernimmt das Betriebssystem die Skalierung in Form der abgespalteten Threads. Die DCOM-Server im EXE-Format <b>ohne</b> interaktiven Benutzeroberfläche gehören inzwischen zu einer aussterbenden Gattung. Nicht ohne Grund hat Borland mit <b>MIDAS 3</b> den internen Aufbau gründlich über den Haufen geworfen, damit MIDAS-Server auch als <b>zustandslose</b> Objekte im MTS (COM+) laufen.

        &#10

        Comment

        Working...
        X