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]

Odpovedet emailem