У меня есть ухо, которое я развертываю на сервере приложений WebSphere, который использует функцию для отправки сообщения в MQ с помощью JMS и получает сообщение в другой очереди .:
ConnectionFactory cf = null;
InitialContext context = null;
String[] arrDatos_SR = null;
Connection conn = null;
Session session = null;
Queue queue = null;
Queue queue2 = null;
Destination dest = null;
Destination dest2 = null;
MessageConsumer consumer = null;
MessageProducer producer = null;
TextMessage message = null;
String comando = "";
int tamanio = 0;
String tamanio2 = "";
String cadena = "";
try {
context = new InitialContext();
cf = (ConnectionFactory) context.lookup(arrDatos[1].trim());
conn = cf.createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
queue = (Queue) context.lookup(arrDatos[2].trim());
queue2 = (Queue) context.lookup(arrDatos[3].trim());
dest = (Destination) queue;
dest2 = (Destination) queue2;
producer = session.createProducer(dest);
// Create a text message using the queue session.
TextMessage textMessage = session.createTextMessage();
textMessage.setText(arrDatos[4]);
textMessage.setJMSReplyTo(dest2);
textMessage.setJMSMessageID(arrDatos[6]);
textMessage.setJMSCorrelationID(arrDatos[7]);
producer.send(textMessage);
} catch (NamingException e) {
// TODO Auto-generated catch block
logger.error("MQSendReceive() - Exception e2 = "
+ e, e);
} catch (JMSException e) {
// TODO Auto-generated catch block
logger.error("MQSendReceive() - Exception e2 = "
+ e, e);
}
arrDatos[5] = arrDatos[5].trim();
try{
conn.start();
consumer = session.createConsumer(dest2);
Message receivedMessage = consumer.receive(Long.parseLong(arrDatos[5]) * 1000);
if(receivedMessage != null)
{
message = (TextMessage)receivedMessage;
comando = message.getText();
comando = comando.trim();
tamanio = comando.length();
tamanio2 = StringUtils.leftPad(Integer.toString(tamanio), 9, '0');
comando = StringUtils.rightPad(comando, Constantes.TAMANIO_RESPUESTA_DES_C1, ' ');
cadena = arrDatos[0] + comando + tamanio2;
}
else
{
comando = new String();
comando = "";
tamanio = comando.length();
tamanio2 = StringUtils.leftPad(Integer.toString(tamanio), 9, '0');
cadena = arrDatos[0] + comando + tamanio2;
}
arrDatos_SR = new String[2];
arrDatos_SR[0] = cadena;
arrDatos_SR[1] = arrDatos[0];
}
catch(Exception e)
{
logger.error("MQSendReceive() - Excepcion:" + e);
}
finally
{
try {
consumer.close();
session.close();
conn.close();
context.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
logger.error("MQSendReceive() - Error desconectando de MQ - Excepcion:" + e);
} catch (NamingException e) {
// TODO Auto-generated catch block
logger.error("MQSendReceive() - Error desconectando de MQ - Excepcion:" + e);
}
}
return arrDatos_SR;
< /code>
Сообщение отправляется в очередь A MQ № 1, которая затем передается в другую очередь MQ № 2, которая является очередью транмиссии в другую очередь MQ № 3. Я проверил с помощью GUI WebSphere MQ Administration Gui, размещающего сообщения в эту очередь, и они передаются плавно. Но когда я использую свой код по какой -то причине, отправка не сделана внедряется. Вместо этого это делается после окончания получения (когда истекает тайм -аут или когда он на самом деле получает сообщение)
может кто -нибудь сказать мне, почему это происходит? @TransactionManagement (TransactionManagementType.container) Анннотации. Прочитав этот пост из SO, я понял, что у меня есть 3 класса, которые делают все соединение, и один основной, который использует все из них в качестве объектов, из которых я использую общественные методы. Я решил превратить эти классы в EJB, а также с той же аннотацией. Я также пытался изменить тип @TransActionAttribute каждого метода на необходимый, не поддерживаемый и обязательный по одному, просто чтобы проверить, работали ли некоторые из них. Я также изменил строку сеанса на это: < /p>
session = conn.createSession(true, Session.SESSION_TRANSACTED);
< /code>
Результат кажется таким же. Сообщение по -прежнему застряло в очереди передачи, в то время как сообщение принимается во время интервала тайм -аута MessageConsumer.>
Подробнее здесь: https://stackoverflow.com/questions/227 ... mmit-fully
Как сделать сообщение JMS отправить в MQ для полного совершения? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение