Fix MfApi restart invoke by passing empty param arrays instead of null.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-29 09:41:23 +02:00
co-authored by Cursor
parent 38fa04b540
commit a5557b44fa
4 changed files with 44 additions and 12 deletions
@@ -15,7 +15,7 @@ import javax.management.ObjectName;
public final class SonicMfContainerTool
{
public static final String TOOL_VERSION =
"2026-07-29-validate-restart";
"2026-07-29-restart-empty-params";
public static void main(String[] args)
{
@@ -251,21 +251,32 @@ public final class SonicMfContainerTool
info("ObjectName=" + objectName);
StringBuffer attempts = new StringBuffer();
String[] operations = new String[]
// 1) restart (bevorzugt)
// 2) stop + start (Fallback; manche Agenten haben kein restart)
String[][] plans = new String[][]
{
"stop",
"restart"
{ "restart" },
{ "stop", "start" }
};
for (int index = 0; index < operations.length; index++)
for (int planIndex = 0; planIndex < plans.length; planIndex++)
{
String operation = operations[index];
String[] operations = plans[planIndex];
try
{
for (int index = 0; index < operations.length; index++)
{
String operation = operations[index];
info("Trying MBean.invoke(" + operation + ")");
invokeNoArgs(connector, objectName, operation);
okRestart("MBean." + operation, shortName, domain);
}
okRestart(
"MBean." + joinOps(operations),
shortName,
domain);
return;
}
catch (Throwable throwable)
@@ -273,7 +284,7 @@ public final class SonicMfContainerTool
Throwable root = rootOf(throwable);
String line =
"MBean."
+ operation
+ joinOps(operations)
+ " => "
+ root.getClass().getName()
+ ": "
@@ -288,6 +299,23 @@ public final class SonicMfContainerTool
"Neustart fehlgeschlagen:\n" + attempts.toString());
}
private static String joinOps(String[] operations)
{
StringBuffer buffer = new StringBuffer();
for (int index = 0; index < operations.length; index++)
{
if (index > 0)
{
buffer.append('+');
}
buffer.append(operations[index]);
}
return buffer.toString();
}
private static void invokeNoArgs(
Object connector,
ObjectName objectName,
@@ -312,14 +340,18 @@ public final class SonicMfContainerTool
"invoke(...) wurde nicht gefunden.");
}
// Sonic JMSConnectorClient verlangt leere Arrays, nicht null.
Object[] params = new Object[0];
String[] signature = new String[0];
invokeMethod.invoke(
connector,
new Object[]
{
objectName,
operation,
null,
null
params,
signature
});
}