[Java lista] JMS kerdes

István Viczián viczian.istvan at gmail.com
2009. Aug. 18., K, 11:24:59 CEST


Szia,

a begin, commit hívásokat takarítsd ki, mert a
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) pont azt
mutatja, hogy konténer menedzselt tranzakciót akarsz, amikor is nem
neked kell/szabad kiadnod a műveleteket, hanem a konténer teszi meg
helyetted.
A sendStatus-t másik bean-ből hívod, vagy hogyan?

Viczi

2009/8/18 zamek <zamek at vili.pmmf.hu>:
> hello,
>
> István Viczián írta:
>> Szia,
>>
>> Aham, az nehezen fog menni, mert az EJB-t csak a konténer hívhatja, az
>> onMessage-en keresztül, a session bean nem tudja hívni.
>> Én az MDB-t a process indítására gondoltam, de azt látom, hogy már
>> megoldottad. A státusz visszaadását mi úgy oldottuk meg, hogy
>> adatbázisba írtuk, és a session bean mindig onnan kérdezgette. Ez
>> ezért is jó, mert ha pl. clusterezett környezeted van, az egyik
>> node-on fut a processz, de a státusz lekérés a másik node-on fut,
>> akkor csak az adatbázis, ami közös.
>> No meg persze a JMS, és mér értem, hogy mit szeretnél. Én ettől
>> függetlenül inkább az adatbázisosat javasolnám.
> Azert szeretnem ezt, mert igy lehet egy komponens, ami csak java
> (package) es nem kell adatbazis ugyekkel kuzdeni.
> Kulonbozo adatbazisok (autoincrement/sequence, stb).
>
>>A JMS-es megoldásnál
>> szerintem az a probléma, hogy a konténer kezel tranzakciókat, és hiába
>> küldesz be egy csomó üzenetet, csak commit-nál megy el. Ezt úgy
>> oldhatod meg, hogy a státusz üzenetet külön tranzakcióba teszed, pl.
>> csinálsz egy új metódust RequiresNew tranzakciós attribútummal, csak
>> vigyázz, hogy mindenképp proxy-n keresztül hívjad (vagy másik bean,
>> vagy ugyanazon bean SessionContext.getBusinessObject()-en keresztül).
> Ezt lehetne kicsit reszletesebben? Odaig eljutottam, hogy hiaba mondom a
> session generalasnal, hogy:
>
> this.statusSession = this.statusConnection.createTopicSession(true,
> Session.SESSION_TRANSACTED);
>
> a send elszall:
>
> MQJMSRA_DS4001: commit():Illegal for a non-transacted
> Session:sessionId=1981059560489603328
>
> a send igy nez ki:
>
> @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
> protected void sendStatus (Message message) throws Exception {
>    message.setJMSCorrelationID(this.processId);
>    TopicPublisher publisher = statusSession.createPublisher(statusQueue);
>    publisher.publish(message,DeliveryMode.PERSISTENT,
> Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
>    this.statusSession.commit();
>    publisher.close();
> }
>
> probaltam szerezni sajat transaction-t:
>
>   @Resource
>     private UserTransaction statusTransaction;
>
> amikor kiadom a statusTransaction.begin()-t,
> java.lang.IllegalStateException: Operation not allowed.
> hiba jon.
>
>
> --
>  thx,
> ----------------------------------
> Zoltan Zidarics programmer
> PTE-PMMFK H-7621 Pecs, Boszorkany u. 2. Hungary
> E-Mail: zamek at vili.pmmf.hu
> ----------------------------------
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>


További információk a(z) Javalist levelezőlistáról