![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
под утро уже не вижу что сервак хочет )
фсе деплоиться хорошо, но вот при доступе к базе, теперь фсегда ошибка java.lang.IllegalStateException да, и то есть теперь необходимости нет в постоянно em.getTransaction().begin(); em.persist(user); em.getTransaction().commit(); нужно сразу em.persist(user); или em.refresh(user); или тд.. |
|||
|
||||
| powerOn |
|
||||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
поменяйте в persistance.xml:
на
Да, теперь не нужно вызывать em.getTransaction().begin(); или em.getTransaction().commit();. Commit произойдет автоматически. А что бы откатит транзакцию, придется получить ссылку на SessionContext через инъекцию:
и вызывать
И еще, не забудьте использовать аннотации @TransactionAttribute на методах EJB, что бы отметить необходимую логику транзакции. |
||||||||
|
|||||||||
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
на JTA уже поменял
как понимаю sessionContext.setRollbackOnly(); должно быть в блоке catch/finally метода где persist.() @TransactionAttribute тоже на методах где просходит persist.().. ? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Зависит от логики работы программы. Если при таких условиях нужно откатывать транзакцию, то да. Почитайте в документации об аннотации @TransactionAttribute и её параметрах. Так же проанализируйте логику вашей программы, где и как должны работать транзакции. Уже в зависимости от этого, расставляйте аннотации. В частности, для persists() транзакция вам точно потребуется. |
|||
|
||||
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
методы проаннотировал как @TransactionAttribute(value = REQUIRES_NEW)
получаю ошибку javax.persistence.TransactionRequiredException заметил что ошибка возникает на persis, find, тд.. на запросах типа Query query = em.createNamedQuery("findUserByEmail"); все нормально |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
а если REQUIRED попробовать? (ну или @TransactionAttribute без параметров указать, тогда будет выставлен тип REQUIRED по умолчанию).
|
|||
|
||||
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
делал по разному, и REQUIRED и без параметров тоже
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
у меня такой код отработал без ошибок:
Добавлено через 4 минуты и 20 секунд Кстати, смотрел непосредственно в БД, новая запись там появляется. Т.е. persist и commit отрабатывают. |
|||
|
||||
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
да, тоже самое, только без implements Local
быть может что то не инджектиться, но что и когда не знаю |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Ваш EJB компонент должен имплементировать локальный интерфейс. У меня было сделано так:
метод getMessage объявлен в локальном интерфейсе и будет управляться контейнером, т.е. будет выполнятся с учетом транзакций и секьюрити. |
|||
|
||||
| aol |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
добавил
в классе public class UserAuthBean { ,методы которого вызываются с jsf пробовал описать private UserManager userManager; if(userManager.addUser(user)) {... так и private UserManagerLocal userManager; if(userManager.addUser(user)) {... получаю javax.persistence.TransactionRequiredException возможно нужно что то еще проаннотировать. нужно ли аннотировать public class UserAuthBean { @EJB private UserManager userManager; ? Это сообщение отредактировал(а) aol - 26.10.2008, 14:40 |
||||
|
|||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Если EJB создан как:
в бине JSF пишется инъекция таким образом:
|
||||
|
|||||
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
получаю вот что теперь
com.sun.enterprise.deployment.backend.IASDeploymentException: Error loading deployment descriptors for module [Web] -- Error: Unresolved <ejb-link>: UserManager или теперь нужно фсе entity описать в ejb-jar.xml ? немного не понимаю что происходит |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
А что Вы кстати деплоите? И на какой сервер.
У меня ear архив, который содержит jar с EJB компонентами и war с web-приложением. Прикрепил свой проект (для NetBeans IDE). Присоединённый файл ( Кол-во скачиваний: 7 )
EnterpriseApplication1.zip 45,21 Kb |
|||
|
||||
| aol |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
сервер sun app server, деплою из идеи, ear, идея помещает файл ear в каталог сервера autodeploy.
по смыслу вроде тоже самое что и у вас. разницу увидел в том, что у меня jsf страница вызывает методы у своего бина, который в свою очередь вызывает промежуточный бин у которого есть @EJB(beanName = "UserManager") а уже он обращается к UserManager пробовал деплоить вручную из вебконсоли, ошибка при деплое war Deploying application in domain failed; Error loading deployment descriptors for module [Web] -- Error: Unresolved : UserManager Error loading deployment descriptors for module [Web] -- Error: Unresolved : UserManager выслал вам на email, может там виднее ) сюда не помещается Это сообщение отредактировал(а) aol - 26.10.2008, 19:51 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |