在我的Grails 2.5.0应用程序中,我想使用ActiveMQ和JMS制作嵌入式中间件。 因此,我已经为JMS和activeMQ安装了插件。 从控制器,我发送消息到jmsService并且我创建了监听器以接收队列中的数据。数据是一个JSON数据,其中包含我需要通过不同的Domain对象持久存储的大量数据。 数据已从控制器正确传播到侦听器。
问题是,当我用数据调用相关的服务方法时,它给了我很多hibernate异常。 但是,如果直接从带控制器的控制器调用服务方法,一切都很完美。
我怀疑,会发生一些会话冲突或者hibernate session丢失类似的事情。
有人可以帮我摆脱这个问题吗?
错误消息如下:
[01:51:45.072] ERROR org.hibernate.AssertionFailure an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null id in com.mycomp.domain.Client entry (don't flush the Session after an exception occurs)
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1261)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.codehaus.groovy.grails.orm.hibernate.metaclass.FindPersistentMethod$1.doInHibernate(FindPersistentMethod.java:163)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:407)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339)
at org.codehaus.groovy.grails.orm.hibernate.metaclass.FindPersistentMethod.doInvokeInternal(FindPersistentMethod.java:103)
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod.invoke(AbstractStaticPersistentMethod.java:79)
at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod.invoke(AbstractStaticPersistentMethod.java:72)
at org.codehaus.groovy.grails.orm.hibernate.HibernateGormStaticApi.find(HibernateGormStaticApi.groovy:570)
答案 0 :(得分:0)
我通过添加邮件转换器来解决我的问题。 后来我用camel-case改变了我的代码。 我将所有消息从控制器推送到ActiveMQ并使用驼峰式案例挑选数据并发送到目标服务Unmarshalling it。