2016-07-29 9 views
1

In meiner Grails 2.5.0 Anwendung möchte ich eine eingebettete Middleware mit ActiveMQ und JMS machen. So habe ich Plugins für JMS und ActiveMQ installiert. Vom Controller aus sende ich Nachrichten an jmsService und ich habe Listener erstellt, um Daten in der Warteschlange zu empfangen. Die Daten sind JSON-Daten, die viele Daten enthalten, die ich über verschiedene Domain-Objekte persistieren muss. Die Daten wurden ordnungsgemäß vom Controller zum Listener übertragen.Grails JMS-Nachrichten bleiben nicht erhalten

Das Problem ist, während ich die zugehörige Service-Methode mit den Daten aufgerufen habe, gibt es mir viele Hibernate-Ausnahmen. Aber wenn die Service-Methode direkt von der Steuerung mit Controller aufgerufen wird, läuft alles perfekt.

Ich vermute, es gibt einige Sitzungskonflikte oder den Verlust von Ruhezustand Sitzung von etwas Ähnliches.

Kann jemand mir helfen, das Problem loszuwerden?

Die Fehlermeldung wie folgt aussieht:

[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) 

Antwort

0

ich in der Lage gewesen, um mein Problem zu lösen, indem Nachrichtenumformer hinzufügen. Später habe ich meinen Code mit camel-case geändert. Ich schob alle Nachrichten vom Controller zu ActiveMQ und mit Kamel-Fällen die Daten ausgewählt und an den Zieldienst Unmarshalling gesendet.

Verwandte Themen