• Есть ли аналог лукап-полей в ORM hibernate / java?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Если под lookup-полем понимается связанная сущность, то смотри аннотации @ManyToOne или @OneToOne. Что-то вроде:
    @Entity 
    public class City {
        private String name;
    }
    
    @Entity 
    public class Person {
        @ManyToOne
        private City city;
    }
    
    // и где-то:
    person.getCity().getName();
    Ответ написан
    Комментировать
  • Как правильно подготовиться к собеседованию на Java Junior Developer'а?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Никакого Swing и никаких настольных разработок - в мире Java это очень слабо востребованное направление. "Изучаем Java" - книга хорошая, но её мало для начала серьёзной разработки. Она скорее полезна для подготовки к прочтению книг Шилдта, Хорстмана и Гослинга. "Философия Java" очень доступно рассказывает о Java, но только о 6 версии.
    Для подготовки к собеседованию можно почитать книги для подготовки к экзаменам OCAJP/OCPJP (например), всё основное и самое важное там есть.
    Так же рекомендую ознакомиться с азами веб-профиля Java EE (сервлеты, JSP).

    JavaRush в целом, если смириться с косяками в структуре лекций, очень хорошо подходит.
    Ответ написан
    3 комментария
  • Обратная связь Hibernate - null?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Что бы получать наборы связанных объектов (@OneToMany и @ManyToMany) нужно указать fetch=FetchType.EAGER в аннотации связи. Это удобно, но есть подводный камень - количество выполняемых запросов к БД увеличится, ровно как и объёмы передаваемых данных.
    Ответ написан
    6 комментариев
  • Как правильно разработать архитектуру объекта и обслуживающих его сервисов?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Второй вариант с точки зрения ООП однозначно правильнее. Ответ на вопрос: да, правильно.

    В первом случае главный подводный камень будет в том, что тебе нужно будет в каждую сущность внедрять сервис.
    Вот в этой книге всё достаточно доступно описано.
    Ответ написан
    2 комментария
  • Каков минимальный набор инструментов JAVA для работы с REST API сервисом?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Возможно ли обойтись без контроллеров?

    Можно, но с ними проще и правильнее. И вообще, какие аргументы против?

    Какие библиотеки следует использовать?

    Java EE (Jersey например) или Spring Web

    Как это реализовать максимально просто?
    На Spring:
    @RestController
    @RequestMapping("/books")
    public class BooksService {
        @Autowired
        private BooksRepository booksRepository;
    
        /**
         *  Список книг
         */
        @RequestMapping
        public ResponseEntity list() {
            return ResponseEntity.ok(booksRepository.findAll());
        }
    
        /**
         *  Добавление новой книги
         */
        @RequestMapping(method = RequestMethod.POST)
        public ResponseEntity create(@RequestBody Book book) {
            return ResponseEntity.ok(booksRepository.save(book));
        }
    
        /**
         *  Получение существующей книги
         */
        @RequestMapping("/{id}")
        public ResponseEntity get(@PathVariable String id) {
            if (bookRepository.exists(id)) {
                return ResponseEntity.ok(booksRepository.save(book));
            }
    
            return ResponseEntity.notFound().build();
        }
    }


    В данном случае используется ещё Spring Data JPA.
    Ответ написан
    Комментировать
  • Что использовать для разработки такого вида приложения?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Что подразумевается под "потоковой обработкой тяжелых задач"?
    С учётом необходимости выставлять REST-сервисы, веб-сокеты и страницы, можно предложить два основных варианта: Java EE 7 или Spring. И там и там есть всё необходимое для указанных задач. Можно обойтись и без WildFly (и вообще без сервера приложений).
    Ответ написан
    Комментировать
  • Есть ли простейшая библиотека на Java для БД?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Совсем примитивная - чистый JDBC, если немного поумнее, то Spring JDBC с её JdbcTemplate. Вот тут я описывал основы работы с ней.
    Ответ написан
    Комментировать
  • Где можно на примере посмотреть связку spring, mongodb, hibernate?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Вот здесь описывается то, что ты хочешь сделать. В целом это можно использовать, но по-моему использование Spring Data MongoDB выглядит удобнее.

    Ну, а насчёт конфигураций в XML или Java - кому как нравится.

    UPD java-конфиг Mongo
    @Configuration
    @EnableMongoRepositories
    public class MongoConfiguration extends AbstractMongoConfiguration {
    
        @Override
        protected String getDatabaseName() {
            return "dataBaseName";
        }
    
        @Override
        public Mongo mongo() throws Exception {
            return new MongoClient("127.0.0.1", 27017);
        }
    
        @Override
        protected String getMappingBasePackage() {
            return "foo.bar.domain";
        }
    }
    Ответ написан
    7 комментариев
  • Что изучать дальше?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Если интересует литература по разработке в целом, то могу порекомендовать книги Чистый код и Объектно-ориентированный анализ и проектирование. И неплохо было бы определиться - в каком направлении ты хочешь развиваться - в направлении мобильной разработки, веб-разработки или может даже интерпрайз-разработки.
    Ответ написан
    Комментировать
  • Как работет взаимосвязь между классами в Spring Boot Application?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Аннотация @Service указывает Spring, что нужно создать экземпляр данного класса и положить его в контекст приложения.

    Аннотация @Autowired указывает, что нужно внедрить зависимость в создаваемый экземпляр класса. Подходящая зависимость выбирается по идентификатору, имени или по классу (или его родителю) внедряемой зависимости.
    Ответ написан
    Комментировать
  • Как устроено типовое Java EE приложение?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Если интересно почитать про архитектуру, то советую почитать Изучаем Java EE 7 Э. Гонсалвес и официальную документацию.

    Java EE определяет большое количество спецификаций для работы с различными технологиями, например для работы с БД - спецификация JPA (Java Persistence API), которая описывает стандартный ORM-фреймворк.

    В Java EE приложение не обязательно должно быть веб-приложением. Классическое JEE-приложение разворачивается в сервере приложений, при помощи которого можно управлять жизненным циклом и настройками приложений. Сервер приложений сам находит классы, инстансы которых нужно создать. Application-класс для таких приложений не предусмотрен.

    Но в последнее время, в виду популярности микросервисов, появилась возможность разрабатывать standalone-приложения на Java EE, вот в таких микросервисах нужен Application-класс.

    Кроме Java EE для интерпрайза в Java-мире существует Spring.io с собственной экосистемой. Приложение на Spring может быть как обычным веб-приложением (с веб-профилем или с полным профилем Java EE), так и микросервисом с Application-классом (обычно Spring Boot, но можно и без него).

    Но в любом случае вывод следующий: если приложение разворачивается сервере приложений или сервлет-контейнере, то сервер сам создаёт контекст приложения, который управляет жизненным циклом компонентов приложения. Если же приложение самостоятельное, то разработчик должен сам создать и запустить в Application-классе контекст приложения.
    Ответ написан
    Комментировать
  • PGPoolingDataSource возможно ли автоматические освобожние коннектов?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Насколько я знаю - нет, готового механизма нет в PGPoolingDataSource. И вообще, он официально не рекомендуется к использованию. Если пул соединений не нужен, то лучше использовать PGSimpleDataSource, если же пул нужен, то нужно использовать HikariCP, C3P0 или хотя бы DBCP.
    Ответ написан
    Комментировать
  • Как правильно использовать DTO паттерн?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    В данном случае будет не DTO, а Value Object, который в Spring WebMVC помечается аннотацией @ModelAttribute.
    Использование Value Object вместо набора параметров запроса однозначно лучше и удобнее.

    Почитать про это можно тут
    Ответ написан
    Комментировать
  • Имеются ли какие либо говые возможности чтобы подружить J2EE приложения и ADFS?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Ну, можно использовать JNDI/LDAP для доступа к AD. Как вариант, есть возможность сконфигурировать Spring LDAP для работы с AD.
    Ответ написан
    Комментировать
  • Как получить массив из Spring при загрузке JSP страницы?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Вот это:
    <c:set var="array" value="${pageContext.request.contextPath}/spring_link/getarray"/>


    создаёт в JSP переменную array с строкой равной ${pageContext.request.contextPath}/spring_link/getarray

    Скажу даже больше - из представления, возвращённым не контроллером Spring WebMVC, невозможно получить данные из контроллеров (если точнее, то можно, но это костыли). В стандартном WebMVC контроллер решает, какое представление отдавать и какие данные передавать представлению через модели. Это тебе не JSF/CDI, хотя если сильно хочется, то можно скрестить JSF/CDI со Spring, но это тоже извращения.

    Правильный вариант один - контроллер возвращающий нужное представление и передающий в него нужные данные.

    P.S.: зачем решать задачи способами, противоречащими устоявшимся концепциям?
    Ответ написан
    Комментировать
  • Стоит ли изучать Java после прекращения разработки EE?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Для начала: Java != Java EE. Прекращение разработки Java EE со стороны Oracle никак не повлияет на жизнь самого языка программирования. Есть вообще сомнения, что Oracle решится на этот шаг, т.к. у них самих большое количество проектов именно на Java EE разработано.

    Плюс стоит помнить, что Java EE - это набор спецификаций, а не конкретная реализация. Java EE состоит из кучи JSR, которые обсуждаются и принимаются JCP (Java Community Process), то есть сообществом, в котором кроме самих Oracle есть Red Hat, IBM, Spring, Apache и многие другие. Oracle может просто передать управление Java EE сообществу. И да, новые JSR выходят вне зависимости от Java EE.

    И стоит помнить, что на Java EE интерпрайз не кончается, ведь есть ещё Spring, который развивается гораздо быстрее и занимает существенную нишу на рынке.

    Так что, учитывая сказанное выше, учить однозначно стоит, если есть желание.
    Ответ написан
    Комментировать
  • Почему выводить логи через System.out.print плохо?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Потому что использование логгеров, в отличии от System.out, позволяет менять уровни логгирования или даже отключать его на лету. А в целом какой-то серьёзной разницы нет.
    Ответ написан
    Комментировать
  • Что не так с внедрением зависимостей?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Во-первых:
    @Autowired
        private static GreetingServiceImpl greetingService;

    у тебя greetingService является статическим. Внедрение зависимостей при помощи @Autowired работает не со свойствами/методами классов, а со свойствами/методами объектов.

    Во-вторых класс Starter не является управляемым, соответственно, внедрение зависимости в объект этого класса невозможно. Да и объект этого класса ты не создаёшь.

    Что бы твой пример заработал, в методе main класса Starter после создания контекста получи нужный компонент из контекста и вызови метод. Получится что-то вроде:
    public static void main(String[] args) {
            logger.info("Starting configuration...");
            ApplicationContext context = new AnnotationConfigApplicationContext(LessonsConfiguration.class);
            logger.info(
                    context.getBean(GreetingServiceImpl.class).sayGreeting()
            );
        }


    И ещё у тебя на классе GreetingServiceImpl есть аннотация @Component, но при этом ты ещё и в конфигурации создаёшь компонент этого же класса. По-хорошему либо убери @Component, либо удали метод
    @Bean
        public GreetingServiceImpl greetingService(){
            return new GreetingServiceImpl();
        }


    Про внедрение зависимостей в Spring Framework я вкратце писал тут.
    Ответ написан
    Комментировать
  • Настольная книга для изучения java?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Если совсем с нуля, то Кэти Сьерра и Берт Бейтс "Изучаем Java" - идеальная книга. Там вся серия идеально подходит для начала изучения описываемых технологий. Так же хорошие книги: Java 8 руководство для начинающих Г. Шилдта и Java SE 8 Базовый Курс К. Хорстмана, но они с нуля не такие простые для понимания.
    Ответ написан
  • Почему сервлет - фильтр аутентификации на форме ввода имени и пароля срезает CSS, JS, картинки и т.д.?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    А на какой путь вешается фильтр? И какие пути у статических ресурсов? Скорее всего пути статических ресурсов попадают под действие фильтра, который редиректит запросы на index.jsp.
    Ответ написан
    Комментировать