|
|
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. На прошлой неделе освободилось много рабочего времени и решил часть проекта чуток переписать на PrimeFaces, по сути на JSF. Возникла дилемма (или даже проблема), в силу неглубоких знаний в этой области. Есть файлы сущностей по-другому - Entity bean. Есть управляемые бины - Managed bean. Раньше я использовал только Entity bean, для того, чтобы не дублировать работу с БД и ее структурой, т.е. абстрагироваться от БД и не быть ДБ-админом, так сказать. Теперь с возвращением в мою жизнь JSF, понял, что есть очень много пробелов с основами EJB в целом. Правильно ли я понимаю, что если использовать файлы сущностей и управляемые файлы (Entity Bean и Managed Bean), то поля, например name, age и другие нужно дублировать в обоих файлах? Как такого избежать? Мне это не нравится, но и объединять все в файл сущности не правильно, да и как-то геморройно, нужно будет следить чтобы везде где надо стояли аннотации @Transient. Почитал много примеров, немного статьи про бины, но со структурой так и не разобрался, как ее сделать более менее понятной и универсально - не понятно. Многие статьи написаны еще до появления или просто без использования аннотаций к бинам @ManagedBean... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 14:38:05 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
ManagedBean -работают с EntityManager, содержат методы манипуляции с Entity(сохранить, удалить,обновить), свойства для настройки страницы(например количество отображаемых строк) и тд, в том числе текущий объект Entity для редактирования Entity это объект котрый в базе храниться Netbeans поставь, там есть возможность сгенерировать проект для базы данных с Persistence и Facelets хрошая арх-ра, я использую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 14:49:28 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
Правда под PF надо будет кое что отредактировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 14:56:29 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
Nixic Правильно ли я понимаю, что если использовать файлы сущностей и управляемые файлы (Entity Bean и Managed Bean), то поля, например name, age и другие нужно дублировать в обоих файлах? Нет, не правильно понимаете Nixic Как такого избежать? Не делать этого NixicМне это не нравится, но и объединять все в файл сущности не правильно, да и как-то геморройно, нужно будет следить чтобы везде где надо стояли аннотации @Transient. При чем здесь Transient вообще? С шаблоном MVC знакомы? Он конечно в jsf через одно место сделан, но все же сделан. ManagedBean -это ваш контроллер, методы которого вызываются по действию пользователя(клик и тп), он оперирует EntityBean(модель), которые или инжектятся в контроллер или передаются как параметры в метод через EL. View - это ваша фейслет страница, которая автоматически связывает компоненты на странице и http параметры, в результате получается html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 15:00:49 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
Давайте тогда на примере: Есть Entity: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Есть Managed Bean: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Для того, чтобы дать этому объекту newUser параметр name, т.е. newUser.setName("параметр со страницы"); ну и добавить его с этим параметром в БД. нужно одним из следующих способов передать их со странички с поля <p:inputText> в этот класс UsersMBean. Все верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 15:26:50 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
@Transient был приведен для примера, когда объединяются с ТЕХНИЧЕСКОЙ точки зрения файл сущности и контроллер менеджед бин. Чтобы оно в БД не появлялось в качестве поля таблицы, а лишь использовалось в классе для своих каких-то функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 15:30:13 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
NixicДавайте тогда на примере: Есть Entity: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Есть Managed Bean: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Для того, чтобы дать этому объекту newUser параметр name, т.е. newUser.setName("параметр со страницы"); ну и добавить его с этим параметром в БД. нужно одним из следующих способов передать их со странички с поля <p:inputText> в этот класс UsersMBean. Все верно? Неправильно. У вас энтити тоже может и должен быть @ManagedBean, следовательно вы можете сделать на странице <h:inputText value="#{users.name}"/> Когда вы кликните на кнопку вызовется экшен листенер, в который вы можете инжектнуть юзера и делать с ним все что угодно. JSF автоматом сопоставит инпут и ваш объект, и при инжекте он уже будет содержать нужные значения. Насчет Transient - ок, все правильно, только почему у вас к нему неприязнь? Все логично - не надо сохранять, пометь transient. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 16:11:17 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
Сомнения совмещать @ManagedBean с @Entity появились после прочтения вот этой ветки на одном форуме. Перед тем как " инжектнуть юзера и делать с ним все что угодно" нужно сначала этого юзера откуда-то взять, со старыми у меня все хорошо, я могу их брать и выводить в таблицу на странице. А вот когда я хочу добавить, то сразу же при добавлении у меня никак не получалось добавить ему значение name из инпута. Тем не менее, я внимательно прочитаю завтра, ваши советы и постараюсь добить эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 16:36:46 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
NixicСомнения совмещать @ManagedBean с @Entity появились после прочтения вот этой ветки на одном форуме. Перед тем как " инжектнуть юзера и делать с ним все что угодно" нужно сначала этого юзера откуда-то взять, со старыми у меня все хорошо, я могу их брать и выводить в таблицу на странице. А вот когда я хочу добавить, то сразу же при добавлении у меня никак не получалось добавить ему значение name из инпута. Тем не менее, я внимательно прочитаю завтра, ваши советы и постараюсь добить эту тему. К сожалению приведенная ссылка временно не функционирует. Самому интересно, что там пишут. На мой взгляд, никаких проблем быть не должно и в принципе быть не может. Аннотация @ManagedBean или @Named - всего лишь указатель JSF, что этот класс можно использовать в jsf контексте, в том числе на странице и в других ManagedBean, что в этом плохого? Насчет нового юзера - как вы его пытаетесь добавлять? Вообще ничего не понимаю, на пальцах - делаете User как манагед бин, делаете под нее страничку с формой и инпутами соответствующими)для каждого поля User свой инпут) Делаете кнопку, на нее вешаете листенер, в этом листенере инжектите User, все - jsf автоматом вам проставит все поля, в том числе и name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 17:37:49 |
|
||
|
EJB, JFS, JPA структура проекта.
|
|||
|---|---|---|---|
|
#18+
NixicСомнения совмещать @ManagedBean с @Entity появились после прочтения вот этой ветки на одном форуме. Перед тем как " инжектнуть юзера и делать с ним все что угодно" нужно сначала этого юзера откуда-то взять, со старыми у меня все хорошо, я могу их брать и выводить в таблицу на странице. А вот когда я хочу добавить, то сразу же при добавлении у меня никак не получалось добавить ему значение name из инпута. Тем не менее, я внимательно прочитаю завтра, ваши советы и постараюсь добить эту тему. Ага, наконец-то открылось. Почитал весь тред, надо сказать аргументы смешные, вроде "это идеологически неправильно" и "все уже было обьяснено в предыдущих постах" и "это антипаттерн". Так как предыдущие посты было лень искать, то пришлось додумывать за них. Итак - бывает два варианта - когда страница простецкая, и поля энтити мапятся практически один в один на поля формы. В этом случае использовать еще один слой - это и есть самый большой антипаттерн. Другой случай - когда на форме несколько полей, или на форме много полей не имеющих отношения к самой энтити, или если есть несколько страниц для одной энтити - но у всех разный вид. В таком случае, действительно, бывает полезно ввести дополнительный слой в виде DTO, по сути обертки над энтити и именно их делать манагед бинами. В общем везде нужен баланс. Еще они аппелируют, что мол засирается сессия - ну а dto она не засирается? Бред, да и засирается только у неопытных или быдлокодеров, потому что практически всегда надо юзать скоуп реквест. Ну как-то так, надеюсь прояснил вам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 17:56:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38094966&tid=2130282]: |
0ms |
get settings: |
20ms |
get forum list: |
30ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
79ms |
get topic data: |
24ms |
get forum data: |
5ms |
get page messages: |
96ms |
get tp. blocked users: |
3ms |
| others: | 329ms |
| total: | 602ms |

| 0 / 0 |
