2016-07-29 38 views
1

在我的Grails 2.5.0應用程序中,我想使用ActiveMQ和JMS製作嵌入式中間件。 因此,我已經安裝了JMS和activeMQ的插件。 從控制器,我發送消息到jmsService,並且我創建了監聽器來接收隊列中的數據。數據是一個JSON數據,其中包含大量需要通過不同的Domain對象持久化的數據。 數據已從控制器正確傳播到偵聽器。Grails JMS消息無法保存數據

問題是,雖然我用數據調用了相關的服務方法,但它給了我很多的Hibernate異常。 但是,如果使用控制器直接從控制器調用服務方法,則一切都會變得完美。

我懷疑,有一些會話衝突或類似的東西休眠會話丟失。

任何人都可以幫我擺脫這個問題嗎?

的錯誤信息是這樣:

[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

我已經能夠通過增加信息轉換器,以解決我的問題。 後來我通過使用camel-case來更改我的代碼。 我將所有的消息從控制器推送到ActiveMQ,並使用camel-cases拾取數據併發送到目標服務Unmarshalling它。