powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Приложение Rest+EJB+JPA
25 сообщений из 27, страница 1 из 2
Приложение Rest+EJB+JPA
    #38947833
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу написать небольшое приложение с целью ознакомления с технологиями 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.
@Path("/helloworld")
public class HelloWorld {

1  // @EJB
2  // private MySessionBean sessionBean;

    @GET
    @Produces("text/plain")
    public String getClichedMessage() {
        try {
3            Context ctx = new InitialContext();
4           sessionBean = (MySessionBean) ctx.lookup("java:global/RestTest/MySessionBean");

            return sessionBean.request();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "error";
    }
}



Также есть модуль Beans с бинами, типа такого
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Stateless
public class MySessionBean {
    public MySessionBean() {
    }

    public String request() {
        return "HELLO from SessionBean";
    }
}



В него я планирую добавить EntityManager и буду дергать/записывать в БД данные.

Вопроса 2.
1. Как вам в целом архитектура ?
2. в классе HelloWorld при закоментаренных строчках 1 и 2 все норм работает. Если их раскоментарить и закоментарить 3 и 4, то вылетает NullPointerException. Я так понимаю, что MySessionBean не инжектится. Не могу понять, почему. Я посмотрел видео №17 Якова Файна, у него работает (с разницей, что у него сервлет, а не rest модуль). Что-то где-то надо прописать, в каком-нибудь web.xml модуля RestWebService или еще куда-нибудь ?
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38947952
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще одна проблема образовалась.

В файле persistence.xml вот эта строчка
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
выкидывает
javax.persistence.PersistenceException: JBAS011466: PersistenceProvider 'org.hibernate.jpa.HibernatePersistenceProvider' not found
если вместо нее прописать
org.hibernate.ejb.HibernatePersistence
то это даже не компилируется, т. к. этот класс @Deprecated
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950267
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно, что такая тишина.
Вопросы не такие уж и сложные. Это мне лично непонятно, как быть, т. к. раньше не работал с таким
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950270
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950307
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 прикрутить.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950334
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хотите разобраться, начните со Spring, там все очень здорово логически разделено, тогда EE будет гораздо легче понять что там и как. А еще лучше будет помимо Spring'a сделать standalone приложение с JPA + Hibernate + еще взять какой-нибудь сторонний TransactionManager.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950342
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, буду пользоваться пока @deprecated классом. По-крайней мере деплоится.

А вот по поводу того, что @EJB Не ижектится, у меня возникла такая мысль - а с чего оно вообще должно инжектиться. У меня есть пакет RestWebService, а есть пакет beans, в котором я создал SessionBean. Так вот с чего это вдруг классы пакета RestWebService должны вот под такой аннотацией
@EJB
private MySessionBean sessionBean;
видеть этот самый бин. По логике надо его как-то инициализировать или прописать в каком-нибудь xml, что мы будем пользоваться каким-то бинами
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950362
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Geronemo,

Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться.

В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.).
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950363
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Geronemo...........
если вместо нее прописать
org.hibernate.ejb.HibernatePersistence
то это даже не компилируется, т. к. этот класс @DeprecatedВы какие-то сказки рассказываете. Трудно себе представить, что класс не компилируется из-за XML-конфига.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950371
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGAGeronemo,
Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться.
В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.).

Это не работает.

Зато с JPA все норм. Я тут, кстати, вспомнил, что в Spring было тако CrudRepository, нету ли неких аналогов Java EE ?
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950380
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка, вот это не работает
WGAGeronemo,
Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться.

а @SessionScoped работает. Еще бы понять, что это значит. Уж больно много всего у меня в проекте методом гугло-копипаста и тыка.
В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.).
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950415
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы не можем обсуждать в форуме код который создан методом гугло-копипаста и тыка.
Каждый твой лишний тык умножает количество ошибок и мы в них потонем.

Возьми за основу хотя-б tutorial или книгу. Будет продуктивнее ИМХО.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38950542
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonМы не можем обсуждать в форуме код который создан методом гугло-копипаста и тыка.
Каждый твой лишний тык умножает количество ошибок и мы в них потонем.

Возьми за основу хотя-б tutorial или книгу. Будет продуктивнее ИМХО.

Я в принципе со всеми текущими вопросами разобрался, мне советы с форума помогли, как и книги, видеоуроки, туториалы и т. д. Лучше иметь несколько источников получения информации, в том числе и форумы и личное общение с профессионалом более высокого уровня. И, кстати, я не первый сталкиваюсь с похожими вопросами и контент, созданный в этой теме может кому-нибудь пригодиться в будущем.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38953045
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
GeronemoПоправка, вот это не работает
WGAGeronemo,
Просто пометьте класс HelloWorld аннотацией @Stateless и MySessionBean будет инжектиться.

а @SessionScoped работает. Еще бы понять, что это значит. Уж больно много всего у меня в проекте методом гугло-копипаста и тыка.
В REST-классах по умолчанию не работает DI, их надо сделать либо EJB-бИном, либо CDI (@RequestScoped, @SessionScoped, @Singleton и т.п.).это точно работает в GF и WLS. За другие сервера приложений не скажу. Вряд ли Вам нужен session-scope, используйте request-scope.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38966777
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGA. Вряд ли Вам нужен session-scope, используйте request-scope.

Поправил. Работает.

Есть еще один любопытный момент. У меня есть 6 веб-сервисов, у которых функционал на 80% один и тот же. И
Я завел некий BasicService
Код: java
1.
public abstract class BasicService<E extends BasicDomain>

, который бы реализовал бы несколько 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.
public abstract class BasicBean <E extends BasicDomain> {

    @PersistenceContext
    private EntityManager entityManager;

    @EJB
    protected DAO dao;

    protected abstract Class<E> getDomain();

