Я написал следующий фрагмент кода, чтобы отправить сообщение потребителю. Он работает так долго, пока потребитель жив. Но я проверяю, что произойдет, если потребитель снизится. Поэтому у меня есть следующий класс.Thread зависает после производителя.send()
public class MyConnection{
Producer producer;
private void init(String brokerAddress){
com.sun.messaging.ConnectionFactory myFactory = new com.sun.messaging.ConnectionFactory();
myFactory.setProperty(ConnectionConfiguration.imqAddressList, brokerAddress);
myFactory.setProperty(ConnectionConfiguration.imqAckOnProduce, "false");
myFactory.setProperty(ConnectionConfiguration.imqConfiguredClientID, "clientId");
myFactory.setProperty(ConnectionConfiguration.imqEnableSharedClientID, "true");
javax.jms.Connection conn = myFactory.createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
this.producer = session.createProducer(session.createTopic("SOME_TOPIC"));
myFactory.getProperty(ConnectionConfiguration.imqAckOnProduce);
connectionStatus = BROKER_CONNECTED;
}
//Message is of type javax.jms.Message
private send(Message message){
boolean paramterSent = false;
try
{
producer.send(message);
paramterSent = true;
}
catch (JMSException e)
{
connectionStatus = BROKER_DISCONNECTED;
logger.log(Level.INFO, "Could not send message to EPS ", e);
}
return paramterSent;
}
Так что я тестирую здесь я называю Init() и созданием соединения, то я убить брокер, который recieves сообщения. и затем я пытаюсь вызвать send, поэтому я ожидаю, что он будет выкидывать и JMXException, но это не так, и он зависает в файле manufacturer.send(), и на консоли я получаю это сообщение.
Dec 5, 2013 9:14:54 AM com.sun.messaging.jmq.jmsclient.ExceptionHandler logCaughtException
WARNING: [I500]: Caught JVM Exception: java.io.EOFException: Trying to read 72 bytes. Already read 0 bytes.
Dec 5, 2013 9:14:57 AM com.sun.messaging.jmq.jmsclient.ConnectionRecover logRecoverState
INFO: [I107]: Connection recover state: RECOVER_INACTIVE, broker: localhost:31300(31301)
Dec 5, 2013 9:15:21 AM com.sun.messaging.jmq.jmsclient.ExceptionHandler throwConnectionException
WARNING: [C4003]: Error occurred on connection creation [10.187.37.188:31300]. - cause: java.net.ConnectException: Connection timed out: connect
Я использую следующие
Oracle GlassFish(tm) Server MQ Destination
getName(): SOME_TOPIC
Class: com.sun.messaging.BasicTopic
getVERSION(): 3.0
isReadonly(): false
getProperties(): {imqDestinationName=SOME_TOPIC, imqDestinationDescription=A Description for the Destination Object}
Что я нашел из investating, что в пакете класса com.sun.messaging.jmq.jmsclient.MessageProducerImpl, метод checkReconnecting он не может получить блокировку на объекте reconnectSyncObj, так что он пытается получить доступ к нему, но не способен так его висит. Есть предположения?
Спасибо, Sriram
Я изменил некоторые имена, чтобы соответствовать моим политикам компании. – sriram