Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JBoss и Postgresql, сделать autoincrement 
:(
    Опции темы
Rusico
Дата 13.7.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



Ещё раз здрасти.
Вчера всех замучил с "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 в таблице.

Подскажите плз.
PM MAIL   Вверх
ekr
Дата 13.7.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(Rusico @  13.7.2007,  14:09 Найти цитируемый пост)
 java.lang.IllegalStateException: Failed to find method for hash:6844222132332216879 available={8594593460157411074=public abstract javax.ejb.EJBObject.

глянь сюда, может та жа самая трабла.


Цитата(Rusico @  13.7.2007,  14:09 Найти цитируемый пост)
как организовать работу с БД, чтоб работал autoincrement?
Т.е. я не хочу создавать бины через метод create(id), хочу чтоб Jboss брал id из поля SERIAL в таблице

У тебя какой тип? CMP или BMP? Если CMP, то надо смотреть специфический дескриптор jboss-a, где обычно такие вещи настраиваются. Здесь я не помошник, JBoss не юзаю в production.
А если BMP - то можно грамотно autoincrement-поле замутить.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Rusico
Дата 13.7.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



у меня видимо CMP, хотя я, честно, не знаю чем эти два типа отличаются.
Я просто создал в META-INF jbosscmp-jdbc.xml? поэтому и думаю что у меня CMP
Может я заблуждаюсь? - тогда как определить какой у меня тип?
PM MAIL   Вверх
ekr
Дата 13.7.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Загляни в ejb-jar.xml и найди следующий кусок:
Код

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
<ejb-jar>
   <display-name>HelloEntity</display-name>
   <enterprise-beans>
      <entity>
         <description>Extremely Simple Entity bean, models a person</description>
         <ejb-name>HelloEntity</ejb-name>
         <home>HelloEntityHome</home>
         <remote>HelloEntity</remote>
         <ejb-class>HelloEntityEJB</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.String</prim-key-class>
         <primkey-field>name</primkey-field>
         <reentrant>False</reentrant>
         <cmp-field><field-name>name</field-name></cmp-field>
         <cmp-field><field-name>email</field-name></cmp-field>
      </entity>
   </enterprise-beans>
</ejb-jar>


В разделе <persistence-type> и указан тип персистенции: Container для CMP или Bean для BMP.

Добавлено через 3 минуты и 3 секунды
Цитата(Rusico @  13.7.2007,  15:48 Найти цитируемый пост)
хотя я, честно, не знаю чем эти два типа отличаются

В случае CMP логику создания, удаления, загрузки и сохранения (jdbc код + sql-запросы) пишет сам контейнер, надо только задекларировать свойства в ejb-jar.xml и меппинги свойств бина на базу. Как раз в том самом jbosscmp-jdbc.xml.
А в случае BMP всю логику персистенции надо писать руками.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Rusico
Дата 13.7.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



так вот что это значит smile
Ну я возложил эту обязанность на контейнер, значит у меня Container MP smile

Если б сам БИН следил за сохранением своего состояния, то тут вопросов наверное не возникло бы.

PM MAIL   Вверх
ekr
Дата 13.7.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(Rusico @  13.7.2007,  16:02 Найти цитируемый пост)
Если б сам БИН следил за сохранением своего состояния, то тут вопросов наверное не возникло бы.

Бин (cmp или bmp) не следит ))) Это делает в любом случае контейнер. Другое дело, кто пишет логику сохранения - Вы или контейнер.

Добавлено через 56 секунд
Цитата(Rusico @  13.7.2007,  16:02 Найти цитируемый пост)
Ну я возложил эту обязанность на контейнер, значит у меня Container MP smile

и правильно )))
человек должен думать, машина - работать. (С) не мое )


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Ulysses4j
Дата 13.7.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 1
Всего: 10



META-INF/jbosscmp-jdbc.xml
Код
<jbosscmp-jdbc>
  <enterprise-beans>
<!-- ... -->
    <entity>
<!-- ... -->
      <cmp-field>
        <field-name>xxxID</field-name>
        <column-name>id</column-name>
        <auto-increment/>
<!-- ... -->
      </cmp-field>
<!-- ... -->
    </entity>
<!-- ... -->
</jbosscmp-jdbc>


Это сообщение отредактировал(а) Ulysses4j - 13.7.2007, 16:38


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Rusico
Дата 13.7.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



а у меня вот так:

Код

<jbosscmp-jdbc>
  <defaults>
    <datasource>java:/PostgresDS</datasource>
    <datasource-mapping>PostgreSQL</datasource-mapping>
    <create-table>true</create-table>
    <remove-table>true</remove-table>
  </defaults>

  <enterprise-beans>
    <entity>
      <ejb-name>myEjb</ejb-name>
      <table-name>myEjb</table-name>
      <cmp-field>
        <field-name>id</field-name>
        <column-name>id</column-name>
      </cmp-field>
      <cmp-field>
        <field-name>name</field-name>
        <column-name>name</column-name>
      </cmp-field>

      
      <unknown-pk>
        <unknown-pk-class>java.lang.Long</unknown-pk-class>
        <column-name>id</column-name>
        <auto-increment/>
      </unknown-pk>
      
      <entity-command name="postgresql-fetch-seq"></entity-command>
    </entity>
  </enterprise-beans>
