Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

RMI и JPA
Список форумов
 ->  Персистентность в Java (JPA, ORM, ODB)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
pjotar : 453
Бывалый
Откуда: Санкт-Петербург

СообщениеМай 09, 2010 9:55 
Ответить с цитатой
Передаю @Entity клиенту(апплету) по RMI. В jar клиента приходиться класть всякие IndirectList.class, DatabaseQuery.class вообщем часть реализации JPA.

Правильно ли я догадываюсь, что с @Entity классом нужно сделать что-то перед тем, как передавать?
К началу Посмотреть профиль Отправить личное сообщение
i_home : 10
Новичок

СообщениеМай 11, 2010 2:07 
Ответить с цитатой
Как вариант перенести аннотации в orm.xml, оставив в проекте только plain классы.
Я в таких случаях всегда так делаю.
К началу Посмотреть профиль Отправить личное сообщение
pjotar : 453
Бывалый
Откуда: Санкт-Петербург

СообщениеДек 26, 2011 11:20 
Ответить с цитатой
Спасибо, ещё пара вопросов:

1. JPA провайдер занимается кодогенерацией, подсовывет изменённые Entity-классы? Например, какие-нибудь прокси?

2. Метод EntityManager.detach(entity) может помоч? Нужно ли делать detach перед передачей по RMI?
К началу Посмотреть профиль Отправить личное сообщение
i_home : 10
Новичок

СообщениеДек 26, 2011 20:43 
Ответить с цитатой
Коротко - нет,
и от зависимостей это не избавит.
Вообще detach для другого, он нужен чтобы объект не синхронизировал изменеия с базой, тоесть при изменении detached бина в managed контексте, по завершении транзакции изменения просто не будут занесены в базу.
А вот при получении модифицированных бинов с клиентской строны, для того чтобы сохранить именения в базе, перед персистом их нажо мерджить.
Примерно так.
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4801
Я тут живу!
Откуда: Москва, Россия

СообщениеДек 27, 2011 10:19 
Ответить с цитатой
pjotar писал(а):
Спасибо, ещё пара вопросов:

1. JPA провайдер занимается кодогенерацией, подсовывет изменённые Entity-классы? Например, какие-нибудь прокси?

2. Метод EntityManager.detach(entity) может помоч? Нужно ли делать detach перед передачей по RMI?


Есть Data Access Object (DAO), а есть Data Transfer Object (DTO). Вот DTO как раз и нужны, чтобы передавать данные без учета всех связей с ORM. Как правило, DTO формируется на основе DAO с передачей через конструктор. Обратно - либо getDAO возвращает новый DAO-объект, либо updateDAO обновляет существующий DAO.

Да, разумеется, DAO и DTO не обязаны быть один в один.
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shogun : 67
Новичок

СообщениеДек 27, 2011 19:53 
Ответить с цитатой
Skipy писал(а):

Есть Data Access Object (DAO), а есть Data Transfer Object (DTO). Вот DTO как раз и нужны, чтобы передавать данные без учета всех связей с ORM. Как правило, DTO формируется на основе DAO с передачей через конструктор. Обратно - либо getDAO возвращает новый DAO-объект, либо updateDAO обновляет существующий DAO.

Да, разумеется, DAO и DTO не обязаны быть один в один.

DTO - паттерн, который должен использоваться как можно реже. Сейчас его можно увидеть на очень старых проектах, в которых используется EJB 2.0. Порой доводилось видеть манию использования этого паттерна в проектах, где половина разработчиков так и не вкусила прелестей EJB 3.0 и JPA.

Думаю, что вполне нормально передавать Entity(главное не забыть пометить ее как сериализуемую), и detach произойдет в любом случае: или при завершении транзакции, или перед передачей по RMI.
К началу Посмотреть профиль Отправить личное сообщение
nullvoid : 505
Постоянный посетитель
Откуда: Красноярск

СообщениеДек 28, 2011 7:33 
Ответить с цитатой
Shogun писал(а):
Skipy писал(а):

Есть Data Access Object (DAO), а есть Data Transfer Object (DTO). Вот DTO как раз и нужны, чтобы передавать данные без учета всех связей с ORM. Как правило, DTO формируется на основе DAO с передачей через конструктор. Обратно - либо getDAO возвращает новый DAO-объект, либо updateDAO обновляет существующий DAO.

Да, разумеется, DAO и DTO не обязаны быть один в один.

DTO - паттерн, который должен использоваться как можно реже. Сейчас его можно увидеть на очень старых проектах, в которых используется EJB 2.0. Порой доводилось видеть манию использования этого паттерна в проектах, где половина разработчиков так и не вкусила прелестей EJB 3.0 и JPA.

Думаю, что вполне нормально передавать Entity(главное не забыть пометить ее как сериализуемую), и detach произойдет в любом случае: или при завершении транзакции, или перед передачей по RMI.

А если dto не соответствует один в один сущности, что тогда прикажете делать?
_________________
http://LinguaLeo.ru/r/8b3o08
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Shogun : 67
Новичок

СообщениеДек 28, 2011 16:47 
Ответить с цитатой
nullvoid писал(а):
Shogun писал(а):
Skipy писал(а):

Есть Data Access Object (DAO), а есть Data Transfer Object (DTO). Вот DTO как раз и нужны, чтобы передавать данные без учета всех связей с ORM. Как правило, DTO формируется на основе DAO с передачей через конструктор. Обратно - либо getDAO возвращает новый DAO-объект, либо updateDAO обновляет существующий DAO.

Да, разумеется, DAO и DTO не обязаны быть один в один.

DTO - паттерн, который должен использоваться как можно реже. Сейчас его можно увидеть на очень старых проектах, в которых используется EJB 2.0. Порой доводилось видеть манию использования этого паттерна в проектах, где половина разработчиков так и не вкусила прелестей EJB 3.0 и JPA.

Думаю, что вполне нормально передавать Entity(главное не забыть пометить ее как сериализуемую), и detach произойдет в любом случае: или при завершении транзакции, или перед передачей по RMI.

А если dto не соответствует один в один сущности, что тогда прикажете делать?

Если случаи единичные, то это как раз те случаи, где DTO может быть применен как решение, но я предпочитаю использовать Adapter'ы(Завернуть одну или несколько entity, c подсчетом, добавлений полей и т.п. Это отдельная тема, для нее можно и отдельный топик создать). Если же DTO применяется очень часто - пересмотрите дизайн и архитектуру(разумеется, я не имею ввиду проекты, где используется EJB 2.0).
К началу Посмотреть профиль Отправить личное сообщение
Mam(O)n : 61
Новичок

СообщениеДек 29, 2011 0:49 
Ответить с цитатой
pjotar писал(а):
Спасибо, ещё пара вопросов:
1. JPA провайдер занимается кодогенерацией, подсовывет изменённые Entity-классы?
Как раз недавно напоролся на то, что eclipselink производит модифицированные объекты (google: eclipselink weaving), добавляя дополнительные поля, хранящие информацию о ленивых отношениях и изменениях, произошедших в объекте. Но в моём случае была CORBA и вместо того, чтоб ругаться я получал на удалённой стороне объекты с непроинициализированными полями. Как тут себя поведёт RMI я затрудняюсь сказать. В моём случае нужно было на клиенте иметь идентично изменённые объекты, которые можно получить используя специального агента или произведя т.н. static weaving на этапе сборки проекта.
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Персистентность в Java (JPA, ORM, ODB)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru