powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB, JFS, JPA структура проекта.
10 сообщений из 10, страница 1 из 1
EJB, JFS, JPA структура проекта.
    #38094947
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

На прошлой неделе освободилось много рабочего времени и решил часть проекта чуток переписать на PrimeFaces, по сути на JSF.
Возникла дилемма (или даже проблема), в силу неглубоких знаний в этой области.

Есть файлы сущностей по-другому - Entity bean.
Есть управляемые бины - Managed bean.
Раньше я использовал только Entity bean, для того, чтобы не дублировать работу с БД и ее структурой, т.е. абстрагироваться от БД и не быть ДБ-админом, так сказать.
Теперь с возвращением в мою жизнь JSF, понял, что есть очень много пробелов с основами EJB в целом.

Правильно ли я понимаю, что если использовать файлы сущностей и управляемые файлы (Entity Bean и Managed Bean), то поля, например name, age и другие нужно дублировать в обоих файлах?
Как такого избежать?
Мне это не нравится, но и объединять все в файл сущности не правильно, да и как-то геморройно, нужно будет следить чтобы везде где надо стояли аннотации @Transient.

Почитал много примеров, немного статьи про бины, но со структурой так и не разобрался, как ее сделать более менее понятной и универсально - не понятно. Многие статьи написаны еще до появления или просто без использования аннотаций к бинам @ManagedBean...
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38094966
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ManagedBean -работают с EntityManager, содержат методы манипуляции с Entity(сохранить, удалить,обновить), свойства для настройки страницы(например количество отображаемых строк) и тд, в том числе текущий объект Entity для редактирования
Entity это объект котрый в базе храниться
Netbeans поставь, там есть возможность сгенерировать проект для базы данных с Persistence и Facelets хрошая арх-ра,
я использую
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38094984
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда под PF надо будет кое что отредактировать
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38094992
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic
Правильно ли я понимаю, что если использовать файлы сущностей и управляемые файлы (Entity Bean и Managed Bean), то поля, например name, age и другие нужно дублировать в обоих файлах?

Нет, не правильно понимаете
Nixic Как такого избежать?

Не делать этого
NixicМне это не нравится, но и объединять все в файл сущности не правильно, да и как-то геморройно, нужно будет следить чтобы везде где надо стояли аннотации @Transient.

При чем здесь Transient вообще?
С шаблоном MVC знакомы? Он конечно в jsf через одно место сделан, но все же сделан. ManagedBean -это ваш контроллер, методы которого вызываются по действию пользователя(клик и тп), он оперирует EntityBean(модель), которые или инжектятся в контроллер или передаются как параметры в метод через EL. View - это ваша фейслет страница, которая автоматически связывает компоненты на странице и http параметры, в результате получается html
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38095029
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте тогда на примере:
Есть Entity:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
public class Users implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private Integer name;

 // геттеры и сеттеры здесь

}



Есть Managed Bean:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@ManagedBean
@SessionScoped
public class UsersMBean {

    public UsersMBean() {
    }

// метод, которые создают новый объект, аля Users newUser = new Users();  и добавляют его в БД, через entityManager, persist и прочее.
 
}



Для того, чтобы дать этому объекту newUser параметр name, т.е.
newUser.setName("параметр со страницы"); ну и добавить его с этим параметром в БД.
нужно одним из следующих способов передать их со странички с поля <p:inputText> в этот класс UsersMBean. Все верно?
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38095035
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@Transient был приведен для примера, когда объединяются с ТЕХНИЧЕСКОЙ точки зрения файл сущности и контроллер менеджед бин. Чтобы оно в БД не появлялось в качестве поля таблицы, а лишь использовалось в классе для своих каких-то функций.
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38095114
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicДавайте тогда на примере:
Есть Entity:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
public class Users implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private Integer name;

 // геттеры и сеттеры здесь

}



Есть Managed Bean:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@ManagedBean
@SessionScoped
public class UsersMBean {

    public UsersMBean() {
    }

// метод, которые создают новый объект, аля Users newUser = new Users();  и добавляют его в БД, через entityManager, persist и прочее.
 
}



Для того, чтобы дать этому объекту newUser параметр name, т.е.
newUser.setName("параметр со страницы"); ну и добавить его с этим параметром в БД.
нужно одним из следующих способов передать их со странички с поля <p:inputText> в этот класс UsersMBean. Все верно?


Неправильно. У вас энтити тоже может и должен быть @ManagedBean, следовательно вы можете сделать на странице <h:inputText value="#{users.name}"/> Когда вы кликните на кнопку вызовется экшен листенер, в который вы можете инжектнуть юзера и делать с ним все что угодно. JSF автоматом сопоставит инпут и ваш объект, и при инжекте он уже будет содержать нужные значения. Насчет Transient - ок, все правильно, только почему у вас к нему неприязнь? Все логично - не надо сохранять, пометь transient.
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38095169
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сомнения совмещать @ManagedBean с @Entity появились после прочтения вот этой ветки на одном форуме.
Перед тем как " инжектнуть юзера и делать с ним все что угодно" нужно сначала этого юзера откуда-то взять, со старыми у меня все хорошо, я могу их брать и выводить в таблицу на странице. А вот когда я хочу добавить, то сразу же при добавлении у меня никак не получалось добавить ему значение name из инпута. Тем не менее, я внимательно прочитаю завтра, ваши советы и постараюсь добить эту тему.
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38095284
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicСомнения совмещать @ManagedBean с @Entity появились после прочтения вот этой ветки на одном форуме.
Перед тем как " инжектнуть юзера и делать с ним все что угодно" нужно сначала этого юзера откуда-то взять, со старыми у меня все хорошо, я могу их брать и выводить в таблицу на странице. А вот когда я хочу добавить, то сразу же при добавлении у меня никак не получалось добавить ему значение name из инпута. Тем не менее, я внимательно прочитаю завтра, ваши советы и постараюсь добить эту тему.

К сожалению приведенная ссылка временно не функционирует. Самому интересно, что там пишут. На мой взгляд, никаких проблем быть не должно и в принципе быть не может. Аннотация @ManagedBean или @Named - всего лишь указатель JSF, что этот класс можно использовать в jsf контексте, в том числе на странице и в других ManagedBean, что в этом плохого?
Насчет нового юзера - как вы его пытаетесь добавлять? Вообще ничего не понимаю, на пальцах - делаете User как манагед бин, делаете под нее страничку с формой и инпутами соответствующими)для каждого поля User свой инпут) Делаете кнопку, на нее вешаете листенер, в этом листенере инжектите User, все - jsf автоматом вам проставит все поля, в том числе и name
...
Рейтинг: 0 / 0
EJB, JFS, JPA структура проекта.
    #38095305
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicСомнения совмещать @ManagedBean с @Entity появились после прочтения вот этой ветки на одном форуме.
Перед тем как " инжектнуть юзера и делать с ним все что угодно" нужно сначала этого юзера откуда-то взять, со старыми у меня все хорошо, я могу их брать и выводить в таблицу на странице. А вот когда я хочу добавить, то сразу же при добавлении у меня никак не получалось добавить ему значение name из инпута. Тем не менее, я внимательно прочитаю завтра, ваши советы и постараюсь добить эту тему.

Ага, наконец-то открылось. Почитал весь тред, надо сказать аргументы смешные, вроде "это идеологически неправильно" и "все уже было обьяснено в предыдущих постах" и "это антипаттерн". Так как предыдущие посты было лень искать, то пришлось додумывать за них.
Итак - бывает два варианта - когда страница простецкая, и поля энтити мапятся практически один в один на поля формы. В этом случае использовать еще один слой - это и есть самый большой антипаттерн. Другой случай - когда на форме несколько полей, или на форме много полей не имеющих отношения к самой энтити, или если есть несколько страниц для одной энтити - но у всех разный вид. В таком случае, действительно, бывает полезно ввести дополнительный слой в виде DTO, по сути обертки над энтити и именно их делать манагед бинами. В общем везде нужен баланс.

Еще они аппелируют, что мол засирается сессия - ну а dto она не засирается? Бред, да и засирается только у неопытных или быдлокодеров, потому что практически всегда надо юзать скоуп реквест.
Ну как-то так, надеюсь прояснил вам
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB, JFS, JPA структура проекта.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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