|
|
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Какая есть популярная замена для Hibernate? Желательно, которую лично использовали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 09:04 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
scymaksКакая есть популярная замена для Hibernate? Желательно, которую лично использовали. самому надо, да нет ничего, кроме iBatis и JDBC ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 09:19 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123самому надо, да нет ничего http://www.jpab.org/ там jpa, но чоб и нет + gorm, apache cayenne ps mybatis ps а в целом - http://java-source.net/open-source/persistence ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 09:31 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Надо отталкиваться не от того, ЧТО есть, а от того, ЗАЧЕМ вам это, и ЧЕМ не устравивает HIbernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 09:36 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
svenomНадо отталкиваться не от того, ЧТО есть, а от того, ЗАЧЕМ вам это, и ЧЕМ не устравивает HIbernate.ну, а если просто для расширения кругозора? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 09:37 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
grasoff.net, ну, я исходил, из популярности продукта. gorm - ни одной ссылки у нас за год :( imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 09:38 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
scymaksКакая есть популярная замена для Hibernate? Желательно, которую лично использовали.TopLink / EclipseLink from GlassFish. Это если нужен ORM. В ином случае JDBC и Spring обертки для него. Хотя вопрос ЗАЧЕМ заменять? есть очень интересные проекты типа envers который только под Hibernate и существует, но позволяет изящно решить класс проблем связанных с логированием изменений в данных. Я заменяю hibernate только если есть серьезные противопоказания к его применению. В любом другом случае Hibernate и точка! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 10:36 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Пробовал DataNucleus. Неплох. Вообще альтернатив полно, нужно только разобраться с классификацией. Например iBatis - это средство для управления SQL кодом а не ORM. Вторая огромная группа - JPA / JDO средства. Список там большой. И DataNucleus, и Oracle TopLink и EclipseLink Есть и Spring Data JPA. Третья, ORMы. Знаю два, упомянутый Hibernate и Apache Cayenne. То есть вначале стоит определиться, а чем Hibernate не нравится. Идеологией ORMа (кстати Hibernate это такой навороченный JPA. Утрировано конечно)? или есть уже готовая база, разработанная в отрыве от применения для Java. Тогда iBatis, или из его группы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:02 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
SkyNIN, у iBatis разве нет маппинг\сериализации объектов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:29 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
SkyNINэто средство для управления SQL кодом расплывчатое понятие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:31 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123SkyNIN, у iBatis разве нет маппинг\сериализации объектов? В Apache Commons DBUtils есть сериализация ResultSet в объекты. ORM-ом оно от этого не становится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:32 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
SkyNINВторая огромная группа - JPA / JDO средства. Список там большой. И DataNucleus, и Oracle TopLink и EclipseLink Есть и Spring Data JPA. Третья, ORMы. Знаю два, упомянутый Hibernate и Apache Cayenne. То есть вначале стоит определиться, а чем Hibernate не нравится. Идеологией ORMа ( кстати Hibernate это такой навороченный JPA . Утрировано конечно)? Вы все напутали. ORMы это библиотеки/фреймворки: Hibernate, TopLink, EclipseLink, Cayenne, OpenJPA. JPA - это стандарт, набор интерфейсов. К большинству современных ORM есть "коннекторы", которые позволяют работать с ними через JPA интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:33 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123у iBatis разве нет маппинг\сериализации объектов? Вопрос в том кто пишет код для работы с БД. для iBatis - программист. ORM - обязан генерить его сам. В идеале :) Про iBatis да, стоит добавить: ... и средство управления парсингов результатов запроса в требуемые объекты. BlazkowiczВ Apache Commons DBUtils есть сериализация ResultSet в объекты. ORM-ом оно от этого не становится. Да, и я о том. svenomВы все напутали. Хорошо, соглашусь. Вторую группу я пытался выделить по принципу как и первую, сколько JPQL нужно написать самому, а сколько - генерирует сам ORM. Но пожалуй тут различие количественное а не качественное. Тот же DataNucleus сам управляет работой по чтению-сохранению вообще с другого типа базой - db4o не имеющей встроенного JPA интерфейса. А вот между iBatis и Hibernate - качественное различие. Так да, две группы получаются, а не три: мапперы, парсеры и иные обвески вокруг JDBC (или иного драйвера. Написал когда маппер для работы с MUMPS базой) ORMы, часто с расширением стандартов JPA или JDO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:51 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123SkyNIN, у iBatis разве нет маппинг\сериализации объектов? В Apache Commons DBUtils есть сериализация ResultSet в объекты. ORM-ом оно от этого не становится. ну, DBUtils я не знаю. Возможно там действительно одни статик-методы и всё. Было бы глупо травить Единственный облегчённый Хибер для Java http://www.ibm.com/developerworks/java/library/os-ibatis3/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 14:58 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
SkyNIN, чёт вы много и путано _классифицировали_, но в результате осталось...... 1-2-3 решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:01 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Начинал с Apache OJB в самом начале программирования на Java (перенял с чужого проекта). Альтернатива ли? - Вряд ли, очень простой ОРМ. Плюс - компактность (на этом наверняка все плюсы заканчиваются). Огромный минус в работе - обязательное наличие 6-8 вспомагательных таблиц в базе для внутреннего использования. Также не поддерживает(-вал) аннотации. Возможно, что-то за 3-4 года поменялось, но вряд ли - уж больно проект затухающий и нежизнеспособный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:05 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123, Погуглите на предмет JPA реализаций. из вики: Vendors supporting JPA 2.0: DataNucleus (formerly JPOX) EclipseLink (formerly Oracle TopLink) JBoss Hibernate ObjectDB - (не реляционная база, сейчас как раз пробую в использовании, вместо DataNucleus+db4o. Для декстопного клиента, потому что очень шустрая на чтение-запись) OpenJPA IBM, via its OpenJPA-based Feature Pack for OSGi Applications and JPA 2.0 for WebSphere Application Server Потом и JDO можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:12 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
SkyNIN, как мы любим всё усложнять. Сабж про ОРМ а не JPA. Т.к. пришли в этот форум, а не гугль, то и Гуглить :) предпочитаю здесь. Ждёмс... афтора топика. ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:31 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Автор топика здесь. Внимательно прочитал каждый пост. Теперь он будет думать. Ну вообще, это заказчик отказывается от Hibernate: "Тяжко и много. И вообще он сложный и медленный! У нас всегда из-за него проблемы с проектами были!" Вот так вота... Так что вот теперь ищем замену. Посмотрю позже всё описанное ниже. Обязательно отпишусь. Всем большое спасибо за такую полезную информацию и личное время! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:43 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
scymaks, колись конкретнее - что тормозило \ профайлер... Зря что ли писали :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:48 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123, я еще не в курсе. Меня только поставили на этот проект. Надо будет узнавать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:49 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
scymaksАвтор топика здесь. Внимательно прочитал каждый пост. Теперь он будет думать. Ну вообще, это заказчик отказывается от Hibernate: "Тяжко и много. И вообще он сложный и медленный! У нас всегда из-за него проблемы с проектами были!" Вот так вота... Так что вот теперь ищем замену. Посмотрю позже всё описанное ниже. Обязательно отпишусь. Всем большое спасибо за такую полезную информацию и личное время! Остаётся iBatis. Остальные JPA реализации не особо проще Hibernate. Если вы и начальство боитесь осилить ORM, остаётся писать SQL самим - iBatis здесь главный помошник. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:49 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
scymaks, про topLink немного критики, когда сам искал: http://www.anydoby.com/jblog/ru/java/2 http://www.javatalks.ru/sutra77201.php Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:52 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Petro123про topLink немного критики, когда сам искал: Они все в той или иной степени глючные. Говорят topLink быстрее чем хибернейт на оракле. Правда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 15:57 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
ActiveJDBC - лайтвейт реализация паттерна ActiveRecord, http://code.google.com/p/activejdbc. Если кратко в чем преимущества и недостатки - очень легко ложится когда структура базы не очень сложная и контролируется разработчиком, так как основан на convention over configuration, нет никаких персистенс контекстов, сессий и т.д. настройка минимальна. поддерживает кэшинг, асооциации, лейзи лоадинг, листенеры и кучу всего. Очень легко тестируется Из минусов - есть зависимости от классов фреймворка(не true POJO), что как по мне не так уж и критично. Главный минус - на этапе сборки необходима инструментация, но она легко настраивается, но так как классы инструментированы работа при дебаге и из IDE немного затруднена, работаем над этим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 16:15 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
А и еще не поддерживает JPA, кому-то возможно это будет существенным минусом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 16:16 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123про topLink немного критики, когда сам искал: Они все в той или иной степени глючные. Говорят topLink быстрее чем хибернейт на оракле. Правда? про скорость не слышал. Очень уж трудный критерий для данного класса ПО. Ложек дёгтя больше про него слышал чем про другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 16:27 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
BlazkowiczГоворят topLink быстрее чем хибернейт на оракле. Правда?нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 16:28 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Добрый день, забыл ник! > http://code.google.com/p/activejdbc. > Главный минус - на этапе сборки > необходима инструментация, но она легко настраивается, но так как классы > инструментированы работа при дебаге и из IDE немного затруднена, > работаем над этим. Ну по мне, так инструментация при загрузке (хибер) точно не лучше :) А как это применимо к разработке JavaEE? 1. Вообще возможна работа внутри Stateless? 2. Запуск клиента на машине разработчика обычно происходит из eclipse без мавена, т.е. инструментации на клиенте не будет. Но все запросы только с AS, т.е. там будет. Это нормально? 3. Что будет, если я пытаюсь получить LAZY на клиенте, т.е. вне сессии? Можно ли вешать некий листинер, который при этом будет вызывать обращение к AS и получение необходимых данных? Пример - есть "клиент" у него "адрес" у адреса "улица", "город", "ПО", ещё всякая фигня. Хочется, с одной стороны, обойтись загрузкой адреса, с другой- получать что нужно без проблем. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 17:14 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
тут немного другая инструментация, хибер создает прокси, тогда как ActiveJDBC, добавляет методы в основном статические прямо в класс модели, поэтому когда открываешь из эклипса файл мождели - то он пишет что сорс нот фаунд, но если открыть класс модели через ctrl_shift+r то его сорсы ты увидишь, брейкпоинты тоже ставить, в общем недостаток, но не критичный. Жить можно. Зачем добавляются статические методы? Чтобы можно было делать вещи вроде Person.findById() и т.д.. 1. Вообще возможна работа внутри Stateless? - не совсем понял, поясните плиз. 2. Запуск клиента на машине разработчика обычно происходит из eclipse без мавена, т.е. инструментации на клиенте не будет. Но все запросы только с AS, т.е. там будет. Это нормально? - Опять не совсем понял, обьясняю, что клиент что сервер будут зависеть от какой-то либы с классами модели, эта либа получается при сборке после фазы инструментации, таким образом она видна будет что там, что там, я ответил на вопрос? 3. Что будет, если я пытаюсь получить LAZY на клиенте, т.е. вне сессии? Можно ли вешать некий листинер, который при этом будет вызывать обращение к AS и получение необходимых данных? Пример - есть "клиент" у него "адрес" у адреса "улица", "город", "ПО", ещё всякая фигня. Хочется, с одной стороны, обойтись загрузкой адреса, с другой- получать что нужно без проблем.----------- AJ вообще не закрывает сессию, на пальцах как это работает - ты создаешь фильтр, в начале реквеста вызываешь DB.getConnection() и она автоматом ложится в ThreadLocal, при любом запросе любого метода модели, коннекшн берется из ThreadLocal transparent. В конце запроса коннекшн из тредлокал изымается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 17:46 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
брейкпоинты ставить можно, а то я немного сумбурно описал. Просто когда дебажишь когда доходит до класса модели - показывает типа сорс файла нет, а на самом деле ты его можешь открыть и смотреть че там внутри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 17:48 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Добрый день, забыл ник! > 1. Вообще возможна работа внутри Stateless? - не совсем понял, поясните > плиз. Я просто не знаю- может есть какие-то камни подводные. > я ответил на вопрос? Примерно. > AJ вообще не закрывает сессию, Ещё раз. На AS получил объект. Передал его через RMI на клиента. Там попросил данные, которые LAZY. Что будет? EJB2, насколько я знаю древности, дозапросит данные, но оракловые админы хотели запиннать того, кто это придумал. EJB3 просто пошлёт нафиг. Что сделается тут? -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 18:22 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
авторЕщё раз. На AS получил объект. Передал его через RMI на клиента. Там попросил данные, которые LAZY. Что будет? EJB2, насколько я знаю древности, дозапросит данные, но оракловые админы хотели запиннать того, кто это придумал. EJB3 просто пошлёт нафиг. Что сделается тут? Понял, класс будет искать коннекшн в треадлокале и обломится. Вообще очень интересный поинт, раньше рассматривал только в контексте веб-приложений, надо будет подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 19:10 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraЕщё раз. На AS получил объект. Передал его через RMI на клиента. Там попросил данные, которые LAZY. Что будет?Давайте начнем с того, что мы никак не можем передать через RMI клиенту неинициализированное поле. Просто напросто потому, что оно несериализуемо. А если бы оно и было сериализуемо, то клиент все равно не смог бы его десериализовать, ибо на месте неинициализированных полей стоят прокси, чей байт-код формируется в runtime-е. Как быть в этом случае? А в этом случае надо вспоминать про J2EE паттерны, в частности про Data Transfer Object. забыл никПонял, класс будет искать коннекшн в треадлокале и обломится. Вообще очень интересный поинт, раньше рассматривал только в контексте веб-приложений, надо будет подумать.Это неправда. Какой коннекшн? В каком треад-локале? На клиенте нет ни того, ни другого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 19:42 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никПонял, класс будет искать коннекшн в треадлокале и обломится. Вообще очень интересный поинт, раньше рассматривал только в контексте веб-приложений, надо будет подумать.Это неправда. Какой коннекшн? В каком треад-локале? На клиенте нет ни того, ни другого.[/quot] так именно потому и обломится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 19:46 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
svenomGKS_SamaraЕщё раз. На AS получил объект. Передал его через RMI на клиента. Там попросил данные, которые LAZY. Что будет?Давайте начнем с того, что мы никак не можем передать через RMI клиенту неинициализированное поле. Просто напросто потому, что оно несериализуемо. А если бы оно и было сериализуемо, то клиент все равно не смог бы его десериализовать, ибо на месте неинициализированных полей стоят прокси, чей байт-код формируется в runtime-е. Как быть в этом случае? А в этом случае надо вспоминать про J2EE паттерны, в частности про Data Transfer Object. Мы не про Хибернейт сейчас кстати. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 19:49 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никМы не про Хибернейт сейчас кстати.Ок, а про что? Вы думаете другие ORM-фреймфорки как-то принципиально иначе работают с LAZY-зависимостями? Что бы она инициализировалась на лету, прозрачно для программиста, всегда необходимо иметь на ее месте некую заглушку. При нормальном проектировании, клиент ничего про эти заглушки знать не должен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 20:06 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никтак именно потому и обломитсяГде именно обломится? И что за ThreadLocal и Connection вы имеете ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 20:10 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
svenomзабыл никМы не про Хибернейт сейчас кстати.Ок, а про что? Вы думаете другие ORM-фреймфорки как-то принципиально иначе работают с LAZY-зависимостями? Что бы она инициализировалась на лету, прозрачно для программиста, всегда необходимо иметь на ее месте некую заглушку. При нормальном проектировании, клиент ничего про эти заглушки знать не должен. Естественно нужна заглушка, но не факт что это будет прокси да еще с байт-кодом сгенеренным в рантайм. В данном случае это наследник AbstractList, который на каждый метод проверяет инициализирован ли он и если нет, то пытается получить коннекшн и загрузить себя. А про что речь, как бы изначально нужно знать прежде чем писать ответы:) Выше по топику посмотри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 20:32 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никЕстественно нужна заглушка, но не факт что это будет прокси да еще с байт-кодом сгенеренным в рантайм. В данном случае это наследник AbstractList, который на каждый метод проверяет инициализирован ли он и если нет, то пытается получить коннекшн и загрузить себя.Ну во-первых, то, что вы описали, это уже и есть прокси. Во-вторых, вы привели случай One-To-Many, когда у нас есть неинициализированный список. А вот что делать, если у меня *-To-One отношение? Тут уже надо наследоваться от типа конкретного члена класса, и это вам ответ на вопрос, почему без байт-кода в рантайме не обойтись. В-третьих, если даже такую хренотень удалось сериализовать и десериализовать, то клиент получает опасный код, который может завалить его приложение, что является грубейшей ошибкой проектирования. Вывод: на удаленного клиента никогда и ни при каких условиях не передаются неинициализированные сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 20:43 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
svenomзабыл никЕстественно нужна заглушка, но не факт что это будет прокси да еще с байт-кодом сгенеренным в рантайм. В данном случае это наследник AbstractList, который на каждый метод проверяет инициализирован ли он и если нет, то пытается получить коннекшн и загрузить себя.Ну во-первых, то, что вы описали, это уже и есть прокси. Во-вторых, вы привели случай One-To-Many, когда у нас есть неинициализированный список. А вот что делать, если у меня *-To-One отношение? Тут уже надо наследоваться от типа конкретного члена класса, и это вам ответ на вопрос, почему без байт-кода в рантайме не обойтись. В-третьих, если даже такую хренотень удалось сериализовать и десериализовать, то клиент получает опасный код, который может завалить его приложение, что является грубейшей ошибкой проектирования. Вывод: на удаленного клиента никогда и ни при каких условиях не передаются неинициализированные сущности. Насчет прокси я не так выразился, да естественно это будет паттерн прокси, я неправильно вас понял, я думал имеются ввиду сгенерированные классы Proxy, которые находятся в java.lang.reflect. Ну это так, к слову. Я согласен что нужна заглушка, сойдемся на этом. А вот насчет - авторесли у меня *-To-One отношение? Тут уже надо наследоваться от типа конкретного члена класса, и это вам ответ на вопрос, почему без байт-кода в рантайме не обойтись. Зачем наследоваться? можно на момент инициализации орм узнать реальный тип parent, сохранить его в метаданных, в момент вызова getParent() проверять isInitialized, и если нет - то запрашивать у БД и возвращать приведя к типу сохраненному в метаданных. Зачем рантайм байт код? авторВ-третьих, если даже такую хренотень удалось сериализовать и десериализовать, то клиент получает опасный код, который может завалить его приложение, что является грубейшей ошибкой проектирования. Вывод: на удаленного клиента никогда и ни при каких условиях не передаются неинициализированные сущности. Тут не спорю. Просто интересно стало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 21:05 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
забыл никЗачем наследоваться? можно на момент инициализации орм узнать реальный тип parent, сохранить его в метаданных, в момент вызова getParent() проверять isInitialized, и если нет - то запрашивать у БД и возвращать приведя к типу сохраненному в метаданных. Зачем рантайм байт код? Ок, вот у нас ентити: Код: java 1. 2. 3. 4. 5. 6. И вот у нас ентити: Код: java 1. 2. 3. 4. 5. 6. Департамент загружается лениво. Теперь задача такова - нам надо, когда инстанс Employee окажется на клиенте, чтобы вызов метода getDepartment() привел к подгрузке департамента (допустим, что это возможно). Как нам этого добиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 21:16 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Да давайте для просто вообще выкинем удаленного клиента, все происходит в рамках одной JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 21:17 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Да легко. Код: 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. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. Ну естественно это для одного JVM, для разных нет смысла, соглашусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 21:57 |
|
||
|
[ ORM ] Альтернатива Hibernate
|
|||
|---|---|---|---|
|
#18+
Не, это никуда не годиться. Два главных минуса: 1) Вы лишили пользователя вашей библиотеки возможности реализовывать наследование. То есть, вот с таким случаем ваша реализация не справиться: Код: java 1. 2. 3. 2) Второй минус - вы намертво привязали сущности к вашей библиотеке. Ежели вдруг решили перейти на другой ORM - пиши пропало. Возвращаясь к варианту с Employee и Department, я вижу 3 варианта решения: 1) Оборачиваем Employee в прокси через bytecode instrumentation - на лету экстендим прокси от Employee. оверрайдим getDepartment(). 2) Оборачиваем Department в прокси через bytecode instrumentation - на лету экстендим прокси от Department, оверрайдим все геттеры/сеттеры, чтобы при обращении к неинициализированному объекту, они вытаскивали его из базы. Так работает хибер. 3) Вариант без игр с байт-кодом. При сборке проекта прогоняем наши сущности через какую-нибудь утилиту, которая обернет их в прокси. Так, например, работает JiBX (хоть это и не ORM, а средство генерации классов из WSDL/XSD, но идея та же). На выходе имеем джарник, в котором вроде бы лежат наши классы, но по факту там еще куча всего нового добавлено. Главная беда такого подхода - неудобно распространять. То есть высылать такую либу какому-нибудь стороннему клиенту - это, все равно, что плюнуть ему в лицо - вместо тупой работы с get/set, ему придется еще париться об отлове всяких интересных исключений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2011, 22:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2127815]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
303ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 585ms |

| 0 / 0 |
