| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JBoss и Postgresql |
| Автор: Rusico 13.7.2007, 14:09 |
| Ещё раз здрасти. Вчера всех замучил с "JBoss вне localhost"/ Спасибо разобрался. Сегодня мучаю JBoss+Postgresql. Вроде даже получилось их подружить, но когда дело доходит до работы клиента возникает ошибка: java.lang.IllegalStateException: Failed to find method for hash:6844222132332216879 available={8594593460157411074=public abstract javax.ejb.EJBObject............. Что это?!?!?! она меня пугает - я не понимаю что мне хочет сказать JBoss. И ещё: как организовать работу с БД, чтоб работал autoincrement? Т.е. я не хочу создавать бины через метод create(id), хочу чтоб Jboss брал id из поля SERIAL в таблице. Подскажите плз. |
| Автор: Rusico 13.7.2007, 15:48 |
| у меня видимо CMP, хотя я, честно, не знаю чем эти два типа отличаются. Я просто создал в META-INF jbosscmp-jdbc.xml? поэтому и думаю что у меня CMP Может я заблуждаюсь? - тогда как определить какой у меня тип? |
| Автор: ekr 13.7.2007, 15:56 | ||
Загляни в ejb-jar.xml и найди следующий кусок:
В разделе <persistence-type> и указан тип персистенции: Container для CMP или Bean для BMP. Добавлено через 3 минуты и 3 секунды В случае CMP логику создания, удаления, загрузки и сохранения (jdbc код + sql-запросы) пишет сам контейнер, надо только задекларировать свойства в ejb-jar.xml и меппинги свойств бина на базу. Как раз в том самом jbosscmp-jdbc.xml. А в случае BMP всю логику персистенции надо писать руками. |
| Автор: Rusico 13.7.2007, 16:02 |
| так вот что это значит Ну я возложил эту обязанность на контейнер, значит у меня Container MP Если б сам БИН следил за сохранением своего состояния, то тут вопросов наверное не возникло бы. |
| Автор: ekr 13.7.2007, 16:06 | ||||
Бин (cmp или bmp) не следит ))) Это делает в любом случае контейнер. Другое дело, кто пишет логику сохранения - Вы или контейнер. Добавлено через 56 секунд
и правильно ))) человек должен думать, машина - работать. (С) не мое ) |
| Автор: Ulysses4j 13.7.2007, 16:35 | ||
META-INF/jbosscmp-jdbc.xml
|
| Автор: Rusico 13.7.2007, 16:41 | ||
а у меня вот так:
Это не правильно? Добавлено через 1 минуту и 54 секунды и даже если xml правльный, то как тогда будет выглядеть метод create в Home-интерфейсе? |
| Автор: ekr 14.7.2007, 15:05 |
Не знаю ((( Я jboss не юзаю. Судя по структуре, все гуд, у weblogic и websphere похожая суть специфического дескриптора cmp бинов. Метод create home-интерфейса будет принимать от клиента параметры. Это будут значения свойств сущности, которую надо внести в базу. Свойства все, кроме первичного ключа, т.е. клиент не будет передавать его. После декларации сигнатуры метода create в home-интерфейсе надо написать метод ejbCreate в классе реализации. Метод ejbCreate принимает тот же набор параметров, что и метод create home-интерфейса. В теле ejbCreate надо полученными как параметры значениями проинициализировать свойства бина через set-методы. Помимо инициализации свойств, метод ejbCreate так же отвечает за создание значения первичного ключа. Т.к. клиент нам его не передал, то надо сгенерить. А это ломает делать ))) Поэтому мы просто возвращаем из метода ejbCreate значение null, показывая, что пусть контейнер париться. А делать он будет это на основе информации из дескриптора jbosscmp-jdbc.xml. |
| Автор: Rusico 15.7.2007, 20:30 |
| спасибочки за разъяснения, обязательно попробую как окажусь на работе, и отпишусь. |
| Автор: Ulysses4j 15.7.2007, 21:42 | ||||
Можете попробовать еще заменить
на
Так будет больше похоже на то, что в моей книжке по JBoss написано. |
| Автор: Rusico 16.7.2007, 10:43 |
| сказал как сказал ekr и Ulysses4j, но контейнер пытается вставить в поле id null и естественно Postgres ругается. |
| Автор: Ulysses4j 16.7.2007, 11:09 | ||
| Блин, у меня там куча ошибок: вместо Long - Integer, и вместо id - locationId - копипастинг... ;) А как вот такой радикальный эксперимент: заменить все-таки тип id на Integer и написать:
? Добавлено через 1 минуту и 10 секунд А, не, наверное, не поможет. |
| Автор: Rusico 16.7.2007, 11:15 | ||||||
Да, у меня сейчас Integer:
а вот на счёт
сейчас попробую Добавлено через 2 минуты и 4 секунды не, упорно запихивает в id null Добавлено через 4 минуты и 26 секунд может проблема в
может другая какая строка должна быть? Ведь, как я понимаю это команда для генерации нового идентификатора? вот может он и не может сгенерить id. |
| Автор: ekr 16.7.2007, 11:29 |
не спец по subj, но, может, здесь надо указать имя sequence, из которой вытягиваются уникальные значения? |
| Автор: Rusico 16.7.2007, 11:35 |
| ставлю конкретный, относящийся к таблице Prodact_id_seq, а от гад Добавлено через 1 минуту и 30 секунд ставлю оригинальный, относящийся к таблице Prodact Prodact_id_seq, а он гад Добавлено через 4 минуты и 8 секунд доберусь до правды |
| Автор: Rusico 16.7.2007, 12:39 |
| Вот ещё что интересно - сделал тоже с Mysql и заработало!!!, а с Postgresql всё равно не хочет. |
| Автор: ekr 16.7.2007, 14:32 |
| см. http://www.ubookcase.com/book/Sams/JBoss.4.0.The.Official.Guide/0672326485/ch11lev1sec11.html кстати, а какой exception выбрасывается при развертывании? |
| Автор: Rusico 16.7.2007, 15:57 | ||
| Итак, пишу о проделанной работе и полученных ответах: вот така конструкция:
работает на ура, если имя postgresql-fetch-seq такое каким его создал postgres (логично далее - имена таблиц долны быть в нижнем регистре (почему-то). Огромное спасибо всем кто отвечал - вроде я разобрался |