![]() |
Модераторы: LSD, AntonSaburov Страницы: (29) « Первая ... 8 9 [10] 11 12 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
Stampede |
|
||||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Всем привет, я вернулся!
Очень рад, что дело не стояло на месте. Теперь вот какой важный момент.
Это исключительно хорошая новость! Очень жаль, что в документации по JPA этот момент не акцентруется. Я ведь говорю: я заходил, читал материалы, в том числе Java Persistence API FAQ. Везде разговор о JPA ведется в контексте EJB и EE. А вот тут так и вообще открытым текстом:
Дальше читать резко расхотелось. И только сейчас, уже зная правильный ответ, прочел более внимательно, и нашел упоминания о возможности использования JPA в standalone приложениях:
Так вот, в свете этой новости ситуация меняется самым радикальным образом. Тем более что у Hibernate уже имеется адаптер для JPA (fixxer ловит плюса за отличную новость). Категорически предлагаю diablero переделать персистенцию в вендорно-независимом виде, то есть через JPA и с аннотациями. Пока еще не слишком поздно. ЗЫ. Заодно вопрос: а ты точно уверен, что хочешь мускуль? Есть для такого выбора какие-то веские основания? Это сообщение отредактировал(а) Stampede - 3.7.2007, 23:58 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||||
|
|||||||
y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 7 Всего: 13 |
"вам хочется песен? их есть у меня!"... покажите рабочий примерчик с JPA в стендэлоне ![]() ![]() -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
powerOn |
|
||||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Вы хотели пати? нати ![]() Что потребуется: Библиотеки для Hibernate Core, Hibernate Entity Manager (они есть на сайте hibernate), JDBC драйвер для MySQL. В нашем простом проекте будет всего 3 файла: 1) persistence.xml - файл конфигурации JPA. 2) jpatest.MyEntity - простая сущность. будем её сохранять в БД. 3) jpatest.Main - это класс содержит логику сохранения. persistence.xml Здесь описываем persistence-unit - параметры соединения с БД, диалекты, транзакции, подключаем Entity классы и прочее. Данный файл лежит в каталоге META-INF. Видимо по умолчанию так принято.
jpatest.MyEntity Это класс-сущность. Замапим его на таблицу MyTable используя аннотацию @Table(name="MyTable"). Имеется у данного класа 2 поля - id (главный ключ с автогенерацией) и someData. Опишем их свойства так же с помощью аннотаций.
jpatest.Main Данный код сохраняет объект типа MyEntity в БД. Сначало создаем фабрику для EntityManager-а используя описание нашего persistence-unit-а. Это можно сделать по имени. Далее создаем сам EntityManager и используем его для сохранения объекта.
Не трудно заметить, что работа с JPA весьма похожа на работу с Hibernate. Это сообщение отредактировал(а) powerOn - 4.7.2007, 07:23 |
||||||||
|
|||||||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Stampede, diablero и остальные: не будете возражать, если дискуссия о выборе персистенса перекочует в отдельный топик?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
diablero |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Категорически согласен.
Основание только одно, это единственная имеющаяся у меня база данных. Если есть какие-то основания перейти на что-то другое, то скажи на что. Stampede давай определим план действий. Что мне сейчас в итоге нужно сделать и как это оформим. Я имею ввиду структуру классов для работы с базой данных. Будем ли реарганизовывать менеджеры или их пока оставим для генерирования исходных данных. Добавлено через 3 минуты и 17 секунд
Конечно нет -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||||
|
|||||||
Stampede |
|
||||||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Я бы все-таки оставил здесь - для удобства всех заинтересованных, кто будет читать эту ветку в будущем. Как ни крути, выбор способа персистенции - это немаловажный момент в разработке сайта, так что высказанные здесь соображения должны помочь людям сориентироваться. Теперь о реализации. powerOn, спасибо за пример.
Одно из ключевых преимуществ ORM нового поколения (и JPA в том числе) заключается в том, что они позволяют проектировать DAO как обычные классы, или POJO (Plain Old Java Objects), без необходимости выводить их родословную из каких-то специфических классов или интерфейсов. Поэтому User и Post остаются у нас как были, только добавятся необходимые аннотации. Экземпляр EntityManager у нас будет один на все приложение. В методе Infinite.init() нужно предусмотреть его инициализацию, и потом выдавать всем желающим через геттер. Преимущество от использования единственного менеджера энтитей в том, что тогда он сможет отслеживать и разруливать обновления объектов простым и ненакладным образом. Ну и понятно, не надо будет для каждой транзакции заставлять фабрику заниматься инициализацией нового экземпляра менеджера. В UserManager и PostManager убираем работу с моками, при инициализации получаем (от Infinite) и сохраняем локально экземпляр EntityManager. Методы getPost(int id), getUser(int id), getUsers() и login(String name, String password) переписываем для работы с базой. Все действия по созданию/управлению транзакциями кодируем вне менеджеров. Пока что будем делать это прямо в тесте:
Все, пока этого достаточно.
Бесплатных СУБД много, так что на мускуле свет клином не сошелся. В принципе в последних версиях он уже вроде стал пригодным для работы, но раньше, когда в нем не было поддержки транзакций, вложенных подзапросов и много чего еще, его вообще нельзя было считать за нормальную базу. В общем, советую поспрошать в подфоруме СУБД, послушать разные мнения. От себя порекомендовал бы Postgres - вполне взрослая база, в меру быстрая и надежная, есть на большинстве Java хостингов. Но дело, конечно, хозяйское. Это сообщение отредактировал(а) Stampede - 4.7.2007, 20:02 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||||||
|
|||||||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
to fixxer
Ты говорил, что можешь запостить книжку Java Persistence with Hibernate. Нужно, если есть возможность. У меня пока проблемы с пониманием сути и важности Hibernate JPA. Вроде как оно долно упростить нам архитектуру приложения и избавить от множества настроек. А сама работа с базой данных аналогична. Т.е. все настраивается в файле persistence.xml. В связи с этим у меня сразу вопрос, с чем я столкнулся, это как задать путь к файлу? Это сообщение отредактировал(а) diablero - 4.7.2007, 22:36 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Нет, не столько упростить, сколько избавить от привязки к конкретному продукту. Понимаешь, когда ты работаешь с Hibernate напрямую, у тебя в проекте появляется множество зависимостей: формат конфига, названия аннотаций, имена классов фабрик и менеджеров, и т. д. В принципе ничего особенно страшного, но вот на другую ORM так запросто уже не перейдешь. И дело тут не в том, что ты будешь десять раз переводить прогу с Hibernate на TopLink, а с TopLink на iBatis, а в том, что при работе через единый API ты нарабатываешь базу для переиспользования в других проектах и приобретаешь "конвертируемый" опыт. И можешь быть уверен, в самом скором будущем работодатели вместо Hibernate будут требовать от кандидатов знание JPA. Потому что так будет намного проще и удобнее для всех.
Уточни, о каком файле идет речь. persistence.xml? Не знаю, почитай доку. Должен быть какой-то способ. Может, переменную окружения можно как-то задействовать. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
diablero |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
спасибо, так работает. А по другому ни как? У меня вот такое исключение валиться, не знаю почему. Сделал все как в примере у powerOn
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
скорее всего ты забыл у класса сущности указать аннотацию @javax.persistence.Entity. Выложи пожалуйста этот класс сюда.
|
|||
|
||||
diablero |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||
|
|||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Вот еще что вычитал:
Давай действительно так и сделаем, и conf добавим к classpath. Заодно можно будет убрать ручное задание пути к конфигу log4j - сам будет находиться. Добавлено через 7 минут и 50 секунд Дак ты же в объявлени классса не указал implements Serializable! -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Увидел когда постил ![]() Exception только изменился
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Проблемку решил.
Заменив метод persist на merge По базе. Я сейчас сижу через GPRS. Попрошу, мне скачают Postgres. Только это будет не скоро. Если не трудно дай прямой линк на закачку базы и драйвера к ней. Вечером приступлю к
Долг зовет, а еще не спал ![]() Это сообщение отредактировал(а) diablero - 5.7.2007, 00:48 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |