Jsem rád že vám to pomohlo. Teoreticky můžete znovu použít Connection a
Session, nemělo by to být nic proti specifikaci, teď jsem zkoušel a chování
je stejné jako když se vytvoří znovu.
V JEE kontextu by ani nemělo moc vadit vytvářet Connection znovu, je to
sice takový anti-pattern, ale aplikační server vám nedává normální
ConnectionFactory, ale obalenou, která nevytváří Connection objekty, ale
většinou je bere z poolu, takže to není tak drahé. Koukněte na
https://community.jboss.org/wiki/ShouldICacheJMSConnectionsAndJMSSessions,
sice staršího data, ale víceméně aktuální.

Zdraví,
JS.

Dne 27. srpna 2012 23:40 Jaroslav Hurdes <[email protected]> napsal(a):

>  Děkuji za pomoc.
>
> Problém byl v tom, že jsem si jms connection, session a messageProducer
> vytvořil jen jednou a používal jsem je dokola. To vedlo k tmu, že transakce
> nefungovaly. Když, ale při každé transakci znova volám vytvoření connection
> , session, a messageProcucer, tak transakce funguji OK. connectionFactory a
> destenation mám namapovány přes @Resource v EJB, tak jak to máte ve vaši
> ukázce.
>
> public ObjectMessage sendObjectMessage(Serializable content) throws
> JMSException {
>         Connection connection = connectionFactory.createConnection();
>         Session session = connection.createSession(true,
> Session.SESSION_TRANSACTED);
>         MessageProducer messageProducer =
> session.createProducer(destination);
>
>
>         ObjectMessage message = session.createObjectMessage();
>         message.setObject(content);
>         messageProducer.send(message);
>         return message;
>     }
>
> Jaroslav Hurdes
>
> Dne 27.8.2012 21:52, Jiri Sedlacek napsal(a):
>
> 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]
>
>
>
>


-- 
Jiri Sedlacek - [email protected]

Odpovedet emailem