Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
TheSentryMain class currently works by mapping the command name to a Java class that is then dynamically loaded:
String commandName = commandLine.getOptionValue(COMMAND); String commandClazz = COMMANDS.get(commandName); Object command; try { command = Class.forName(commandClazz.trim()).newInstance(); } catch (Exception e) { String msg = "Could not create instance of " + commandClazz + " for command " + commandName; throw new IllegalStateException(msg, e); } if (!(command instanceof Command)) { String msg = "Command " + command.getClass().getName() + " is not an instance of " + Command.class.getName(); throw new IllegalStateException(msg); } ((Command)command).run(commandLine.getArgs()); }
This ia too complicated and causes subtle problems at runtime. Instead it should just create a new instance of appropriate class and call it directly.