GmailЭта цепочка писем была автоматически переведена: украинский -> русский.Dmytro Sokolov <becomejavasenior(at]gmail.com>

Задание по Java для Петра
Писем: 62
Dmytro Sokolov <becomejavasenior(at]gmail.com>13 мая 2015 г., 7:43
Кому: Yurchyshyn Petro <petro.yurchyshyn.it(at]gmail.com>
Петро доброе утро, вот задание для тебя:

Проект “Социальная Сеть”
  1. Создать web-приложение с использованием Servlet 3.0. Все данные сохраняются в  БД с помощью JDBC.
  2. БД рекомендую выбрать Postgres или Oracle XE (чаще встречаются  в корпоративных проектах)
  3. Обрати внимание на версию Сервлетов. Условие: часть твоих сервелатов должны быть сконфигурирован в web.xml в часть с помощью аннотаций.
  4. Социальная умеет:
    [...]
Начинай делать постепенно, заведи пользователей, затем новости, затем комментарии.
В последствии переведем проект на Spring и Hibernate.
Жду от тебя мыслей по архитектуре.

Для тебя доп задание:
с помощью UML (гугли UML online editor) визуализирй свою базу данных.
Когда сделаешь - увидишь какая это удобная штука. Ты потом по ней сможешь за 5 мин закодить Java Bean классы для таблиц.


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>22 мая 2015 г., 17:14
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>



Меня интересует Ваше мнение по поводу архитектуры и качества кода.






С уважением,
Петр Юрчишин


