Connection-Lifetime, Entladen von Konnektoren und globale Konfiguration

  • Beitrag
    Avatar-Foto
    Lecos
    Teilnehmer
      Hallo,
      ich hätte einigen Fragen zur Connector SDK. Ich hoffe die Zusammenfassung der verschiedenen Anliegen ist soweit okay.
      Einige Themen gehen möglicherweise in die Richtung „Feature Request“, andere eventuell Bugs – ich bin mir leider unsicher, was genau im SDK GitHub Repository geklärt werden soll.

      1. Wie soll mit kurzlebigen Connections (explizit ConsumerConnection) umgegangen werden?

      In einem neuen Konnektor, den ich derzeit entwickle, muss ich aufgrund der zugrundeliegenden nativen Bibliothek auf Instanzen aus einem Pool zugreifen. Das heißt, im Verbindungsaufbau beziehe ich mir eine Instanz aus dem Pool, führe mit dieser meine Interaktion aus und gebe die Instanz beim schließen in den Pool zurück. OutboundConnections / ConsumerConnections werden standardmäßig nicht (sofort) geschlossen und wiederverwendet. Das hat zum Effekt, dass die Instanz nicht in den Pool zurückgegeben wird und somit für keine weitere Konnektor-Instanz zur Verfügung steht (der Pool gilt global für alle Konnektoren).
      Wäre der präferierte Ansatz:
      • dass die Connection selber nach dem Ausführen der Interaktion sich selbst schließt und somit beim nächsten Aufruf von Transconnect bereinigt wird, oder
      • dass das Beziehen von den Verbindungen erst in der #execute-Methode erfolgt
      Der Vorteil der zweiten Methode wäre, dass weniger Connection-Instanzen instantiiert werden müssen und bestehende wiederverwendet werden können. Der Nachteil wäre, dass der tatsächliche Verbindungsaufbau nicht mehr in der #connect-Methode stattfindet und somit bspw. Verbindungstests nicht mehr aussagekräftig sind. Ich denke, ich würde mich vorläufig für die zweite Methode entscheiden.

      2. Wie kann auf das entladen von Konnektortypen reagiert werden?

      Der oben erwähnten Pool steht als statische Variable in der Connection zur Verfügung und wird erstellt, sobald die erste Konnektor-Instanz instantiiert wird. Das herunterfahren des Pools (wird zum entladen von Instanzen und freigeben von Ressourcen benötigt) ist derzeit in einem Shutdown Hook (Runtime.getRuntime().addShutdownHook(Thread)) untergebracht. In anbetracht dessen, dass Konnektoren aber scheinbar auch Hot-Reload fähig sind (theoretisch – bei uns kommt es hierbei zu Problemen mit Extensions) denke ich nicht, dass das eine verlässliche Methode ist. Das würde dazu führen, dass die zugrundeliegende C-Bibliothek ihre Daten nicht ordentlich bereinigt.
      Gibt es hierfür irgendeine Schnittstelle in welche ich mich hineinhängen kann um sauber zu entladen? Wäre es möglich, dass IConnector die close-Methode von AutoClosable implementiert, welche vom zugrundeliegenden Adapter aufgerufen wird? Somit könnte unabhängig der Connection aufgeräumt werden. Außer natürlich, es gibt einen alternativen Weg.

      3. Ist perspektivisch eine Connection-unabhängige Konfiguration für Konnektoren geplant?

      Es gibt den Connector betreffend Einstellungen, welche Global gelten (bspw. Pool-Größe, Log-Pfad für die C-Bibliothek). Zurzeit verwende ich die Einstellungen die die erste Connection bereitstellt (und perspektivisch Context#getTempDir, sobald wir TRANSCONNECT aktualisiert haben), in der Annahme, dass alle Konnektoren diese Punkte identisch eingestellt haben. Wenn aber bspw. die Pool-Größe angepasst werden soll, muss entweder jeder Connector eingestellt werden, oder der Wert wird statisch im Code definiert und die WAR muss neu deployt werden (ist möglicherweise bequem wenn der Hot-Reload funktioniert – aber auch keine wirklich schöne / schnelle Lösung).
      Ich danke Ihnen vielmals für Ihre Unterstützung.
      Mit freundlichen Grüßen
      Pierre Maurice Schwang
      Lecos GmbH
      • Dieses Thema wurde vor 1 Tag, 4 Stunden von Avatar-FotoLecos geändert.

      Hochgeladene Dateien sind nur für angemeldete und verifizierte Nutzer sichtbar.

      0
      0
    • Du musst angemeldet sein, um auf dieses Thema antworten zu können.