2014-11-20 3 views
0

대기열에 메시지 (한 번에 50 개의 메시지)를 게시하는 중 두 가지 예외가 있습니다. 내 프로젝트에서 ThreadLocal (JMS 게시 클래스도 포함)을 사용하고 있습니다. 나는 이것이 실제로 발생하는 이유를 전혀 모른다. 더 나아갈 수있는 도움을 주시면 감사하겠습니다. 미리 감사드립니다. JMSException : CWSIA0005E : JCA 런타임에서 연결을 작성하지 못했습니다.

Exception:javax.jms.JMSException: CWSIA0024E: The JCA runtime failed to create a session.   
    at com.ibm.ws.sib.api.jms.impl.JmsConnectionImpl.createJcaSession(JmsConnectionImpl.java:951) 
    at com.ibm.ws.sib.api.jms.impl.JmsConnectionImpl.createSession(JmsConnectionImpl.java:340) 
    at com.ibm.ws.sib.api.jms.impl.JmsQueueConnectionImpl.createQueueSession(JmsQueueConnectionImpl.java:115) 
      ... 
      ... 
    Caused by: com.ibm.websphere.ce.j2c.ConnectionWaitTimeoutException: Connection not available, Timed out waiting for 180001 
     at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1721) 
     at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3321) 
     at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:2567) 
     at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1544) 
     at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:1027) 
     at com.ibm.ws.sib.api.jmsra.impl.JmsJcaConnectionImpl.createSession(JmsJcaConnectionImpl.java:394) 
     at com.ibm.ws.sib.api.jms.impl.JmsConnectionImpl.createJcaSession(JmsConnectionImpl.java:946) 

Exception:javax.jms.JMSException: CWSIA0005E: The JCA runtime failed to create a connection 
    ... 

코드 게시 ::

try { 
     QueueConnectionFactory queueFactory = null; 
     queueFactory = getQueueConnectionFactory(ConnectionFactoryJNDIName); 
     // Create a QueueConnection 
     queueConnection = queueFactory.createQueueConnection(); 
     try { 
       // Create a QueueSession 
       queueSession = queueConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); 
       Queue queue = getQueue(queueJNDIName);     
       // Create the Publisher 
       queueSender = queueSession.createSender(queue); 
       // Create a message 
       ObjectMessage objMsg = queueSession.createObjectMessage(object); 
       // Publish the message 
       queueSender.send(object); 
       // Commit the session 
       queueSession.commit(); 

      } catch (JMSException e) { 
       throw e; 
     } finally { 
       try { 
        // Close the QueueSender 
        if (null != queueSender) { 
         queueSender.close(); 
        } 
       } catch (JMSException e) { 
         throw e; 
       } 
       try { 
        // Close the Queue Session 
        if (null != queueSession) { 
         queueSession.close(); 
        } 
       } catch (JMSException e) { 
        throw e; 
       } 
       try { 
        // Close the QueueConnection 
        if (null != queueConnection) { 
         queueConnection.close(); 
        } 
       } catch (JMSException e) { 
        throw e; 
       } 
    } catch (Exception e) { 
     throw e; 
    } 

구성 :

  • 서버 : 웹 스피어 8.5.5
  • 연결 시간 제한 :
  • 최대 연결 300 초 : 50
  • 미사용 시간 제한 : 1800sec
  • 퍼지 정책 : EntirePool
+0

일부 코드를 게시 할 수 있습니까? 그렇지 않으면 문제가 어디에 있는지 알기가 어렵습니다. – mdnghtblue

+0

연결을 정의한 Websphere 관리 콘솔에서 테스트 연결을 클릭하여 확인하십시오. – Vishnu

+0

@mdnghtblue, 답장을 보내 주셔서 감사합니다. 코드를 추가했습니다. 희망이 도움이 될 수 있습니다. 두 가지 예외가 동시에 발생하는 것은 아닙니다. 몇 ms 동안 CWSIA0024E 및 나머지 CWSIA0005E. –

답변

0

그것은 문제의 원인이었다 ThreadLocal했다. 시작시 ThreadLocal을 설정해도 문제가 해결되지 않았습니다. ThreadLocal을 제거한 후 문제가 해결되었습니다.

+0

잘못된 계좌에 게시하셨습니까? –

+0

아니요. 불행히도 이전 로그인 메일 ID를 잊어 버렸습니다. 그래서, 내 최신을 사용하여 로그인. 여전히 대답은 같습니다. –