[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