|
|
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Хочу написать небольшое приложение с целью ознакомления с технологиями Rest и EJB. Навскидку это будет выглядеть так. Есть модуль RestWebService, к нему мы обращаемся из браузера (html напишу позже) там классы вот такого плана. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Также есть модуль Beans с бинами, типа такого Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. В него я планирую добавить EntityManager и буду дергать/записывать в БД данные. Вопроса 2. 1. Как вам в целом архитектура ? 2. в классе HelloWorld при закоментаренных строчках 1 и 2 все норм работает. Если их раскоментарить и закоментарить 3 и 4, то вылетает NullPointerException. Я так понимаю, что MySessionBean не инжектится. Не могу понять, почему. Я посмотрел видео №17 Якова Файна, у него работает (с разницей, что у него сервлет, а не rest модуль). Что-то где-то надо прописать, в каком-нибудь web.xml модуля RestWebService или еще куда-нибудь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 20:07 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Еще одна проблема образовалась. В файле persistence.xml вот эта строчка <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> выкидывает javax.persistence.PersistenceException: JBAS011466: PersistenceProvider 'org.hibernate.jpa.HibernatePersistenceProvider' not found если вместо нее прописать org.hibernate.ejb.HibernatePersistence то это даже не компилируется, т. к. этот класс @Deprecated ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 22:58 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Странно, что такая тишина. Вопросы не такие уж и сложные. Это мне лично непонятно, как быть, т. к. раньше не работал с таким ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 13:43 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Geronemo, 1. Архитектура вполне стандартная. Только польза от EJB вам в чем? 2. Надо проверить конкретную версию EJB, CDI, JEE которую предоставляет ваш сервер. Это известный косяк, когда бины определенного типа не участвуют в CDI. Rest это HTTP подход, а не технологию EJB. JEE технология называется JAX-RS. Хорошо бы тоже узнать версию и посмотреть совместимо ли оно с CDI http://docs.oracle.com/javaee/6/tutorial/doc/gkncy.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 13:51 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGeronemo, 1. Архитектура вполне стандартная. Только польза от EJB вам в чем? Незнакомое слово. Часто спрашивают на собеседованиях. Хоть как-то поработаю с этим на практике. Раньше имел дело с сервисами RMI, когда один человек делает интерфейс, а другой его реализацию и когда надо presentation layer дергает эти интерфейсы. Таким образом происходило разграничивание между интерфейсом и реализацией. В моем случае, я планирую в качестве этого разграничивания использовать EJB session beans. Rest классы получают запросы и дергают определенные session beans, которые уже посредством JPA контактируют с информацией. Наверно можно было бы обойтись без EJB и прямо из REST классов лазить в БД. Я вот этого самого нюанса не понимаю, потому и вынес вопрос на форум. Но если от EJB вреда нету, то буду делать именно так, как задумал. 2. Надо проверить конкретную версию EJB, CDI, JEE которую предоставляет ваш сервер. Это известный косяк, когда бины определенного типа не участвуют в CDI. Rest это HTTP подход, а не технологию EJB. JEE технология называется JAX-RS. Хорошо бы тоже узнать версию и посмотреть совместимо ли оно с CDI http://docs.oracle.com/javaee/6/tutorial/doc/gkncy.html Наверно пока оставлю как есть, позже изучу ваш комментарий. Учитывая, что приложение не деплоится из-за того, что org.hibernate.ejb.HibernatePersistence является @deprecated и надо еще подразобраться, как JPA прикрутить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 17:20 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Если хотите разобраться, начните со Spring, там все очень здорово логически разделено, тогда EE будет гораздо легче понять что там и как. А еще лучше будет помимо Spring'a сделать standalone приложение с JPA + Hibernate + еще взять какой-нибудь сторонний TransactionManager. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 19:16 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Ладно, буду пользоваться пока @deprecated классом. По-крайней мере деплоится. А вот по поводу того, что @EJB Не ижектится, у меня возникла такая мысль - а с чего оно вообще должно инжектиться. У меня есть пакет RestWebService, а есть пакет beans, в котором я создал SessionBean. Так вот с чего это вдруг классы пакета RestWebService должны вот под такой аннотацией @EJB private MySessionBean sessionBean; видеть этот самый бин. По логике надо его как-то инициализировать или прописать в каком-нибудь xml, что мы будем пользоваться каким-то бинами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 19:43 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Geronemo, Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться. В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 20:44 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Geronemo........... если вместо нее прописать org.hibernate.ejb.HibernatePersistence то это даже не компилируется, т. к. этот класс @DeprecatedВы какие-то сказки рассказываете. Трудно себе представить, что класс не компилируется из-за XML-конфига. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 20:45 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
WGAGeronemo, Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться. В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.). Это не работает. Зато с JPA все норм. Я тут, кстати, вспомнил, что в Spring было тако CrudRepository, нету ли неких аналогов Java EE ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 21:20 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Поправка, вот это не работает WGAGeronemo, Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться. а @SessionScoped работает. Еще бы понять, что это значит. Уж больно много всего у меня в проекте методом гугло-копипаста и тыка. В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 21:53 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Мы не можем обсуждать в форуме код который создан методом гугло-копипаста и тыка. Каждый твой лишний тык умножает количество ошибок и мы в них потонем. Возьми за основу хотя-б tutorial или книгу. Будет продуктивнее ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2015, 23:50 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
maytonМы не можем обсуждать в форуме код который создан методом гугло-копипаста и тыка. Каждый твой лишний тык умножает количество ошибок и мы в них потонем. Возьми за основу хотя-б tutorial или книгу. Будет продуктивнее ИМХО. Я в принципе со всеми текущими вопросами разобрался, мне советы с форума помогли, как и книги, видеоуроки, туториалы и т. д. Лучше иметь несколько источников получения информации, в том числе и форумы и личное общение с профессионалом более высокого уровня. И, кстати, я не первый сталкиваюсь с похожими вопросами и контент, созданный в этой теме может кому-нибудь пригодиться в будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2015, 14:51 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
GeronemoПоправка, вот это не работает WGAGeronemo, Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться. а @SessionScoped работает. Еще бы понять, что это значит. Уж больно много всего у меня в проекте методом гугло-копипаста и тыка. В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.).это точно работает в GF и WLS. За другие сервера приложений не скажу. Вряд ли Вам нужен session-scope, используйте request-scope. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2015, 20:42 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
WGA. Вряд ли Вам нужен session-scope, используйте request-scope. Поправил. Работает. Есть еще один любопытный момент. У меня есть 6 веб-сервисов, у которых функционал на 80% один и тот же. И Я завел некий BasicService Код: java 1. , который бы реализовал бы несколько GET и DELETE функций (get/all, get/id и т. д.) и от него наследую все сервисы. То же самое можно сказать и про EJB бины (у меня каждуму сервису соответствует свой EJB bean) и там также функционал на 80% одинаков. Я создал Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. и от него унаследовал все бины. Проблемка вот в чем. Есть у меня класс DAO, который отрабатывает весь общий функционал по работе с БД. И в бинах я его подключаю так Код: java 1. 2. в BasicBean У меня ругается на аннотацию @Inject, т. к. он параметризован и я пользуюсь аннотацией @EJB. Казалось бы Все работает, однако мне не нравится, что одна и та же вещь объялется разными аннотациями. Вопрос - имеет ли мне смысл что-то рефакторить или прочитать http://www.adam-bien.com/roller/abien/entry/inject_vs_ejb и забить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 19:09 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Нужна небольшая помощь. Не работает метод DELETE (вероятно PUT и POST тоже, я их еще не проверял) Выглядит это вот так Код: java 1. 2. 3. 4. 5. и по логике должно работать, но в браузере вылетает вот такая хрень HTTP Status 405 JBWEB000125: The specified HTTP method is not allowed for the requested resource. JBoss Web/7.4.8.Final-redhat-4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 21:11 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Geronemo, Потому что браузер не отправляет GET. Используйте консоль разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 13:19 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGeronemo, Потому что браузер не отправляет GET. Используйте консоль разработчика. Так у меня GET работает (тупо набрав URL и нажав Enter). Не работает DELETE, с которым я пытаюсь сделать то же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 14:40 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Похоже решил проблему. Поставил аддон RestClient, оттуда и GET и DELETE работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 14:50 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Есть еще вопрос. Я из RestClient делаю PUT и вот такой URL http://localhost:8080/eShop/restApp/customers/create?lastName=fhdgfhg&firstName=fghfgh&phone=456546 И у меня веб-сервис получает все 2 параметра. А если сделать запрос PUT на http://localhost:8080/eShop/restApp/customers/create и в body передать что-то типа lastName=fhdgfhg&firstName=fghfgh&phone=456546 то в этом методе Код: java 1. 2. 3. 4. 5. 6. 7. 8. все входные параметры будут null Я то в принципе не против передавать данные в URL, но тогда вопрос, а зачем нужно это поле body. Ну или есть какой-то способ передать параметры в body (вдруг один из параметров это текст на 10 кб). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 15:09 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Ребята, я серьезно. Как запихать данны в body и как их получить в веб-службе. Посоветуйте что-нибудь по REST, на русском и чтобы был не базовый обзор, но и не книга на 700 страниц. И по JPA тоже был бы очень признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2015, 16:01 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
GeronemoРебята, я серьезно. Как запихать данны в body и как их получить в веб-службе. Посоветуйте что-нибудь по REST, на русском и чтобы был не базовый обзор, но и не книга на 700 страниц. И по JPA тоже был бы очень признателен. на чем у тебя клиент написан? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2015, 07:02 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Geronemo, Используй ангуляр, там делай аджакс запрос пут на твой урл, отправляй в джейсоне и все у тебя заработает. Не нравится ангуляр возьми джекуери. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2015, 08:11 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Юрий321на чем у тебя клиент написан? mr_virtusGeronemo, Используй ангуляр, там делай аджакс запрос пут на твой урл, отправляй в джейсоне и все у тебя заработает. Не нравится ангуляр возьми джекуери. Ребята, спасибо за внимание. Клиента нету, т. к. я не владею javascript. Для отладки я использовал RestClient аддон для Firefox, но потом перешел на PostMan для Chrome - в нем больше функций. Чуток порывшись в инете я разобрался, как делать POST/PUT, т. е. теперь у меня это выглядит так Код: java 1. 2. 3. 4. 5. 6. 7. 8. Раньше не было строчки Consumes и вместо FormParam был QueryParam (у меня было слизано с какого-то наипростейшего экзампла). Сейчас все работает и я могу доделать серверную часть и отладить ее. Ну а потом встанет вопрос разработки клиента. Честно скажу, что мне не хочется разбираться в JavaScript, т. к. получается, что внимание распыляется по куче технологий. Но наверно все же придется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 19:54 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGeronemo, 1. Архитектура вполне стандартная. Только польза от EJB вам в чем? Я чуть выше написал, что мне польза от EJB в том, что я хотел бы охватить в этом проекте как можно больше технологий. Но на данный момент у меня и самого возникает вопрос, оптимальна ли у меня архитектура (все-так я сам замутил ее, многого не понимая и спросить было не у кого). Вкратце, опишу, как чnо работает. 3-tier приложение У меня есть 3 модуля Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Как Вам в целом. Можно ли как-то рефакторить. И правильно ли я тут использую термины ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 20:13 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Столкнулся с небольшой проблемой (которая возможно надумана). Суть в том, что я стремлюсь везде где-только можно сократить количество кода, путем вынесения общего функционала в супер-класс, параметризации и т. д. Но сейчас вот стокнулся с такой штукой. Начал писать клиент для REST-приложения. На Get-Запрос (/get/all) REST веб-сервис присылает список всех элементов того, что мы запрашиваем, например у нас есть 10 записей в таблице Custoьer и мы получаем xml из 10 записей типа <Customer>......</Customer> но при этом все это дело обернуто в <CustomerDomains> ..... </CustomerDomains> И если у меня есть 10 сущностей, то каждый root element имеет свое имя. На стороне клиента, что распарсить это дело я завожу вот такой класс Код: java 1. 2. 3. 4. 5. 6. 7. НУ и потом создаю JAXBContext и делаю unmarshal И все прекрасно работает. НО мне не нравится, что мне придется заводить 10 таких классов, в каждом из которых я бы прописывал свой name для @XmlRootElement. Я пытался запихать туда переменную, придумать какие-то классы обертки, но не получилось. И вот возникает у меня вопрос - забить болт и тупо сделать 10 одинаковых классов, отличающихся именем и полем name в @XmlRootElement или же есть какой-то способ обойти эту проблему и сделать один универсальный класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 00:26 |
|
||
|
Приложение Rest+EJB+JPA
|
|||
|---|---|---|---|
|
#18+
Я немного укорочу свой последний вопрос, т. к. возможно он своими размерами и стилем многих отпугивает. Суть в том, что мне нужно распарсить около 10 xml ответов от REST сервера. Для этого я завел 10 классов, вот такого вида @XmlRootElement(name=" customerDomains ") @XmlAccessorType(XmlAccessType.FIELD) class CustomerDomains { @XmlElement(name=" Customer ") private List< CustomerDomain > list = null; public <X> X getList() { return (X) list; } } Все 10 классов имеют одинаковую структуру и отличаются лишь тем, что я выделил жирным. И это работает. Но мне бы хотелось сделать 1 универсальный класс, который все выделенное жирным каким-либо образом параметризовал и подставлял строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 14:08 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2125319]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 535ms |

| 0 / 0 |