</jbosscmp-jdbc>


Это не правильно?

Добавлено через 1 минуту и 54 секунды
и даже если xml правльный, то как тогда будет выглядеть метод create в Home-интерфейсе?
PM MAIL   Вверх
ekr
Дата 14.7.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(Rusico @  13.7.2007,  16:41 Найти цитируемый пост)
Это не правильно?

Не знаю ((( 
Я jboss не юзаю. Судя по структуре, все гуд, у weblogic и websphere похожая суть специфического дескриптора cmp бинов.

Цитата(Rusico @  13.7.2007,  16:41 Найти цитируемый пост)
как тогда будет выглядеть метод create в Home-интерфейсе?

Метод create home-интерфейса будет принимать от клиента параметры. Это будут значения свойств сущности, которую надо внести в базу. Свойства все, кроме первичного ключа, т.е. клиент не будет передавать его.
После декларации сигнатуры метода create в home-интерфейсе надо написать метод ejbCreate в классе реализации. Метод ejbCreate принимает тот же набор параметров, что и метод create home-интерфейса.  В теле ejbCreate надо полученными как параметры значениями проинициализировать свойства бина через set-методы. 
Помимо инициализации свойств, метод ejbCreate так же отвечает за создание значения первичного ключа. Т.к. клиент нам его не передал, то надо сгенерить. А это ломает делать ))) Поэтому мы просто возвращаем из метода ejbCreate значение null, показывая, что пусть контейнер париться. А делать он будет это на основе информации из дескриптора jbosscmp-jdbc.xml.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Rusico
Дата 15.7.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



спасибочки за разъяснения, обязательно попробую как окажусь на работе,
 и отпишусь.
PM MAIL   Вверх
Ulysses4j
Дата 15.7.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 1
Всего: 10



Можете попробовать еще заменить
Код
      <cmp-field>
        <field-name>id</field-name>
        <column-name>id</column-name>
       </cmp-field>
      
      <unknown-pk>
        <unknown-pk-class>java.lang.Long</unknown-pk-class>
        <column-name>id</column-name>
        <auto-increment/>
      </unknown-pk>

на
Код

            <unknown-pk>
                <unknown-pk-class>java.lang.Integer</unknown-pk-class>
                <field-name>locationID</field-name>
                <column-name>id</column-name>
                <auto-increment/>
            </unknown-pk>

Так будет больше похоже на то, что в моей книжке по JBoss написано.

Это сообщение отредактировал(а) Ulysses4j - 15.7.2007, 21:43


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Rusico
Дата 16.7.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



сказал как сказал ekr и Ulysses4j, но контейнер пытается вставить в поле id null и 
естественно Postgres ругается.
PM MAIL   Вверх
Ulysses4j
Дата 16.7.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 1
Всего: 10



Блин, у меня там куча ошибок: вместо Long - Integer, и вместо id - locationId - копипастинг... ;)  

А как вот такой радикальный эксперимент: заменить все-таки тип id на Integer и написать:
Код

            <unknown-pk>
                <unknown-pk-class>java.lang.Integer</unknown-pk-class>
                <field-name>id</field-name>
                <column-name>id</column-name>
                <jdbc-type>INTEGER</jdbc-type>
                <sql-type>INTEGER</sql-type>
                <auto-increment/>
            </unknown-pk>

?

Добавлено через 1 минуту и 10 секунд
А, не, наверное, не поможет.


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Rusico
Дата 16.7.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



Да, у меня сейчас Integer:
Код

<unknown-pk>
    <unknown-pk-class>java.lang.Integer</unknown-pk-class>
    <column-name>id</column-name>
    <auto-increment/>
</unknown-pk>
<entity-command name="postgresql-fetch-seq"></entity-command>


а вот на счёт 
Код

<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>


сейчас попробую

Добавлено через 2 минуты и 4 секунды
не, упорно запихивает в id null

Добавлено через 4 минуты и 26 секунд
может проблема в 
Код

<entity-command name="postgresql-fetch-seq"></entity-command>


может другая какая строка должна быть?

Ведь, как я понимаю это команда для генерации нового идентификатора? вот может
он и не может сгенерить id.
PM MAIL   Вверх
ekr
Дата 16.7.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(Rusico @  16.7.2007,  11:15 Найти цитируемый пост)
postgresql-fetch-seq

не спец по subj, но, может, здесь надо указать имя sequence, из которой вытягиваются уникальные значения?


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.