Ответы пользователя по тегу Java
  • Как работает аннотация @Inject?

    eugenius_nsk
    @eugenius_nsk
    1. Аннотация @Inject относится к CDI и управляется им (референсная реализация — Weld).
    2. Любой dependency injection фреймворк требует управления бинами через него, соответственно создавать объекты через new в общем случае нельзя. Если вам требуется экземпляр Controller-а — создавайте его так же, через @Inject.
    Ответ написан
    1 комментарий
  • Необычная сигнатура метода java.util.ArrayList.toArray(T[])

    eugenius_nsk
    @eugenius_nsk
    Вот неплохое введение в generic-и — www.rsdn.ru/article/java/genericsinjava.xml
    Ответ написан
    Комментировать
  • Как указать Hibernate, чтоб он показывал, что он подставляет вместо параметров '?'

    eugenius_nsk
    @eugenius_nsk
    Нужно настроить логгирование, включив org.hibernate.type на уровень trace. Для log4j это делается так: log4j.logger.org.hibernate.type=trace
    Ответ написан
    Комментировать
  • Как сделать чтобы порушенные билды не мешали коллегам?

    eugenius_nsk
    @eugenius_nsk
    Навскидку сразу видно несколько проблем.

    Во-первых, никакие тесты не должны изменять после себя базу. Если это интеграционные или приёмочные тесты, то их, например, можно проводить в транзакции, откатываемой после завершения каждого теста (кроме того, можно использовать in-memory DB — это заодно и ускорит выполнение тестов). А если это юнит-тесты, то они вообще не должны лезть в базу — надо переписывать код таким образом, чтобы юнит-тестирование не требовало обращений к БД (это, кстати, как правило и общее качество кода улучшает и делает код легче переиспользуемым).

    Во-вторых, когда тесты выполняются часами — это верный симптом, что в консерватории что-то не так. Попробуйте отвязать тесты от БД — это должно сильно их ускорить. Если не поможет — разделите тесты по категориям и на каждый коммит прогоняйте только юнит-тесты, а интеграционные и приёмочные выполняйте раз в два-три часа (в зависимости от длительности их исполнения).

    Кроме того, если все билды выполняются на одной машине, то их надо выполнять последовательно, а не параллельно — это уменьшает накладные расходы и общее время сборок/тестирования. А вот если вы выполняете сборки на разных машинах (например, TeamCity это умеет) — тогда да, можно запускать и параллельно, чтобы вычислительный ресурс не простаивал :-)
    Ответ написан
    Комментировать