[ https://issues.apache.org/jira/browse/SENTRY-1572?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16257608#comment-16257608 ]
Na Li commented on SENTRY-1572: ------------------------------- [~xinrantinney] I think the reason the code load class is to avoid dependency loop. If we want to load the class directly, you may consider to create a new project for SentryMain, and let it depend on all other sentry projects. In this way, you can avoid dependency loop. > SentryMain() shouldn't dynamically load tool class > -------------------------------------------------- > > Key: SENTRY-1572 > URL: https://issues.apache.org/jira/browse/SENTRY-1572 > Project: Sentry > Issue Type: Improvement > Components: Sentry > Reporter: Alexander Kolbasov > Assignee: Xinran Tinney > Labels: bite-sized, newbie > > TheSentryMain class currently works by mapping the command name to a Java > class that is then dynamically loaded: > {code} > 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()); > } > {code} > 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. -- This message was sent by Atlassian JIRA (v6.4.14#64029)