[Java lista] JBoss XAConnectionFactory not bound jms failover eseten

Böszörményi Péter zmblevlist at gmail.com
2009. Júl. 21., K, 14:45:18 CEST


Udv a listanak!

Adott ket JBoss 4.2.1.GA node. Node1 a master node. Node2-n van ket mbean  
(kiserleti jelleggel). Az egyik mbean kuld uzeneteket egy topicba, a masik  
pedig fogadja azt. A kuldes ciklusban megy, kb. masodpercenkent egy  
uzenet. A kuldes kodja (ez van a cikluson belul):

ConnectionFactory factory = (ConnectionFactory) lookup(factoryJNDIName);
connection = factory.createConnection();
Session session = connection.createSession(false,  
Session.AUTO_ACKNOWLEDGE);

Destination topic = (Destination) lookup(topicJNDIName);
MessageProducer producer = session.createProducer(topic);
ObjectMessage msg = session.createObjectMessage(new Date());
producer.send(msg);

A lookup fuggveny nem csinal mast, csak a HAJNDI-bol megprobalja kiszedni  
a parameterben megnevezett objektumot.
factoryJNDIName = java:JmsXA
topicJNDIName = topic/testTopic

A JmsXA mindket nodeon megtalalhato, a testTopic, csak a node1-en.

Ha elinditom a kuldest, akkor baban megy a dolog. A problema ott kezdodik,  
ha a master nodeot leallitom. Ekkor ugyanis a teljes koceraj (mq, es a  
topic) atcuccol a masik nodera. Igenam, de ez idobe telik. Ebben az  
atmeneti allapotban (eppen all le az mq) a kuldo mbean ki tudja szedni a  
JDNI-bol a JmsXA-t (ugy latom a lokalis fahoz van kotve), de a JmsXA alatt  
talalhato ConnectionFactory az XAConnectionFactory-t mar nem tudja (ez  
csak master nodeon volt bindolva, ami eppen all le, es mar kiszedte a  
JNDIbol az XAConnectionFactory). A hiba a createSession sornal  
generalodik. Ha a failover megtortenik, akkor utanna minden jo megint. Itt  
csupan az a gond, h a folyamatos kivetelek miatt (createSession dobalja,  
mert nem talalja a XAConnectionFactory-t), kb tizszeresere no a failover  
ideje, ami azert annyira nem kiraly.

A kerdes: valamilyen modon meg lehet oldani, hogy amig az mq (es az altala  
JNDIbe bindolt topicok) eszhez nem ter a masik nodeon,
a) az uzenet kuldo szal blokkolodjon, ne probaljon meg feleslegesen  
kuldeni uzenetet
b) az elkuldott uzenetek bekeruljenek egy atmeneti tarba, amig az mq  
magahoz nem ter
c) egyeb, ertelmes megoldas.

Igaz, a probalkozas mbeanekkel tortenik, de a kesobbiekben az uzenet  
valtas (kuldes, fogadas) barhol tortenhet (mbean, ejb, servlet, esetleg  
tavoli kliens).

Ja, meg ket aprosag:
- java: 1.5.x
- j2ee 1.4

-- 
Üdvözlettel,
Böszörményi Péter


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