private void executeDynamicCommand(String commandName, Connection conn, Parameter p) {
        assert commandName != null && !commandName.contains(" ");
        final String fqcn;
        if (commandName.indexOf('.') > 0) {
            fqcn = commandName;
        } else {
            fqcn = "net.argius.stew.command."
                   + commandName.substring(0, 1).toUpperCase()
                   + commandName.substring(1).toLowerCase();
        }
        Class<? extends Command> c;
        try {
            c = DynamicLoader.loadClass(fqcn);
        } catch (DynamicLoadingException ex) {
            c = Command.isSelect(p.asString()) ? Select.class : UpdateAndOthers.class;
        }
        Command command = DynamicLoader.newInstance(c);
        try {
            Connector connector = env.getCurrentConnector();
            if (connector.isReadOnly() && !command.isReadOnly()) {
                outputMessage("e.readonly");
                return;
            }
            command.setEnvironment(env);
            log.info("command: %s start", command);
            log.debug(p);
            command.initialize();
            command.execute(conn, p);
        } finally {
            command.close();
        }
        log.info("command: %s end", command);
    }