Закрыть/Уничтожить соединение JIRA JAVA

#java #sonarqube

Вопрос:

Я новичок в программировании на Java. Ниже приведен код

 public class AddJIRATicketWatcherCommandHandler {

private final JiraFactory jiraFactory;

public void handle(String jiraIssueKey, String watcher) {
    
        log.debug("Adding {} watcher to JIRA issue: {}", watcher, jiraIssueKey);

        final Issue issue = jiraFactory.createClient().getIssueClient().getIssue(jiraIssueKey).claim();
        log.debug("Found JIRA issue: {}", issue.getKey());

        Promise<Void> addWatcherPromise = jiraFactory.createClient().getIssueClient().addWatcher(issue.getWatchers().getSelf() , watcher);
        addWatcherPromise.claim();
 }}




public JiraRestClient createClient() {
    log.debug("Creating JIRA rest client for remote environment");

    URI jiraServerUri = URI.create("");

    jiraServerUri = new URI(StringUtils.removeEnd(jiraConfig.getJiraURI(), "/rest"));

    JiraRestClient restClient = new AsynchronousJiraRestClientFactory().createWithBasicHttpAuthentication(jiraServerUri,
            jiraConfig.getJiraUsername(),
            jiraConfig.getJiraPassword());

    JIRA_LOGGER.info("url=[{}], username=[{}], password=[{}]", jiraServerUri.toString(), jiraConfig.getJiraUsername(), jiraConfig.getJiraPassword());
    log.debug("JIRA rest client created successfully for remote environment");
    return restClient;
}
 

Однако, когда я запустил сонаркубе. Я получил эту ошибку.

Используйте try-with-resources или закройте этот «JiraRestClient» в предложении «finally».

введите описание изображения здесь

Я понимаю, что нужно закрыть соединение, как только это будет сделано. Но я не уверен, как это сделать.

Я попытался реализовать, наконец, с помощью close(). Но результаты по-прежнему показывают ту же ошибку.

введите описание изображения здесь

Комментарии:

1. поместите JiraRestClient в переменную и вызовите close() метод для нее в блоке finally. Или попробуйте использовать ресурсы

2. Я пробовал, попробуйте{ } наконец { RestClient.close(); } , но это не работает

Ответ №1:

Попробуйте с ресурсами:

     public void handle(String jiraIssueKey, String watcher) {
    try (JiraRestClient restClient = jiraFactory.createClient()) {
        log.debug("Adding {} watcher to JIRA issue: {}", watcher, jiraIssueKey);

        final Issue issue = restClient.getIssue(jiraIssueKey).claim();
        log.debug("Found JIRA issue: {}", issue.getKey());

        Promise<Void> addWatcherPromise = restClient.getIssueClient().addWatcher(issue.getWatchers().getSelf() , watcher);
        addWatcherPromise.claim();

    }
}
 

попробуй наконец:

 public void handle(String jiraIssueKey, String watcher) {
    JiraRestClient restClient = jiraFactory.createClient();
    try {
        log.debug("Adding {} watcher to JIRA issue: {}", watcher, jiraIssueKey);

        final Issue issue = restClient.getIssue(jiraIssueKey).claim();
        log.debug("Found JIRA issue: {}", issue.getKey());

        Promise<Void> addWatcherPromise = restClient.getIssueClient().addWatcher(issue.getWatchers().getSelf() , watcher);
        addWatcherPromise.claim();

    } finally {
        restClient.close();
    }
}
 

Комментарии:

1. Привет, Уиллем, спасибо за предложение. Я попытался использовать этот код и запустить его в sonarqube. Однако результат ошибки все равно остается тем же

2. Хм, вам следует заменить другие ваши вызовы на jiraFactory.createClient() переменную RestClient. Так что вы только один раз создадите соединение и закроете его. Но тогда все равно похоже, что сонар жалуется restClient на то, что вы добавили и закрыли… Я не уверен, что в этом плохого, может быть, это исчезнет, если вы измените другие вызовы на jiraFactory.createClient() ? Или сонар сообщает что-то полезное, когда вы нажимаете «почему это проблема»

3. Привет, Виллем, после этого я попробовал первый подход (попробуйте с ресурсами), и, по-видимому, он работает отлично. Спасибо!