Java EE 환경의 오브젝트 풀링

Java EE Application Server는 메시지 구동 Bean 응용프로그램, Enterprise Java Bean및 Servlet에서 사용할 수 있는 연결 풀링 기능을 제공합니다.

WebSphere® Application Server 는 성능을 향상시키기 위해 JMS 제공자에 대한 연결 풀을 유지보수합니다. 애플리케이션이 JMS 연결을 작성할 때 애플리케이션 서버는 사용 가능한 연결 풀에 연결이 이미 있는지 여부를 판별합니다. 있는 경우 연결이 애플리케이션에 리턴됩니다. 그렇지 않으면 새 연결이 작성됩니다.

그림 1 은 활성화 스펙과 리스너 포트 둘 다 JMS 연결을 설정하고 해당 연결을 사용하여 정상 모드에서 메시지의 대상을 모니터하는 방법을 보여줍니다.
그림 1. 정상 모드
활성화 스펙과 리스너 포트가 JMS 연결을 설정하고 해당 연결을 사용하여 메시지의 대상을 모니터하는 방법을 보여주는 플로우 차트입니다.

IBM® MQ 메시징 제공자를 사용하는 경우, 아웃바운드 메시징을 수행하는 애플리케이션 (예: 엔터프라이즈 Java Bean및 서블릿) 및 메시지 구동 Bean 리스너 포트 컴포넌트는 이러한 연결 풀을 사용할 수 있습니다.

IBM MQ 메시징 제공자 활성화 스펙은 IBM MQ 자원 어댑터에서 제공하는 연결 풀링 기능을 사용합니다. 자세한 정보는 WebSphere MQ 자원 어댑터의 특성 구성 을 참조하십시오.

연결 풀 사용의 예에서는 아웃바운드 메시징을 수행하는 애플리케이션과 수신기 포트가 JMS 연결을 만들 때 무료 풀을 사용하는 방법을 설명합니다.

무료 연결 풀 유지 관리 스레드에서는 애플리케이션 또는 수신기 포트가 연결을 완료했을 때 이러한 연결에 어떤 일이 발생하는지 설명합니다.

풀 유지 관리 스레드 예제에서는 JMS 연결이 부실해지는 것을 방지하기 위해 무료 연결 풀을 정리하는 방법을 설명합니다.

WebSphere Application Server 에는 연결 팩토리의 최대 연결 수 특성으로 지정되는 팩토리에서 작성할 수 있는 연결 수에 대한 한계가 있습니다. 이 특성의 기본값은 10이며 한 번에 하나의 연결 팩토리에서 최대 10개의 연결을 작성할 수 있음을 의미합니다.

각 팩토리는 연관된 여유 연결 풀이 있습니다. 애플리케이션 서버가 시작되면 여유 연결 풀이 비어 있습니다. 팩토리에 대한 여유 풀에 존재할 수 있는 최대 연결 수는 최대 연결 수 특성에서도 지정됩니다.

팁: JMS 2.0에서는 연결 팩토리를 사용하여 연결 및 컨텍스트를 모두 작성할 수 있습니다. 결과적으로 연결과 컨텍스트가 둘 다 혼합되어 있는 연결 팩토리와 연결 풀이 연관될 수 있습니다. 연결 팩토리는 연결을 작성하거나 컨텍스트를 작성하는 데만 사용하는 것이 좋습니다. 그러면 해당 연결 팩토리의 연결 풀에 한 가지 유형의 오브젝트만 포함되므로 풀의 효율성이 향상됩니다.

WebSphere Application Server에서 연결 풀링이 작동하는 방법에 대한 정보는 JMS 연결에 대한 연결 풀링 구성을 참조하십시오. 다른 애플리케이션 서버의 경우 적절한 애플리케이션 서버 문서를 참조하십시오.

연결 풀이 사용되는 방법

모든 JMS 연결 팩토리에는 연관된 연결 풀이 있으며 연결 풀에는 0개이상의 JMS 연결이 포함되어 있습니다. 모든 JMS 연결에는 연관된 JMS 세션 풀이 있으며 모든 JMS 세션 풀에는 0개이상의 JMS 세션이 포함되어 있습니다.

그림 2 는 이러한 오브젝트 간의 관계를 보여줍니다.
그림 2. 연결 풀 및 세션 풀
JMS 연결과 세션 간의 관계를 표시하는 플로우차트
리스너 포트가 시작되거나 아웃바운드 메시징을 수행하려는 애플리케이션이 연결 팩토리를 작성하기 위해 팩토리를 사용하는 경우 포트 또는 애플리케이션이 다음 메소드 중 하나를 호출합니다.
  • connectionFactory.createConnection()
  • ConnectionFactory.createConnection(String, String)
  • QueueConnectionFactory.createQueueConnection()
  • QueueConnectionFactory.createQueueConnection(String, String)
  • TopicConnectionFactory.createTopicConnection()
  • TopicConnectionFactory.createTopicConnection(String, String)
WebSphere Application Server 연결 관리자는 이 팩토리의 사용 가능한 풀에서 연결을 확보하여 애플리케이션으로 리턴하려고 시도합니다.

풀에 여유 연결이 없고 이 팩토리에서 작성된 연결 수가 해당 팩토리의 maximum connections 특성에 지정된 한계에 도달하지 않은 경우 연결 관리자는 애플리케이션이 사용할 새 연결을 작성합니다.

그러나 애플리케이션이 연결 작성을 시도하지만 이 팩토리에서 작성된 연결 수가 이미 팩토리의 maximum connections 특성과 동일한 경우 애플리케이션은 연결이 사용 가능해질 때까지(여유 풀에 돌아올 때까지) 기다립니다.

애플리케이션이 대기하는 시간은 연결 풀의 connection timeout 특성에 지정되고 기본값은 180초입니다. 연결이 180초 내에 여유 풀에 돌아오면 연결 관리자가 즉시 풀에서 가져와서 애플리케이션에 전달합니다. 하지만 제한시간이 초과하면 ConnectionWaitTimeoutException이 발생합니다.

애플리케이션이 연결을 종료하면 다음을 호출하여 닫습니다.
  • Connection.close()
  • QueueConnection.close()
  • TopicConnection.close()
연결은 계속해서 열려 있으며 여유 풀에 리턴되어 다른 애플리케이션이 다시 사용할 수 있게 됩니다. 따라서 애플리케이션 서버에서 실행 중인 JMS 애플리케이션이 없는 경우에도 WebSphere Application ServerJMS 제공자 간에 연결을 열 수 있습니다.