307.6. 고급 사용 노트

307.6.1. 플러그형 연결 리소스 관리

SJMS2는 기본 제공 연결 풀링을 통해 JMS Connection 리소스 관리를 제공합니다. 이를 통해 타사 API 풀링 논리에 의존할 필요가 없습니다. 그러나 J2EE 또는 OSGi 컨테이너에서 제공하는 것과 같은 외부 연결 리소스 관리자를 사용해야 하는 경우가 있을 수 있습니다. 이 SJMS2에서는 내부 SJMS2 연결 풀링 기능을 재정의하는 데 사용할 수 있는 인터페이스를 제공합니다. 이 작업은 ConnectionResource 인터페이스를 통해 수행됩니다.

Connection Resource 는 필요에 따라 연결 풀을 SJMS2 구성 요소에 제공하는 데 사용되는 계약입니다. 사용자가 SJMS2를 외부 연결 풀링 관리자와 통합해야 하는 경우 를 사용해야 합니다.

표준 ConnectionFactory 공급자에 대해 SJMS2 as-is와 함께 제공된 ConnectionFactoryResource 구현을 사용하거나 이 구성 요소에 최적화되어 있으므로 확장하는 것이 좋습니다.

다음은 ActiveMQ PooledConnectionFactory 와 함께 연결 가능 ConnectionResource를 사용하는 예입니다.

public class AMQConnectionResource implements ConnectionResource {
    private PooledConnectionFactory pcf;

    public AMQConnectionResource(String connectString, int maxConnections) {
        super();
        pcf = new PooledConnectionFactory(connectString);
        pcf.setMaxConnections(maxConnections);
        pcf.start();
    }

    public void stop() {
        pcf.stop();
    }

    @Override
    public Connection borrowConnection() throws Exception {
        Connection answer = pcf.createConnection();
        answer.start();
        return answer;
    }

    @Override
    public Connection borrowConnection(long timeout) throws Exception {
        // SNIPPED...
    }

    @Override
    public void returnConnection(Connection connection) throws Exception {
        // Do nothing since there isn't a way to return a Connection
        // to the instance of PooledConnectionFactory
        log.info("Connection returned");
    }
}

그런 다음 ConnectionResourceSjms2Component 에 전달합니다.

CamelContext camelContext = new DefaultCamelContext();
AMQConnectionResource pool = new AMQConnectionResource("tcp://localhost:33333", 1);
Sjms2Component component = new Sjms2Component();
component.setConnectionResource(pool);
camelContext.addComponent("sjms2", component);

사용의 전체 예를 보려면 ConnectionResourceIT 를 참조하십시오.