• Июля 21, 2019, 04:02:54 am
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: Вебинар о выборе IT профессии и руководство для новичков: http://bit.ly/2HG2vFp

Автор Тема: Java Pro 14.05.2019 Vsevolod  (Прочитано 929 раз)

Vex788

  • Пользователи
  • *
  • Сообщений: 12
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #60 : Июля 01, 2019, 09:48:12 pm »
Задание с картинками.
https://github.com/Vex788/spring_mvc2

Vex788

  • Пользователи
  • *
  • Сообщений: 12
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #61 : Июля 02, 2019, 12:28:42 pm »
Задание Архиватор

Archivizer - архиватор.
SpringArchivizer - архиватор с использованием spring.

https://github.com/Vex788/Archivizer

Vadym917

  • Пользователи
  • *
  • Сообщений: 22
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #62 : Июля 03, 2019, 12:25:52 pm »
Задание с банком и операциями
https://github.com/fash10njke/bank

Renata Hl

  • Пользователи
  • *
  • Сообщений: 40
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #63 : Июля 03, 2019, 06:05:40 pm »
Дз "Банк", управление с консоли не прикручивала в этот раз
(Таблицы «Пользователи», «Транзакции», «Счета» и «Курсы валют». Счет бывает 3-х видов: USD, EUR, UAH. Запросы: пополнение счета в нужной валюте, перевод средств с одного счета на другой c конвертацией валюты по курсу + запрос для получения суммарных средств на счету одного пользователя в UAH (расчет по курсу)):

https://github.com/Reni21/BankAppSimple/tree/master/src/main/java/bank/app/simple

PS: Здравствуйте! Как всегда есть вопросы), скажите, пожалуйста, у меня сейчас приложение не потоко безопасно, тк например AccountServise внутри себя дергает несколько dao при выполнении некоторых операций(например transferMoney метод). Собственно вопрос - если я вынесу EntityManager на уровень сервиса и буду передавать его в dao, то спасу ли я этим ситуацию?

ServiceClass{

.....myMethod1(){      // not thread safe
dao1.doSomething
dao2.doSomething
dao1.doSomething
}

.....myMethod2(){      // thread safe?
EntytyManager em = get meneger
em.getTransaction.begin();
try{
dao1.doSomething(em)
dao2.doSomething(em)
dao1.doSomething(em)
} cath(Ex e){
em.getTransaction.rollback();
}
}

На сколько вообще корректно выносить EntityManager из дао, ведь сделав так в одном методе, надо будет во всех поступать аналогично, для единообразия подхода? Понимаю, что с использованием Springa такой вопрос отпадет благодаря @Transactional, но интересно как вот в данном конкретном случае поступать.
И еще, если в entity я использую enum-ы надо ли их собирать в отдельный пакет?
Так же меня интересует, как правильно работать с объетом EntityManager, то что я смогла найти в сети - говорит о том, что без spring-а мы работаем с менеджером по анаогии с Connaction и на один метод запроса из DAO надо доставать новый менеджер из фабрики, но Всеволод говорит, что это не так. Хочу еще ваше мнение узнать и для себя окончательно прояснить этот момент, а то он мне покоя не дает)

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #64 : Июля 04, 2019, 03:04:23 pm »
Vex788
Решение верное

Vadym917
Решение верное

Renata Hl
Добрый день.
Опять же на мое мнение выносить EntityManager из DAO идея все равно так себе, зачем его вытягивать на уровень сервиса? Если сервис может быть использован с хранилищем любого типа, а  EntityManager по сути только из БД ? А вот почему бы не создать ДАО и его реализацию с такими «группирующие « методы (желательно синхронизированные) с содержимым как у вас в варианте номер два. Хотя да вы правы очень довольно быстро эта проблема таки уйдет.
Вопрос по поводу перечислений. Ну мне такие перечисления типа

public enum Currency {
USD, EUR, UAH
}
Не очень нравятся. Мне кажется ( и это опять просто личное мнение), что для просто ты расширения нужно делать таблицу в БД с валютами и классом для отображения, этих значений. Просто если «захаркодить» перечислением, то для внесения изменений в проект понадобятся разработчики а также перекомпиляция, и перезапуск проекта (что может оказаться не дешево), а так просто добавить запись в табличку. Но опять это просто вкусовшина.
И как не странно, я так же считаю что EntityManager достаточно легковесен, и по сути с ним стоит обращатся точно также как и с Connection. Так, что в этом вопросе я с вами солидарен.
А решение у вас весьма даже ничего. Так, что действительно Spring  вас ждет.

Vex788

  • Пользователи
  • *
  • Сообщений: 12
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #65 : Июля 08, 2019, 08:15:17 pm »
Здравствуйте.
Исходник:
https://github.com/Vex788/SpringSecurity/tree/master/SecTest
Создал бд Role и связал с бд CustomUser связь поля roles - manytomany.
При записи объекта пользователя в бд userRepository.save(user) hibernate уходит спать.
Пожалуйста, подскажите где может быть ошибка.



Hibernate:
    select
        role0_.id as col_0_0_
    from
        role role0_
    where
        role0_.name=? limit ?
Hibernate:
    select
        role0_.id as col_0_0_
    from
        role role0_
    where
        role0_.name=? limit ?
Hibernate:
    select
        role0_.id as id1_2_,
        role0_.name as name2_2_
    from
        role role0_
    where
        role0_.name=?
Hibernate:
    select
        customuser0_.id as col_0_0_
    from
        custom_user customuser0_
    where
        customuser0_.login=? limit ?
Hibernate:
    select
        next_val as id_val
    from
        hibernate_sequence for update
           
