Zdravím, použil jsem váš standalone.xml a z větší části i persistence.xml a zkusil si problém nasimulovat u sebe a chová se to tak, jak vy byste očekával - při vyhození výjimky se provede rollback transakce, zpráva se neuloží do DB ani nedojde do fronty - není tedy vyčtena Message-driven beanou.
Použil jsem velmi jednoduchou konfiguraci, servlet volá EJB, EJB ukládá do db, pošle zprávu a vyhodí výjimku - nic se neuloží. Celý kód tříd jsem vám uložil na pastebin: Message-driven bean: http://pastebin.com/fr5Z2Htu Session bean: http://pastebin.com/gEjjgjaS persistence.xml: http://pastebin.com/G3UMmcTQ JPA entity: http://pastebin.com/kMy8ghtg volajici servlet: http://pastebin.com/DPzUybjE Požadovaným způsobem funguje JBossAS 7 nejen s HornetQ, ale i s jinými JMS providery, zkoušeli jsme to přímo v Red Hatu. --JS. Dne 27. srpna 2012 18:14 Jaroslav Hurdes <[email protected]> napsal(a): > Zdravím. Zkouším zprovoznit pod JBossem 7.1.1 ejb, které zapisuje pomocí > hiberante data do databáze a současně posílá data přes HornetQ. Problém je, > že když zapíší data do db a fronty a poté dojde na trasakci k rollbacku, > tak databázova data se správně nezapíší, ale data poslaná přes frontu jsou > odeslána ihned, aniž by byla dokončena transakce a tudíž nereagují na > rollback. Potřeboval bych poradit s konfiguraci hibernate a hornetQ, tak > aby používali jednu transakci. Díky za jakékoli nasměrování. V příloze > posílám ještě standalone.xml, kde je konfigurace jms a datových zdrojů. > Jaroslav Hurdes > > Ejb využívá > @TransactionManagement(**TransactionManagementType.**CONTAINER) > @TransactionAttribute(**TransactionAttributeType.**REQUIRED) > > a fronta je získána a zprávy odesílány pomocí tohoto kódu > > public static final String PARAM_DESTENATION_TYPE_NAME = "destinationType"; > public static final String PARAM_DESTENATION_TYPE_VALUE = > "javax.jms.Topic"; > public static final String PARAM_DESTENATION_NAME = "destination"; > public static final String PARAM_DESTENATION_VALUE = > "topic/avesEntityMessages"; > public static final String RESOURCE_ADAPTER_NAME = "hornetq-ra"; > public static final String CONNECTION_FACTORY_NAME = "java:/JmsXA"; > > Context ic = null; > ConnectionFactory cf = null; > Connection connection; > Session session; > MessageProducer messageProducer; > > ic = LocalInitialContextProvider.**getInitialContext(); > cf = (ConnectionFactory)ic.lookup(**CONNECTION_FACTORY_NAME); > Topic topic = (Topic)ic.lookup(PARAM_**DESTENATION_VALUE); > connection = cf.createConnection(); > session = connection.createSession(true, Session.SESSION_TRANSACTED); > messageProducer = session.createProducer(topic); > > ObjectMessage message = session.createObjectMessage(); > message.setObject(content); > messageProducer.send(message); > > > Konzumenti zpráv jsou MessageDrivenBeans > > @MessageDriven(name = SecurityEventsService.NAME, > activationConfig = { > @ActivationConfigProperty( > propertyName = PARAM_DESTENATION_TYPE_NAME, > propertyValue = PARAM_DESTENATION_TYPE_VALUE), > @ActivationConfigProperty( > propertyName = PARAM_DESTENATION_NAME, > propertyValue = PARAM_DESTENATION_VALUE) > }) > @ResourceAdapter(RESOURCE_**ADAPTER_NAME) > > > -- Jiri Sedlacek - [email protected]