    public List<E> findAll() {
        return dao.findAll(getDomain());
    }

    public E find(long id) {
        return dao.find(getDomain(), id);
    }

    public void delete (long id) {
        dao.delete(getDomain(), id);
    }


и от него унаследовал все бины. Проблемка вот в чем. Есть у меня класс DAO, который отрабатывает весь общий функционал по работе с БД. И в бинах я его подключаю так
Код: java
1.
2.
    @Inject
    private DAO dao;


в BasicBean У меня ругается на аннотацию @Inject, т. к. он параметризован и я пользуюсь аннотацией @EJB. Казалось бы Все работает, однако мне не нравится, что одна и та же вещь объялется разными аннотациями.

Вопрос - имеет ли мне смысл что-то рефакторить или прочитать http://www.adam-bien.com/roller/abien/entry/inject_vs_ejb и забить.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38972175
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна небольшая помощь.

Не работает метод DELETE (вероятно PUT и POST тоже, я их еще не проверял)
Выглядит это вот так

Код: java
1.
2.
3.
4.
5.
    @Path("/delete/{id}")
    @DELETE
    public void delete(@PathParam("id") long id) {
        getBean().delete(id);
    }



и по логике должно работать, но в браузере вылетает вот такая хрень
HTTP Status 405
JBWEB000125: The specified HTTP method is not allowed for the requested resource.
JBoss Web/7.4.8.Final-redhat-4
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38972347
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Потому что браузер не отправляет GET. Используйте консоль разработчика.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38972373
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczGeronemo,

Потому что браузер не отправляет GET. Используйте консоль разработчика.
Так у меня GET работает (тупо набрав URL и нажав Enter). Не работает DELETE, с которым я пытаюсь сделать то же самое.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38972377
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже решил проблему. Поставил аддон RestClient, оттуда и GET и DELETE работает
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38972385
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще вопрос. Я из 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.
    @Path("/create")
    @PUT
    public CustomerDomain create(@QueryParam("lastName") String lastName,
                                 @QueryParam("firstName") String firstName,
                                 @QueryParam("phone") String phone) {

        return customerBean.create(lastName, firstName, phone);
    }


все входные параметры будут null

Я то в принципе не против передавать данные в URL, но тогда вопрос, а зачем нужно это поле body. Ну или есть какой-то способ передать параметры в body (вдруг один из параметров это текст на 10 кб).
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38974433
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, я серьезно.

Как запихать данны в body и как их получить в веб-службе.

Посоветуйте что-нибудь по REST, на русском и чтобы был не базовый обзор, но и не книга на 700 страниц.
И по JPA тоже был бы очень признателен.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38974819
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoРебята, я серьезно.

Как запихать данны в body и как их получить в веб-службе.

Посоветуйте что-нибудь по REST, на русском и чтобы был не базовый обзор, но и не книга на 700 страниц.
И по JPA тоже был бы очень признателен.

на чем у тебя клиент написан?
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38974837
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Используй ангуляр, там делай аджакс запрос пут на твой урл, отправляй в джейсоне и все у тебя заработает. Не нравится ангуляр возьми джекуери.
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38976766
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Юрий321на чем у тебя клиент написан?
mr_virtusGeronemo,

Используй ангуляр, там делай аджакс запрос пут на твой урл, отправляй в джейсоне и все у тебя заработает. Не нравится ангуляр возьми джекуери.

Ребята, спасибо за внимание.

Клиента нету, т. к. я не владею javascript. Для отладки я использовал RestClient аддон для Firefox, но потом перешел на PostMan для Chrome - в нем больше функций. Чуток порывшись в инете я разобрался, как делать POST/PUT, т. е. теперь у меня это выглядит так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    @Path("/update")
    @POST
    @Consumes("application/x-www-form-urlencoded")
    public CustomerDomain update(@FormParam("id") long id,
                       @FormParam("lastName") String lastName,
                       @FormParam("firstName") String firstName,
                       @FormParam("phone") String phone) {
        return customerBean.update(id, lastName, firstName, phone);


Раньше не было строчки Consumes и вместо FormParam был QueryParam (у меня было слизано с какого-то наипростейшего экзампла).

Сейчас все работает и я могу доделать серверную часть и отладить ее.

Ну а потом встанет вопрос разработки клиента. Честно скажу, что мне не хочется разбираться в JavaScript, т. к. получается, что внимание распыляется по куче технологий. Но наверно все же придется...
...
Рейтинг: 0 / 0
Приложение Rest+EJB+JPA
    #38976775
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
1. REST - Presentation Layer
в нем классы такого вида
@RequestScoped
@Path("/customers")
@Produces("text/xml")
public class CustomersService {

    @EJB
    private CustomerBean customerBean;
..............
    @Path("/create")
    @PUT
    @Consumes("application/x-www-form-urlencoded")
    public CustomerDomain create(@FormParam("lastName") String lastName,
                                 @FormParam("firstName") String firstName,
                                 @FormParam("phone") String phone) {

        return customerBean.create(lastName, firstName, phone);
    }
..........
}

2. EJB, DAO - Business Layer
@Stateless(name = "CustomerBean")
public class CustomerBean {

    @Inject
    private DAO dao;

    @PersistenceContext
    EntityManager entityManager;
..............................
    public CustomerDomain create(String lastName, String firstName, String phone) {

        CustomerDomain customerDomain = new CustomerDomain();
        customerDomain.setLastName(lastName);
        customerDomain.setFirstName(firstName);
        customerDomain.setPhone(phone);

        return dao.create(customerDomain);
    }
...............................
}

3. Domain - Data Layer.
тут из Java -сущности, persistence.xml 
а также собственно БД.



Как Вам в целом. Можно ли как-то рефакторить. И правильно ли я тут использую термины
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Приложение Rest+EJB+JPA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]