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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPA 2.0 Spring 3.0 JSF 2.0, EntityTransaction exception 
:(
    Опции темы
AliakseiKa
Дата 28.5.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, очень прошу помочь в решении возникшей проблемы. Проверяю эту связку (spring, sf jpa)на тестовой базе перед тем как лезть в рабочую. Убил целый день, но так ничего и не придумал.
Проблема в следующем: 
Есть класс DAO

Код

@Repository
public class DaoImpl implements Dao<Employee> {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void write(Employee object) {

        em.getTransaction().begin();
        em.persist(object);
        em.getTransaction().commit();
        } catch(Exception ex){

        }
    }
}


при вызове метода write() вылетает exception java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
А вопрос в следующем: как можно закоммитить запись в базу?
PM MAIL   Вверх
powerOn
Дата 28.5.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



он говорит что открывать и закрывать транзакции на таком EntityManager нельзя. Используйте аннотации @Transactional для разметки транзакций: http://static.springsource.org/spring/docs...ive-annotations



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
AliakseiKa
Дата 28.5.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, почитаю. Попробую
PM MAIL   Вверх
AliakseiKa
Дата 31.5.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



перенастроил, теперь ловлю другое исключение org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout) ( Уже устал.
Код

@Repository
public class DaoImpl implements Dao<Employee> {

    @PersistenceContext
    private EntityManager em;

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    public void write(Employee object) {
        em.persist(object);
    }
}

конфиг спринга:
Код

    <context:annotation-config />
    <context:component-scan base-package="by.newland" />
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="springJpaPU"></property>
    </bean>
    <bean id="transactionManager"
        class="org.springframework.transaction.jta.JtaTransactionManager" />
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>


Может быть будут какие идеи? Очень расчитываю на помощь.
PM MAIL   Вверх
MisterCleric
Дата 31.5.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Здравствуй. А может там еще какой-то Exception в логгах затусовался?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
AliakseiKa
Дата 31.5.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть, но он из тоже разряда
javax.transaction.RollbackException: Transaction marked for rollback.
PM MAIL   Вверх
MisterCleric
Дата 31.5.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Ну, а глубже по StackTrace разве ничего нет?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
AliakseiKa
Дата 31.5.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



неа, ничего нету (
PM MAIL   Вверх
powerOn
Дата 31.5.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Выложи весь лог.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
AliakseiKa
Дата 31.5.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'administrationController': Invocation of init method failed; nested exception is org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: Transaction marked for rollback.
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1405)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
    at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
    at org.springframework.web.context.request.SessionScope.get(SessionScope.java:92)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1045)
    at org.springframework.beans.factory.access.el.SpringBeanELResolver.getValue(SpringBeanELResolver.java:56)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
    at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:99)
    at com.sun.el.parser.AstValue.getTarget(AstValue.java:127)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:217)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:72)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: Transaction marked for rollback.
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1012)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:375)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy292.getObject(Unknown Source)
    at by.newland.test.services.impl.ServicesImpl.getObject(ServicesImpl.java:26)
    at by.newland.test.services.impl.ServicesImpl.getObject(ServicesImpl.java:17)
    at by.newland.test.view.AdministrationController.init(AdministrationController.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:340)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:293)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130)
    ... 53 more
Caused by: javax.transaction.RollbackException: Transaction marked for rollback.
    at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:405)
    at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:837)
    at com.sun.enterprise.transaction.UserTransactionImpl.commit(UserTransactionImpl.java:201)
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1009)


Я уже под конец 2-го дня всё больше думаю о забитии на спринг и нормально использовать EJB. Да только обидно бросать не разобравшись.

Это сообщение отредактировал(а) powerOn - 31.5.2010, 17:10
PM MAIL   Вверх
eros2
Дата 31.5.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я использую EJB и при работе с JPA методы, подобные вашему у меня выглядят так:

Код

@Override
public void putEmployee( Employee object )
{
    object = em.merge( object );
    em.persist( object );
    em.flush();
}


flush() вызывается автоматически при завершении транзакции (выходе из метода) если не был вызван раньше.
вызывая его вручную мы получаем вменяемый стектрейс если была ошибка.
если flush() отсутствует, то при возникновении ошибки мы получаем невменяемый стектрейс (как у вас), потому что ошибка происходит за пределами кода пользователя.

Скорее всего, у вас ошибка происходит из-за отсутствия merge().
См. доку, зачем она нужна.
PM MAIL WWW   Вверх
ki6opr
Дата 1.6.2010, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(eros2 @ 31.5.2010,  19:18)
Я использую EJB и при работе с JPA методы, подобные вашему у меня выглядят так:

Код

@Override
public void putEmployee( Employee object )
{
    object = em.merge( object );
    em.persist( object );
    em.flush();
}


flush() вызывается автоматически при завершении транзакции (выходе из метода) если не был вызван раньше.
вызывая его вручную мы получаем вменяемый стектрейс если была ошибка.
если flush() отсутствует, то при возникновении ошибки мы получаем невменяемый стектрейс (как у вас), потому что ошибка происходит за пределами кода пользователя.

Скорее всего, у вас ошибка происходит из-за отсутствия merge().
См. доку, зачем она нужна.

а зачем перед persist вызывать merge ?
цель метода какая ? если создать объект то perssit если синхронизировать состояние то merge.

PS если попытаться воспользоваться этим методом для синхронизации энтити и контекста то будет EntityExistsException.

Это сообщение отредактировал(а) ki6opr - 1.6.2010, 07:43
PM MAIL ICQ   Вверх
eros2
Дата 1.6.2010, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ki6opr @ 1.6.2010,  07:42)
а зачем перед persist вызывать merge ?

У меня entity приходят с клиента детачнутыми. merge() переводит entity из состояния DETACHED в состояние MANAGED или NEW.

persist() не работает с детачнутыми сущностями.
PM MAIL WWW   Вверх
AliakseiKa
Дата 1.6.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ошибка возникает ещё до нажатия кнопки записать, а при инициализации контроллера, потому flush() ничего не дал (. Переписал код при использовании IoC J2EE6 и всё нормально заработало. Может 3-й спринг не очень хорошо дружит с 3-м glassfish?
PM MAIL   Вверх
ki6opr
Дата 2.6.2010, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(AliakseiKa @ 1.6.2010,  09:39)
ошибка возникает ещё до нажатия кнопки записать, а при инициализации контроллера, потому flush() ничего не дал (. Переписал код при использовании IoC J2EE6 и всё нормально заработало. Может 3-й спринг не очень хорошо дружит с 3-м glassfish?

нормально они дружат smile

2 eros2 теперь понял, спасибо
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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