diff --git a/ZA.CoreService.ESBCertificateManager/Form1.cs b/ZA.CoreService.ESBCertificateManager/Form1.cs index 2606e48..102d70c 100644 --- a/ZA.CoreService.ESBCertificateManager/Form1.cs +++ b/ZA.CoreService.ESBCertificateManager/Form1.cs @@ -1507,10 +1507,11 @@ namespace ZA.CoreService.ESBCertificateManager this, $"Container wirklich neu starten?\n\n" + $"Ziele: {targetNames}\n\n" + - "Wie in der Sonic Management Console:\n" + - "stopcontainer.bat / startcontainer.bat unter SonicHome\\bin\n" + - "(z.B. proalpha-test.DE-Test).\n\n" + - "Keine separate Domain-Console nötig – nur SMC + SonicHome.", + "Laut Sonic/CX-Messenger Doku (Management Application API):\n" + + "IAgentProxy.restart – dieselbe Aktion wie Restart in der SMC.\n" + + $"Verbindung: appsettings ConnectionUrl + User/Pass.\n" + + "Kein stopcontainer.bat nötig.\n\n" + + "Voraussetzung: Java + Client-JARs unter SonicHome\\lib (SMC-Installation).", "ESB neu starten", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); @@ -1830,17 +1831,19 @@ namespace ZA.CoreService.ESBCertificateManager ?? _sonicDiscovery.Connections[0]; string sonicHome = string.IsNullOrWhiteSpace(conn.SonicHome) ? "(leer)" : conn.SonicHome.Trim(); - (bool binOk, string? binErr, _) = new SonicBinRestartExecutor(conn).Probe(); - string binDisplay = binOk ? "stop/startcontainer=ok" : $"bin=fehlt ({binErr})"; + (string home, string? javaExe) = new SonicMfApiExecutor(conn).ResolveRuntimePaths(); + string javaDisplay = string.IsNullOrWhiteSpace(javaExe) + ? "java=? (unter SonicHome/JRE setzen)" + : $"java={javaExe}"; string baseText = - $"{conn.ManagementModeDisplay} | SonicHome={sonicHome} | {binDisplay}"; + $"{conn.ManagementModeDisplay} | SonicHome={home} | {javaDisplay}"; if (!string.IsNullOrWhiteSpace(suffix)) { baseText = $"{suffix} | {baseText}"; } lblSonicStatus.Text = baseText; - lblSonicStatus.ForeColor = binOk ? GreenColor : GoldColor; + lblSonicStatus.ForeColor = string.IsNullOrWhiteSpace(javaExe) ? GoldColor : GreenColor; } private static string TruncateStatus(string? text, int max = 120) diff --git a/ZA.CoreService.ESBCertificateManager/Models/SonicConnection.cs b/ZA.CoreService.ESBCertificateManager/Models/SonicConnection.cs index 2b62753..8f2d30f 100644 --- a/ZA.CoreService.ESBCertificateManager/Models/SonicConnection.cs +++ b/ZA.CoreService.ESBCertificateManager/Models/SonicConnection.cs @@ -44,11 +44,12 @@ public sealed class SonicConnection /// HttpApi = REST (falls vorhanden). /// /// - /// Standard: LocalCmd = wie SMC-Neustart über SonicHome\bin\stopcontainer/startcontainer - /// (gleiche Aktion wie Container in der Management Console stoppen/starten). - /// Optional: MfApi (Java-Client) oder WinRm. + /// Standard: MfApi = Management Application API (wie SMC): + /// JMSConnectorClient + MFProxyFactory.createAgentProxy + IAgentProxy.restart. + /// Laut CX-Messenger-Doku-Index: Docs2017/api/mgmt_api (nicht stopcontainer.bat). + /// LocalCmd nur wenn Server-Scripts existieren (bei reiner SMC oft nicht der Fall). /// - public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.LocalCmd; + public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.MfApi; /// /// Effektiver Modus: bei WinRm und lokalem ConnectionUrl-Host wird LocalCmd erzwungen. @@ -70,8 +71,8 @@ public sealed class SonicConnection ? "LocalCmd (Host lokal erkannt)" : EffectiveManagementMode switch { - SonicManagementMode.LocalCmd => "LocalCmd (SMC stop/startcontainer)", - SonicManagementMode.MfApi => "MfApi (optional, braucht Java)", + SonicManagementMode.MfApi => "MfApi (SMC Management Application API)", + SonicManagementMode.LocalCmd => "LocalCmd (nur wenn stopcontainer.bat existiert)", _ => EffectiveManagementMode.ToString() }; diff --git a/ZA.CoreService.ESBCertificateManager/Services/SonicManagementClient.cs b/ZA.CoreService.ESBCertificateManager/Services/SonicManagementClient.cs index 1c2bcbe..2803aa9 100644 --- a/ZA.CoreService.ESBCertificateManager/Services/SonicManagementClient.cs +++ b/ZA.CoreService.ESBCertificateManager/Services/SonicManagementClient.cs @@ -9,15 +9,14 @@ namespace ZA.CoreService.ESBCertificateManager.Services; /// /// Verwaltet Sonic ESB Container über die Management Console. /// -/// Modus = MfApi (Standard): -/// Offizielle Sonic MF Management Runtime API über ConnectionUrl + SMC-Logins -/// (JMSConnectorClient → MFProxyFactory.createAgentProxy → IAgentProxy.restart). +/// Modus = MfApi (Standard, laut Aurea CX Messenger Doku-Index → Management Application API): +/// Dieselbe Aktion wie „Restart“ in der Sonic Management Console: +/// JMSConnectorClient → MFProxyFactory.createAgentProxy → IAgentProxy.restart +/// über ConnectionUrl + SMC-User/Pass aus appsettings. +/// stopcontainer.bat wird NICHT verwendet (existiert in vielen SMC-only Installationen nicht). /// -/// Modus = WinRm / LocalCmd (optionaler Fallback): -/// PowerShell/CMD stopcontainer/startcontainer (nicht Domain-Manager-nativ). -/// -/// Modus = HttpApi: -/// HTTP REST API mit automatischer Pfad-Erkennung. +/// Modus = LocalCmd / WinRm: nur optional, wenn Server-Scripts vorhanden sind. +/// Modus = HttpApi: REST falls vorhanden. /// public sealed class SonicManagementClient : IDisposable { @@ -346,31 +345,16 @@ public sealed class SonicManagementClient : IDisposable $"Domain={_connection.DomainName}; ConnectionUrl={_connection.ConnectionUrl}\n{output}"); } - // Kein Java / keine Client-JARs → offizieller Doku-Weg über stop/startcontainer.bat - bool softFail = error?.Contains("Java nicht gefunden", StringComparison.OrdinalIgnoreCase) == true - || error?.Contains("Client-JARs", StringComparison.OrdinalIgnoreCase) == true - || error?.Contains("lib", StringComparison.OrdinalIgnoreCase) == true; - - if (softFail) - { - SonicBinRestartExecutor bin = new(_connection); - (bool binOk, string binStatus, string? binDetail) = - await bin.RestartAsync(containerName, cancellationToken); - if (binOk) - { - return (true, binStatus, - $"MfApi nicht nutzbar ({Truncate(error ?? string.Empty, 160)}) – Fallback SonicBin:\n{binDetail}"); - } - - return (false, "Neustart fehlgeschlagen (MfApi→SonicBin)", - $"MfApi: {error}\n\nSonicBin-Fallback: {binDetail}\n" + - $"SonicHome='{_connection.SonicHome}' muss stopcontainer.bat enthalten."); - } - return (false, "Neustart fehlgeschlagen (MfApi)", - $"IAgentProxy.restart für '{containerName}' (Domain '{_connection.DomainName}') " + - $"über {_connection.ConnectionUrl} fehlgeschlagen.\n" + - $"Fehler: {error}\nAusgabe: {output}"); + "Laut Doku (Management Application API / wie SMC-Restart):\n" + + "JMSConnectorClient + MFProxyFactory.createAgentProxy + IAgentProxy.restart\n\n" + + $"Container '{containerName}', Domain '{_connection.DomainName}', URL {_connection.ConnectionUrl}\n" + + $"Fehler: {error}\nAusgabe: {output}\n\n" + + "Benötigt (SMC-Installation):\n" + + $"- SonicHome={_connection.SonicHome} mit lib\\*.jar (mgmt_client / mfcontext / sonic_Client)\n" + + "- Java (JavaHome/JavaPath oder JRE unter SonicHome)\n" + + "- Dieselben ConnectionUrl/User/Pass wie beim SMC-Login\n" + + "Hinweis: stopcontainer.bat wird nicht verwendet (in SMC-only Versionen oft nicht vorhanden)."); } private static async Task IsTcpReachableAsync(string connectionUrl, CancellationToken cancellationToken) diff --git a/ZA.CoreService.ESBCertificateManager/appsettings.json b/ZA.CoreService.ESBCertificateManager/appsettings.json index 74e2ae6..cd43efa 100644 --- a/ZA.CoreService.ESBCertificateManager/appsettings.json +++ b/ZA.CoreService.ESBCertificateManager/appsettings.json @@ -12,7 +12,7 @@ "ConnectionUrl": "tcp://dekun-painwbdet:13070", "Username": "Administrator", "Password": "Administrator", - "ManagementMode": "LocalCmd", + "ManagementMode": "MfApi", "SonicHome": "C:\\DEV\\MQ10.0", "JavaHome": "", "JavaPath": "",