Use Management Application API restart; drop stopcontainer.bat as primary.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1507,10 +1507,11 @@ namespace ZA.CoreService.ESBCertificateManager
|
|||||||
this,
|
this,
|
||||||
$"Container wirklich neu starten?\n\n" +
|
$"Container wirklich neu starten?\n\n" +
|
||||||
$"Ziele: {targetNames}\n\n" +
|
$"Ziele: {targetNames}\n\n" +
|
||||||
"Wie in der Sonic Management Console:\n" +
|
"Laut Sonic/CX-Messenger Doku (Management Application API):\n" +
|
||||||
"stopcontainer.bat / startcontainer.bat unter SonicHome\\bin\n" +
|
"IAgentProxy.restart – dieselbe Aktion wie Restart in der SMC.\n" +
|
||||||
"(z.B. proalpha-test.DE-Test).\n\n" +
|
$"Verbindung: appsettings ConnectionUrl + User/Pass.\n" +
|
||||||
"Keine separate Domain-Console nötig – nur SMC + SonicHome.",
|
"Kein stopcontainer.bat nötig.\n\n" +
|
||||||
|
"Voraussetzung: Java + Client-JARs unter SonicHome\\lib (SMC-Installation).",
|
||||||
"ESB neu starten",
|
"ESB neu starten",
|
||||||
MessageBoxButtons.YesNo,
|
MessageBoxButtons.YesNo,
|
||||||
MessageBoxIcon.Warning);
|
MessageBoxIcon.Warning);
|
||||||
@@ -1830,17 +1831,19 @@ namespace ZA.CoreService.ESBCertificateManager
|
|||||||
?? _sonicDiscovery.Connections[0];
|
?? _sonicDiscovery.Connections[0];
|
||||||
|
|
||||||
string sonicHome = string.IsNullOrWhiteSpace(conn.SonicHome) ? "(leer)" : conn.SonicHome.Trim();
|
string sonicHome = string.IsNullOrWhiteSpace(conn.SonicHome) ? "(leer)" : conn.SonicHome.Trim();
|
||||||
(bool binOk, string? binErr, _) = new SonicBinRestartExecutor(conn).Probe();
|
(string home, string? javaExe) = new SonicMfApiExecutor(conn).ResolveRuntimePaths();
|
||||||
string binDisplay = binOk ? "stop/startcontainer=ok" : $"bin=fehlt ({binErr})";
|
string javaDisplay = string.IsNullOrWhiteSpace(javaExe)
|
||||||
|
? "java=? (unter SonicHome/JRE setzen)"
|
||||||
|
: $"java={javaExe}";
|
||||||
string baseText =
|
string baseText =
|
||||||
$"{conn.ManagementModeDisplay} | SonicHome={sonicHome} | {binDisplay}";
|
$"{conn.ManagementModeDisplay} | SonicHome={home} | {javaDisplay}";
|
||||||
if (!string.IsNullOrWhiteSpace(suffix))
|
if (!string.IsNullOrWhiteSpace(suffix))
|
||||||
{
|
{
|
||||||
baseText = $"{suffix} | {baseText}";
|
baseText = $"{suffix} | {baseText}";
|
||||||
}
|
}
|
||||||
|
|
||||||
lblSonicStatus.Text = 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)
|
private static string TruncateStatus(string? text, int max = 120)
|
||||||
|
|||||||
@@ -44,11 +44,12 @@ public sealed class SonicConnection
|
|||||||
/// HttpApi = REST (falls vorhanden).
|
/// HttpApi = REST (falls vorhanden).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Standard: LocalCmd = wie SMC-Neustart über SonicHome\bin\stopcontainer/startcontainer
|
/// Standard: MfApi = Management Application API (wie SMC):
|
||||||
/// (gleiche Aktion wie Container in der Management Console stoppen/starten).
|
/// JMSConnectorClient + MFProxyFactory.createAgentProxy + IAgentProxy.restart.
|
||||||
/// Optional: MfApi (Java-Client) oder WinRm.
|
/// 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).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.LocalCmd;
|
public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.MfApi;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Effektiver Modus: bei WinRm und lokalem ConnectionUrl-Host wird LocalCmd erzwungen.
|
/// Effektiver Modus: bei WinRm und lokalem ConnectionUrl-Host wird LocalCmd erzwungen.
|
||||||
@@ -70,8 +71,8 @@ public sealed class SonicConnection
|
|||||||
? "LocalCmd (Host lokal erkannt)"
|
? "LocalCmd (Host lokal erkannt)"
|
||||||
: EffectiveManagementMode switch
|
: EffectiveManagementMode switch
|
||||||
{
|
{
|
||||||
SonicManagementMode.LocalCmd => "LocalCmd (SMC stop/startcontainer)",
|
SonicManagementMode.MfApi => "MfApi (SMC Management Application API)",
|
||||||
SonicManagementMode.MfApi => "MfApi (optional, braucht Java)",
|
SonicManagementMode.LocalCmd => "LocalCmd (nur wenn stopcontainer.bat existiert)",
|
||||||
_ => EffectiveManagementMode.ToString()
|
_ => EffectiveManagementMode.ToString()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,15 +9,14 @@ namespace ZA.CoreService.ESBCertificateManager.Services;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Verwaltet Sonic ESB Container über die Management Console.
|
/// Verwaltet Sonic ESB Container über die Management Console.
|
||||||
///
|
///
|
||||||
/// Modus = MfApi (Standard):
|
/// Modus = MfApi (Standard, laut Aurea CX Messenger Doku-Index → Management Application API):
|
||||||
/// Offizielle Sonic MF Management Runtime API über ConnectionUrl + SMC-Logins
|
/// Dieselbe Aktion wie „Restart“ in der Sonic Management Console:
|
||||||
/// (JMSConnectorClient → MFProxyFactory.createAgentProxy → IAgentProxy.restart).
|
/// 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):
|
/// Modus = LocalCmd / WinRm: nur optional, wenn Server-Scripts vorhanden sind.
|
||||||
/// PowerShell/CMD stopcontainer/startcontainer (nicht Domain-Manager-nativ).
|
/// Modus = HttpApi: REST falls vorhanden.
|
||||||
///
|
|
||||||
/// Modus = HttpApi:
|
|
||||||
/// HTTP REST API mit automatischer Pfad-Erkennung.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class SonicManagementClient : IDisposable
|
public sealed class SonicManagementClient : IDisposable
|
||||||
{
|
{
|
||||||
@@ -346,31 +345,16 @@ public sealed class SonicManagementClient : IDisposable
|
|||||||
$"Domain={_connection.DomainName}; ConnectionUrl={_connection.ConnectionUrl}\n{output}");
|
$"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)",
|
return (false, "Neustart fehlgeschlagen (MfApi)",
|
||||||
$"IAgentProxy.restart für '{containerName}' (Domain '{_connection.DomainName}') " +
|
"Laut Doku (Management Application API / wie SMC-Restart):\n" +
|
||||||
$"über {_connection.ConnectionUrl} fehlgeschlagen.\n" +
|
"JMSConnectorClient + MFProxyFactory.createAgentProxy + IAgentProxy.restart\n\n" +
|
||||||
$"Fehler: {error}\nAusgabe: {output}");
|
$"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<bool> IsTcpReachableAsync(string connectionUrl, CancellationToken cancellationToken)
|
private static async Task<bool> IsTcpReachableAsync(string connectionUrl, CancellationToken cancellationToken)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"ConnectionUrl": "tcp://dekun-painwbdet:13070",
|
"ConnectionUrl": "tcp://dekun-painwbdet:13070",
|
||||||
"Username": "Administrator",
|
"Username": "Administrator",
|
||||||
"Password": "Administrator",
|
"Password": "Administrator",
|
||||||
"ManagementMode": "LocalCmd",
|
"ManagementMode": "MfApi",
|
||||||
"SonicHome": "C:\\DEV\\MQ10.0",
|
"SonicHome": "C:\\DEV\\MQ10.0",
|
||||||
"JavaHome": "",
|
"JavaHome": "",
|
||||||
"JavaPath": "",
|
"JavaPath": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user