>

저는 예를 많이 보았습니다. http : //hursleyonwmq.wordpress. com/2007/05/29/Simplest-sample-applications-using-websphere-mq-jms/ (IBM publib에서도). 이 코드에 결함이 있다고 생각합니다. 대기열 연결이 메인 블록에서 닫히고 예상대로마지막이 아닙니다.

누설없이 MQ 연결을 닫는 올바른 방법은 무엇입니까?

  • 답변 # 1

    마침내하는 것이 낫다고 생각합니다. 즉,

    finally
    {
       try
       {
          session.close();
       }
       catch (Exception ex)
       {
          System.err.println("session.close() : " + ex.getLocalizedMessage());
       }
       try
       {
          connection.close();
       }
       catch (Exception ex)
       {
          System.err.println("connection.close() : " + ex.getLocalizedMessage());
       }
    }
    
    

  • 답변 # 2

    8.0.0 이후 (2014 년 이후) 릴리스의 IBM MQ는 JMS 2.0을 지원합니다. 따라서 모든 QueueConnection, QueueSession QueueSender 및 QueueReceiver는 java.lang.AutoCloseable을 구현합니다. ibm mq spec 참조

    try (QueueConnection connection = connectionFactory.createQueueConnection();
         //create a session that is not transacted and has an acknowledgment mode 
         QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE)) 
        {
            Queue queue = session.createQueue("queue:///Q1");
            try (QueueSender sender = session.createSender(queue);
                 QueueReceiver receiver = session.createReceiver(queue);) 
            {
                //getting and sending messages...
            }
        } catch (JMSException e) {
            //handling jms exceptions...
        }
    
    

    또는 JMS 2.0 JMSContext 사용

    try (JMSContext context = connectionFactory.createContext();) 
        {
            context.createProducer().send(context.createQueue("queue:///Q1"), "text");
        } catch (JMSRuntimeException ex) {
            // handle exception (details omitted)
        }
    
    

관련 자료

  • 이전 flutter - 슬라이드 쇼 및 불투명 카드
  • 다음 angular : Routermodule 구성 요소, LoadChildren, RedirectTo.