[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>22 мая 2015 г., 21:31
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Пощелкал твой функционал, не особо работает:
 - друзья у меня в список добавляются (по таблице понял, что нужно подтвердить)
 - могу зайти без регистрации,
 - новости написал, вышел  - зашел - они пропали.
Это не страшно, в будущем исправишь.

Доступ к твоему репозиторий не имею, похоже он приватный, пишет:
You do not have access to this repository.

По таблицам:
- User - пароль пока не хранишь? зачем спрашиваешь при входе?
- Comments - как узнать какой пользователь оставил комментарий? Давай для лайков еще одну таблицы, что бы можно было видеть кто лайкал, а не только кол-во

Жду от тебя репозиторий. Проверь что бы он был открыт.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

22 мая 2015, в 17:14, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 мая 2015 г., 22:33
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Добрый день Дмитрий.

Предоставил Вам доступ к репозитория https://bitbucket.org/funSkill/socnetwork

Спасибо за замечание. Буду исправлять.

Интересует Ваше мнение по поводу качества кода.




С уважением,
Петр Юрчишин









Dmytro Sokolov <becomejavasenior(at]gmail.com>24 мая 2015 г., 11:27
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Посмотрел твой код. На удивление все хорошо, никаких замечаний пока нет.

Предлагаю двигаться дальше, следующее задание:

Авторизация:
Разберись что такое авторизация и аутентификация.
С тебя эссе на эту тему - в чем отличие между ними (спрашивают на 50% интервью)

Этап 1: Использование Filters
[...]
[...]

Этап 2: Учим Redirect
[...]
Посмотри чем redirect отличаетсья от forward и напиши в каком случае ты будешь использовать первый, а в каком второй.


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

23 мая 2015, в 22:33, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 мая 2015 г., 13:49
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Добрый день Дмитрий.

Спасибо за оценку моей работы.

Аутентификация - проверка соответствия субъекта и того за кого он себя хочет выдать. В нашем случае это реализуется с помощью пароля (считается правдой то пароль от одного аккаунта знает и может использовать только один человек).

Авторизация - это проверка и определение полномочий на выполнение определенных действий в соответствии с выполненной ранее аутентификации.

Redirect - устанавливает в заголовках ответа статус - 302 и Location - новый url (куда мы хотим перенаправить пользователя). Браузер считывает эту информацию и (согласно спецификации) создает новый запрос на указанный нами url.Буду использовать при неудачной попытке авторизации пользователем.

Forward - действие которая происходит исключительно на сервере и браузер не принимает в ней участия. Это перенаправление на другой url в рамках одного запроса (мы подменяем лишь url) .д использовать во всех случаях, когда нужно перенаправить пользователя с нужным мне url.



[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>24 мая 2015 г., 16:24
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петр,

Отлично, все верно.

Best Regards,
Dmytro Sokolov
Java Trainer / Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

24 мая 2015, в 13:49, Petro Yurchyshyn < petro.yurchyshyn.it(at]gmail.com > написал (а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 мая 2015 г., 19:13
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Что нужно еще реализовать перед тем как перевести проект на Spring и Hibernate?

24 мая 2015 16:24 Dmytro Sokolov < becomejavasenior(at]gmail.com > написал:
[Цитируемый текст скрыт]


Dmytro Sokolov <becomejavasenior(at]gmail.com>24 мая 2015 г., 20:36
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петр,
еще не мало, unit testing, advance maven, многопоточность, jsp tag, continuous integration, JSON XML parsing ... это так по памяти.
Не хочу давать это с Spring MVC / Security + Hibernate, потому что и так с ними много мороки. Еще ошибок от них нам не хватало.
Хотя сам Spring IoC добавим где то посреди ЭТИХ задач, ты довольно хорошо прогрессируешь, будет норм.

Best Regards,
Dmytro Sokolov
Java Trainer / Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

24 мая 2015, в 19:13, Petro Yurchyshyn < petro.yurchyshyn.it(at]gmail.com > написал (а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 мая 2015 г., 20:59
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Ок.

Я решил сегодня и завтра уделить время многопоточности.

Во вторник планирую вновь вернуться к "Соцсети". Тестировать функционал и исправлять логические ошибки (сейчас пока добавил AuthenticationFilter и AppErrorHandler сервлеты).

Или Вы могли бы составить мне задание по использованию тех технологий которые Вы перечислили.



С уважением,
Петр Юрчишин



24 мая 2015 20:36 Dmytro Sokolov < becomejavasenior(at]gmail.com > написал:
[Цитируемый текст скрыт]


Dmytro Sokolov <becomejavasenior(at]gmail.com>24 мая 2015 г., 22:44
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петр привет,

Составить все задания сразу не смогу, они могут менять, в зависимости от твоего кода, и как ты будешь решать предыдущие.
Часть универсальные, их смога выслать.

Best Regards,
Dmytro Sokolov
Java Trainer / Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

24 мая 2015, в 20:59, Petro Yurchyshyn < petro.yurchyshyn.it(at]gmail.com > написал (а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 мая 2015 г., 23:14
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Спасибо!

24 мая 2015 22:44 Dmytro Sokolov < becomejavasenior(at]gmail.com > написал:
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>1 июня 2015 г., 16:04
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Здравствуйте Дмитрий.

Поздравляю с праздниками!

Вот моя реализация задачи:





Прошу оценить качество архитектуры и кода.





С уважением,
Петр Юрчишин.



24 мая 2015 23:14 Petro Yurchyshyn < petro.yurchyshyn.it(at]gmail.com > написал:
[Цитируемый текст скрыт]


Dmytro Sokolov <becomejavasenior(at]gmail.com>1 июня 2015 г., 22:18
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

По архитектуре пока хорошо, будем улучшать.
Замечания по коду:
- Если это сервлет, то он должен закангчивать на слово Serlet 
несмотря на то, что они находятся в пакете servlets

По авторизации, давай добавим администратора, который имеет доступ к странице со всеми пользователями и может их удалять.

В целом все ок, структура классов годиться, критичных замечаний нет.

Даю тебе следующие задания, большим списком, как просил:
Изображения:

Реализуем возможность загружать фотографию пользователя.
Изображения пользователя можно хранить - в базе в Blob виде или на диске (а в базе путь к картинке).
[...]
[...]
[...]

Maven

Этап 1: Добавляем Maven.
В проекте не должно быть внешних jar файлов. Все должно тянуться с maven репозитория.

Этап 2: Собираем
[...].

Этап 3: Модули
[...]
Модуль должен собираться в отдельный

Этап 4: Command Line
[...]
[...]

JSP теги
[...]

Logging
Добавь логгер Log4j
[...]
Разберись с уровнями важности сообщений, должны использоваться уровни INFO, WARN, ERROR, по желанию DEBUG.
Выводи сообщения в консоль и файлы. Файлов должно быть не более 10 и размером до 10МБ каждый.



Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

1 июня 2015, в 16:04, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>1 июня 2015 г., 23:54
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привет, Дмитрий.

Спасибо за оценку моей работы и задачу!




С уважением,
Петр Юрчишин
[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>2 июня 2015 г., 12:52
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро, пожалуйста

Из них самое проблемное это с Maven, но думаю ты разберешься.
Если что - пиши.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

1 июня 2015, в 23:54, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>2 июня 2015 г., 13:07
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Ок. Дякую!
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 14:35
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привет Дмитрий.

Maven модули.

Хочу разбить свой проект на три модуля.

1) SocNetwork

2) SocNetworkServer

3) SocNetworkClient


Как Вам такая идея?



С уважением,
Петр Юрчишин






[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>4 июня 2015 г., 15:11
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Названия это хорошо, но что в этих модулях будет? :)


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

4 июня 2015, в 14:35, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 15:54
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
)) Сорри ...

Решил разбить проект на три модуля.

1) SocNetwork (общий модуль)
2) SocNetworkServer (модели + интерфейсы DAO и их реализация)
3) SocNetworkClient (сервлеты + файлы. Jsp)


[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>4 июня 2015 г., 15:59
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро,

Идеологически мне нравиться. Единственное, названия модулей нее очень. Servlets это как бы серверная часть тоже.
И какие классы будут в общем модуле? Как насчет модели туда поместить?
то где у тебя буде что то типа:
- model
- dao
- web

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

4 июня 2015, в 15:54, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 16:22
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Да, я согласен по сервлетов.

Спасибо за совет!




[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 16:29
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Я так понимаю что у меня в итоге будет три отдельных проекта.


Нужно делать отдельный репозиторий на каждый из этих модулей на BitBucket?

[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>4 июня 2015 г., 17:22
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
no no no,
У тебя проект один. Будет всегда.
Просто оно стоит из 3-х модулей. Смысл в том, что один модуль может быть заменен другим, аналогичным. Например вместо Сервлетов мы подставим Spring MVC, не тронув другие модуля. Понял?

Скачай и посмотри пример тут http://books.sonatype.com/mvnex-book/reference/multimodule-sect-intro.html  (ссылка на пример в исходниках http://www.sonatype.com/books/mvnex-book/mvnex-examples.zip)
Если в двух словах - каждый модуль это независимое приложение, с своей структурой ( папки src/main/java, test, etc)
Пример модульной структуры: http://maven.apache.org/archetype/maven-archetype-plugin/examples/create-multi-module-project.html


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

4 июня 2015, в 16:29, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 18:35
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
С назначением модулей я разобрался.

Сейчас стараюсь понять как физически в рамках одного проекта выглядят три модуля?

Насколько я понял то в Maven один модуль это один проект !?

[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>4 июня 2015 г., 18:55
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Почитай на эту тему самостоятельно, если совсем не разберешься до завтра - дай знать. Посмотри примеры которые я скинул.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

4 июня 2015, в 18:35, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 19:02
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Оки.

Спасибо за ссылки.

Как лучше: переделывать уже существующий у нас проект или создать новый проект и в нем уже создавать модули?
[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>4 июня 2015 г., 19:03
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Можешь в текущем проекте создать модули и перенести туда файлы.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 66 649 21 06
Skype: sokolov-d

4 июня 2015, в 19:02, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>4 июня 2015 г., 19:11
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Хорошо.

Спасибо за советы!

Хорошего вечера.
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>5 июня 2015 г., 19:25
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привет Дмитрий.

Сейчас занимаюсь сохранением изображений в БД.

Что посоветуете почитать чтобы удачно реализовать внутренний кэш изображений?



С уважением,
Петр Юрчишин
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 16:15
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привіт Дмитре.

Розбираюсь з сервісом Heroku.

Залишилось настроїти БД.

Я так розумію що мені потрібно реалізувати підтримку Postgresql в проекті,

встановити Postgresql локально, протестувати взаємодію проекту з Postgresql ?

Після цього вже налаштовувати Postgresql на сервісі Heroku?



2015-06-22 21:24 GMT+03:00 Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>:
Окі.

Дякую за оцінку моєї роботи.

Спробую написати інструкцію по розгортанню SonarQube.




З повагою,
Петро Юрчишин

2015-06-22 20:17 GMT+03:00 Dmytro Sokolov <becomejavasenior(at]gmail.com>:
Петро привет,

Отлична я работа.
Можешь составить краткую инструкцию, как ты настраивал и подключал SonarQube? 

Ты уже довольно много сделал по проекту, давай выложим его в облако.

Continuous Integration

Этап 1: Использовать сервис Heroku
[...]
[...]
[...]
[...]
[...]
Смотрим что бы проект поднялся без ошибок


Будут с этим проблемы - дай знать. Так же держи меня в курсе, что и как делаешь.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 93 307 56 98
Skype: sokolov-d





Dmytro Sokolov <becomejavasenior(at]gmail.com>23 июня 2015 г., 16:48
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Все верно.
Ты разве не проверяешь работоспособность приложения на локальной базе?

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 93 307 56 98
Skype: sokolov-d

23 июня 2015, в 16:15, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 17:34
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Тестую завжди спочатку на локальній БД. Але в мене зараз тільки MySql. Тому уточнив.

Я бачив що на  Heroku є можливість створювати MySql БД, але в безоплатному пакеті максимум 5MB.


[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>23 июня 2015 г., 17:44
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро,

Выбирай БД какая удобней.
Нам 5 МБ должно хватить.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 93 307 56 98
Skype: sokolov-d

23 июня 2015, в 17:34, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):
[Цитируемый текст скрыт]


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 18:09
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
В мене зараз БД займає до 500KB. Тож 5MB точно вистачить.

Але спробую Postgresql для різноманітності)
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 19:30
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Виникли проблеми зі встановленням Postgresql (несумісність з моєю операційною системою).

Буду поки працювати з MySql
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 19:59
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
На даний момент я авторизувався на Heroku з cmd.exe

завантажив свій проект за допомогою команди git clone

зібрав проект за допомогою команди mvn install

далі згідно цієї інструкції мені потрібно запустити цю команду: foreman start web (але вона потребує методу Main що сконфігурований в файлі Procfile).
Мені потрібно змінювати свій проект щоб ця команда працювала? 
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 20:45
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Прочитав цю статтю: https://devcenter.heroku.com/articles/procfile

З неї випливає що Procfile не є важливим для деплою на Heroku.

Попробую задеплоїти)
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>23 июня 2015 г., 22:11
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Розібрався з конфігуруванням  Procfile файлика.

команда foreman start web працює і запускає мій проект на порті 5000 :)
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 июня 2015 г., 0:25
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Задеплоїв. Деплой пройшов успішно.

Але проект запускається з помилкою:



Procfile : 

web:   java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war


На локальній машині проект запускається без помилок (але без  $JAVA_OPTS в Procfile )

Procfile : 

web:   java -jar target/dependency/webapp-runner.jar --port $PORT target/*.war


Робив по цій сатті:


webapp-runner-7.0.57.2.jar додавав вручну бо не працює в мене варіант з мавен плагіном(описаний в статті).

В корені проекту створив папку target і туди поклав webapp-runner-7.0.57.2.jar та архів проекту .war  і прописав шлях до них в Procfile.

На локалці запрацювало, а от з хмаринкою проблема...

Прінтскрін в приєднаному файлі.


[Цитируемый текст скрыт]

heroku_error.PNG
103K Посмотреть Сканировать и загрузить

Dmytro Sokolov <becomejavasenior(at]gmail.com>24 июня 2015 г., 13:19
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Отличный прогресс, быстро справился.

На Heroku можно смотреть логи. Посмотри логи, как и написано в описании ошибки :)

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 93 307 56 98
Skype: sokolov-d

24 июня 2015, в 00:25, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

[Цитируемый текст скрыт]
<heroku_error.PNG>


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 июня 2015 г., 15:22
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привіт Дмитре.

На прінтскріні який я Вам скидав в попередньому листі є логи з Heroku
[Цитируемый текст скрыт]

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 июня 2015 г., 18:07
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Видалив app з Heroku і задеплоїв ще раз проект.

Намагаюсь зрозуміти чому проект локально запускається (foreman start web) а на сервері Heroku проект не запускається.

Судячи з логів то Heroku не може знайти webapp-runner.jar

Але локально foreman це робить без помилок.

В чому на Вашу думку може бути причина?

скрін логів в приєднаному файлі.
[Цитируемый текст скрыт]

heroku_error_2.PNG
100K Посмотреть Сканировать и загрузить

Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>24 июня 2015 г., 18:55
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Вдалось полагодити. Тепер проект стартує ).

[Цитируемый текст скрыт]

Dmytro Sokolov <becomejavasenior(at]gmail.com>24 июня 2015 г., 19:57
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Ну супер, я знал что ты способный!
Сервер стартовал, но при регистрации ошибка, думаю ты уже в курсе и исправляешь :)

Exception Details

  • Servlet Name:Register
  • Exception Name:java.lang.NullPointerException
  • Requested URI:/Register
  • Exception Message:null

С тебя краткая инструкция по установке SonarQube 
И еще по Heroku. Какие проблемы были и как ты и  решил.

З.Ы. Могу немного дольше обычного отвечать, поглощен запуском курса http://becomejavasenior.com/blog/2015/06/24/java-email-courses/ 
Потом заставлю тебя его проходить, там уйма полезностей.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer


Mobile: +380 93 307 56 98
Skype: sokolov-d

24 июня 2015, в 18:55, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

Вдалось полагодити. Тепер проект стартує ).





Dmytro Sokolov <becomejavasenior(at]gmail.com>24 июня 2015 г., 21:36
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

В догонку

У меня 2 новости для тебя :)

Первая, [...]

Вторая, хорошая - запускаю крутой email-курс http://becomejavasenior.com/blog/2015/06/24/java-email-courses/ (уже написан, осталось оформить)

Скажи, тебя устроят такие условия?

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

Mobile: +380 93 307 56 98
Skype: sokolov-d



Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>25 июня 2015 г., 11:35
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Доброго дня, Дмитре.
Щодо інструкцій,  то працюю над ними
Щодо Вашої пропозиції, то мені дуже цікаво. Ідея мені дуже сподобалась. 

Однак по грошах - все залежить від того чи мені вдасться, найблищим часом, найти оплачувану роботу по Java.

P.S. Хіба розраховуватимусь з Вами бартером ;).

[Цитируемый текст скрыт]
Петро привет,

В догонку

[Цитируемый текст скрыт]



Dmytro Sokolov <becomejavasenior(at]gmail.com>10 июля 2015 г., 10:49
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Отлчино, давай тогда начнем с Hibernate.

Hibernate
Подключить hibernate в maven (можно взять 5-ю RC версию)
Сделать отдельный Maven модуль “hibernate” в котором для разработанной модели данных, создать соответствующие Entity
Стремимся сделать похожее в этой статье http://habrahabr.ru/post/249073/

Изучить какой ассоциативный маппинг возможен http://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch08.html
Часто спрашивают на собеседованиях.


Так же жду в коде использование Guava библиотеки.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer


9 июля 2015, в 17:34, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

Привіт Дмитре.

В процесі вивчення Junit я ознайомився з використання @Parameters та з SuiteCase. Корисні штуки.

Скористаюсь Вашою порадою і буду розбиратись з Guava. Буду потроху розбирати і прикручувати ці штуки в проект.

По технологіях:

Я б хотів, якщо можна, щоб зараз ми перевели проект на Hibernate та SpringMVC + SpringSecurity.
Більш глибше практичне розуміння цих технологій мені не завадить.




Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>13 июля 2015 г., 22:09
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привіт Дмитре.

Підключив hibernate. Сконфігурував. Зробив окремий модуль.

Під час тестування отримав ось таку помилку: (не вдається розібратись з нею)

"C:\Program Files\Java\jdk1.8.0_31\bin\java" -Didea.launcher.port=7544 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA 14.1.3\bin" -Dfile.encoding=windows-1252 -classpath "C:\Program Files\Java\jdk1.8.0_31\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext\zipfs.jar;D:\code\projects\IDEA\socNetwork\hibernate\target\classes;C:\Documents and Settings\a\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Documents and Settings\a\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Documents and Settings\a\.m2\repository\mysql\mysql-connector-java\5.1.34\mysql-connector-java-5.1.34.jar;C:\Documents and Settings\a\.m2\repository\postgresql\postgresql\9.1-901-1.jdbc4\postgresql-9.1-901-1.jdbc4.jar;C:\Documents and Settings\a\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Documents and Settings\a\.m2\repository\org\mockito\mockito-all\1.10.19\mockito-all-1.10.19.jar;C:\Documents and Settings\a\.m2\repository\org\hibernate\hibernate-core\5.0.0.CR1\hibernate-core-5.0.0.CR1.jar;C:\Documents and Settings\a\.m2\repository\org\jboss\logging\jboss-logging\3.3.0.Beta1\jboss-logging-3.3.0.Beta1.jar;C:\Documents and Settings\a\.m2\repository\org\jboss\logging\jboss-logging-annotations\1.2.0.Final\jboss-logging-annotations-1.2.0.Final.jar;C:\Documents and Settings\a\.m2\repository\org\jboss\logging\jboss-logging-processor\1.2.0.Final\jboss-logging-processor-1.2.0.Final.jar;C:\Documents and Settings\a\.m2\repository\org\jboss\jdeparser\jdeparser\1.0.0.Final\jdeparser-1.0.0.Final.jar;C:\Documents and Settings\a\.m2\repository\org\apache\geronimo\specs\geronimo-jta_1.1_spec\1.1.1\geronimo-jta_1.1_spec-1.1.1.jar;C:\Documents and Settings\a\.m2\repository\org\hibernate\javax\persistence\hibernate-jpa-2.1-api\1.0.0.Final\hibernate-jpa-2.1-api-1.0.0.Final.jar;C:\Documents and Settings\a\.m2\repository\org\javassist\javassist\3.18.1-GA\javassist-3.18.1-GA.jar;C:\Documents and Settings\a\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Documents and Settings\a\.m2\repository\org\jboss\jandex\1.1.0.Final\jandex-1.1.0.Final.jar;C:\Documents and Settings\a\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;C:\Documents and Settings\a\.m2\repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;C:\Documents and Settings\a\.m2\repository\org\hibernate\common\hibernate-commons-annotations\4.0.5.Final\hibernate-commons-annotations-4.0.5.Final.jar;C:\Program Files\JetBrains\IntelliJ IDEA 14.1.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.socNetwork.main.SimpleTest1
???. 13, 2015 9:40:59 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.0.0.CR1}
???. 13, 2015 9:40:59 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
???. 13, 2015 9:40:59 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
???. 13, 2015 9:41:02 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
Hibernate Annotation Configuration loaded
Hibernate Annotation serviceRegistry created
???. 13, 2015 9:41:03 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)
???. 13, 2015 9:41:03 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/social_network]
???. 13, 2015 9:41:03 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=root, password=****}
???. 13, 2015 9:41:03 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000006: Autocommit mode: false
???. 13, 2015 9:41:03 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
???. 13, 2015 9:41:06 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.socNetwork.model.User
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:768)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1447)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:338)
at com.sun.proxy.$Proxy17.save(Unknown Source)
at com.socNetwork.main.SimpleTest1.main(SimpleTest1.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

10 липня 2015 р. 10:49 Dmytro Sokolov <becomejavasenior(at]gmail.com> написав:
[Цитируемый текст скрыт]
...

[Повідомлення скорочено]  


Dmytro Sokolov <becomejavasenior(at]gmail.com>14 июля 2015 г., 12:27
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

У тебя все правильно сконфигурировано, я сначала подумал на эту проблему:

Есть подозрение что через main лучшее не тестировать Hibernate:  

а сразу интегрировать в твой проект и запускать на Tomcat.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer




Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>14 июля 2015 г., 13:39
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привіт Дмитре.

Зрозуміло.

Буду створювати Entity для решти моделей.

P.S.Коли я мав справу з Hibernate 4.3.8 то вдавалось його протестувати через метод Мain 





Dmytro Sokolov <becomejavasenior(at]gmail.com>14 июля 2015 г., 19:02
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро,

Теоретически Hiberanate должен запускаться и через main. Но у нас в будущем будет больше фреймворков, должны иметь подходы тестировать на всем преложении целиком.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer


14 июля 2015, в 13:39, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

Привіт Дмитре.

Зрозуміло.

Буду створювати Entity для решти моделей.

P.S.Коли я мав справу з Hibernate 4.3.8 то вдавалось його протестувати через метод Мain 






Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>15 июля 2015 г., 11:56
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привіт Дмитре.

Створив всі необхідні моделі з hibernate анотаціями:

14 липня 2015 р. 19:02 Dmytro Sokolov <becomejavasenior(at]gmail.com> написав:
Петро,

Теоретически Hiberanate должен запускаться и через main. Но у нас в будущем будет больше фреймворков, должны иметь подходы тестировать на всем преложении целиком.

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer





Dmytro Sokolov <becomejavasenior(at]gmail.com>15 июля 2015 г., 18:24
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро привет,

Отлично, визуально все ок. 
Как с запуском hibernate, получилось?

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer


15 июля 2015, в 11:56, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

Привіт Дмитре.

Створив всі необхідні моделі з hibernate анотаціями:




Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>15 июля 2015 г., 21:21
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
З запуском hibernate далі та ж сама проблема.

15 липня 2015 р. 18:24 Dmytro Sokolov <becomejavasenior(at]gmail.com> написав:
Петро привет,

Отлично, визуально все ок. 
Как с запуском hibernate, получилось?

Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer





BacomeJavaSenior <becomejavasenior(at]gmail.com>15 июля 2015 г., 22:47
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро,

Понял тебя. 
Закомить что если еще не закомитил и скажи как запускаешь приложение?


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

http://becomejavasenior.com 

15 июля 2015 г., в 21:21, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

З запуском hibernate далі та ж сама проблема.



Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>15 июля 2015 г., 22:51
Кому: BacomeJavaSenior <becomejavasenior(at]gmail.com>
Запускаю цей тест:

Отримую: 
org.hibernate.MappingException: Unknown entity: com.socNetwork.model.User

15 липня 2015 р. 22:47 BacomeJavaSenior <becomejavasenior(at]gmail.com> написав:
Петро,

Понял тебя. 
Закомить что если еще не закомитил и скажи как запускаешь приложение?


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

http://becomejavasenior.com 

15 июля 2015 г., в 21:21, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):



BacomeJavaSenior <becomejavasenior(at]gmail.com>15 июля 2015 г., 23:22
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Хорошо,

Завтра у себя запущу. 
Пока можешь поисправлять баги, которые в youtrack заведенны.  


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

http://becomejavasenior.com 

15 июля 2015 г., в 22:51, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):


Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>15 июля 2015 г., 23:44
Кому: BacomeJavaSenior <becomejavasenior(at]gmail.com>
вдалося запустити hibernate

спробував цю версію:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version>
</dependency>



15 липня 2015 р. 23:22 BacomeJavaSenior <becomejavasenior(at]gmail.com> написав:
Хорошо,

Завтра у себя запущу. 
Пока можешь поисправлять баги, которые в youtrack заведенны.  


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer

http://becomejavasenior.com 

15 июля 2015 г., в 22:51, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):



Dmytro Sokolov <becomejavasenior(at]gmail.com>16 июля 2015 г., 9:58
Кому: Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>
Петро,

Отлично. Было у меня подозрение на версию Hibernate, не думал что так все плохо.
Давай использовать Hibernate для приложения. 
Что бы не делать двойную работу, давай добавим сразу Spring. И уже на на них сделай отдельный слои Repository, Service. 
1.Вместо DAO будет Repository см 
2. Интерфейсы Service те же что и есть, другая реализация. Интерфейсы Service вынеси в отдельный модуль, тогда у нас сохраниться и JDBC и будет работать Hibernate.
Кстати, напиши мне короткое эссе, зачем нужен слой Service. 


Best Regards,
Dmytro Sokolov
Java Trainer/Software Lead Developer


15 июля 2015, в 23:44, Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com> написал(а):

вдалося запустити hibernate

спробував цю версію:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version>
</dependency>






Petro Yurchyshyn <petro.yurchyshyn.it(at]gmail.com>17 июля 2015 г., 11:52
Кому: Dmytro Sokolov <becomejavasenior(at]gmail.com>
Привіт Дмитре.

Я хочу зараз серйозно підготуватися до співбесід і отримати оплачувану роботу по Java.

Ваша пропозиція щодо цієї програми ще в силі? 





З повагою,
Петро Юрчишин