Hibernate:
    update
        hibernate_sequence
    set
        next_val= ?
    where
        next_val=?
2019-07-08 19:56:38.916  INFO 2000 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-07-08 19:56:38.928 ERROR 2000 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
   at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:782) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:763) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at ua.kiev.prog.Application.main(Application.java:26) ~[classes/:na]
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: ua.kiev.prog.Role; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: ua.kiev.prog.Role
   at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:317) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]
   at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]

Larszz

  • Пользователи
  • *
  • Сообщений: 33
  • Илларион
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #66 : Июля 08, 2019, 10:37:58 pm »
Подскажите, пожалуйста, https://github.com/Larsszz/JavaEE/tree/ClientChat/SecTest проэкт запускается, но не работает. При переходе в браузере на локалхост ругается ""org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application"". Перепробовал пару методов из гугла, ничего не помогло.

Vex788

  • Пользователи
  • *
  • Сообщений: 12
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #67 : Июля 10, 2019, 10:26:34 am »
Решено.
Поле Collection<Role> roles - не инициализировано.

Здравствуйте.
Исходник:
https://github.com/Vex788/SpringSecurity/tree/master/SecTest
Создал бд Role и связал с бд CustomUser связь поля roles - manytomany.
При записи объекта пользователя в бд userRepository.save(user) hibernate уходит спать.
Пожалуйста, подскажите где может быть ошибка.



Hibernate:
    select
        role0_.id as col_0_0_
    from
        role role0_
    where
        role0_.name=? limit ?
Hibernate:
    select
        role0_.id as col_0_0_
    from
        role role0_
    where
        role0_.name=? limit ?
Hibernate:
    select
        role0_.id as id1_2_,
        role0_.name as name2_2_
    from
        role role0_
    where
        role0_.name=?
Hibernate:
    select
        customuser0_.id as col_0_0_
    from
        custom_user customuser0_
    where
        customuser0_.login=? limit ?
Hibernate:
    select
        next_val as id_val
    from
        hibernate_sequence for update
           
Hibernate:
    update
        hibernate_sequence
    set
        next_val= ?
    where
        next_val=?
2019-07-08 19:56:38.916  INFO 2000 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-07-08 19:56:38.928 ERROR 2000 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
   at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:782) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:763) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
   at ua.kiev.prog.Application.main(Application.java:26) ~[classes/:na]
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: ua.kiev.prog.Role; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: ua.kiev.prog.Role
   at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:317) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]
   at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253) ~[spring-orm-5.1.8.RELEASE.jar:5.1.8.RELEASE]

Vex788

  • Пользователи
  • *
  • Сообщений: 12
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #68 : Июля 10, 2019, 10:27:43 am »

Vsevolod

  • CEO
  • Administrator
  • Пользователи
  • *****
  • Сообщений: 1890
    • Просмотр профиля
    • Курсы программирования
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #69 : Июля 11, 2019, 09:00:56 am »
Подскажите, пожалуйста, https://github.com/Larsszz/JavaEE/tree/ClientChat/SecTest проэкт запускается, но не работает. При переходе в браузере на локалхост ругается ""org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application"". Перепробовал пару методов из гугла, ничего не помогло.


Зависимости не обновляли те, что были по умолчанию?
Prog.kiev.ua - курсы Java/Android/QA/Front-End. (044) 232-65-48, (093) 256-51-48, (095) 0-777-300, (096) 0-555-111

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #70 : Июля 11, 2019, 12:42:07 pm »
Vex788

Решение верное

Vex788

  • Пользователи
  • *
  • Сообщений: 12
    • Просмотр профиля
    • E-mail
Re: Java Pro 14.05.2019 Vsevolod
« Ответ #71 : Июля 19, 2019, 06:27:40 pm »
Здравствуйте.
У меня не работает функция TestRestTemplate.withBasicAuth(nickname, password)В конфиге разрешил все ендпоинты (на время теста).
При получении текущего пользователя, получаю anonUser.
От сервера получаю ответ Unauthorized, потому-что getDBUser() == null, а SecurityContextHolder.getContext().getAuthentication().getPrincipal().getUsername() дает anonUser.

Код для теста
@Test
    public void testLogin() {
        CUser user = new CUser(
                "vex788",
                passwordEncoder.encode("testvex"),
                UserRole.ADMIN,
                "testvex@mail.com",
                "0123456789",
                false,
                "123.45.67.89"
        );

        if (userService.addUser(user)) System.out.println("Admin added.");

        TestRestTemplate restTemplate = new TestRestTemplate();
        ResponseEntity<Message> result = restTemplate
                .withBasicAuth("testvex@mail.com","testvex")
                .getForEntity("http://localhost:8080/cabinet/spring_test", Message.class);
        System.out.println(result.getBody().getMessage());
        Assert.assertEquals(HttpStatus.OK, result.getStatusCode());
    }
Код на сервере (пытаюсь получить текущего пользователя) endpoint = /cabinet/spring_test
private CUser getDBUser() {
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        String username;

        if (principal instanceof UserDetails) {
            username = ((UserDetails) principal).getUsername();
        } else {
            username = principal.toString();
        }

        System.out.println(username);
        CUser dbCUser = userService.findByEmail(username);

        return dbCUser;
    }

@GetMapping("/spring_test")
    public ResponseEntity<Message> onSpringTest() {
        System.out.println(userService.findByEmail("testvex@mail.com").getPassword());
        if (getDBUser() != null)
        return new ResponseEntity<>(new Message("/spring_test", "test success"), HttpStatus.OK);
        return new ResponseEntity<>(
                new Message("/spring_test",
                        "Unauthorized."),
                HttpStatus.UNAUTHORIZED);
    }

https://github.com/Vex788/TrackIT