0

우리 팀이 현재 작업하고있는 독립 실행 형 Spring (4.3.2) 응용 프로그램에서 연결하려고하는 Apache ActiveMQ Artemis (1.3) 인스턴스가 있습니다. 여기에는 Atomikos (4.0.4) UserTransactionManager을 제공자로 사용하는 스프링 JTATransactionManager이 있으며 이러한 트랜잭션 중에 위에서 언급 한 MQ를 비롯한 여러 리소스에 연결해야합니다. Artemis 및 Atomikos 매뉴얼에 이어 ActiveMQConnectionFactory을 입력 한 다음 AtomikosConnectionFactoryBean으로 전달됩니다. 모든 것이 Spring 컨테이너에서 발생하지만 이는 우리의 문제와 관련이없는 것 같습니다.ActiveMQConnectionFactory에서 인증 된 XA 리소스 만들기

MQ 연결에 인증을 추가 할 때까지 모두 제대로 작동했습니다. 하나는 사용자ActiveMQConnectionFactory의 인스턴스에 속성 암호를 설정할 수 있습니다, 그러나, 그들은 고려되어야하는 것 일반 연결을 만드는 경우에만 :) (

@Override 
public Connection createConnection() throws JMSException { 
    return createConnection(user, password); 
} 

@Override 
public Connection createConnection(final String username, final String password) throws JMSException { 
    return createConnectionInternal(username, password, false, ActiveMQConnection.TYPE_GENERIC_CONNECTION); 
} 

Atomikos이 createXAConnection를 호출을

@Override 
public XAConnection createXAConnection() throws JMSException { 
    return createXAConnection(null, null); 
} 

@Override 
public XAConnection createXAConnection(final String username, final String password) throws JMSException { 
    return (XAConnection) createConnectionInternal(username, password, true, ActiveMQConnection.TYPE_GENERIC_CONNECTION); 
} 
: 나는 그것의 구현에서 보는 바와 같이, 명시 적으로 전달하지 않는 한 자격 증명을 무시, 방법 (에서 XAConnectionFactory 인터페이스)

이것은이 클래스의 다른 몇 가지 메소드가 작동하는 방식이기 때문에 버그가 아닌 것으로 간주합니다. 그렇다면 어떻게하면 인증 된 XAC 연결을 얻을 수 있습니까? Atomikos가 오버로드 된 버전을 코드 호출로 호출 할 가능성을 알 수 없습니다.

public class ActiveMQConnectionFactoryWrapper implements XAConnectionFactory { 

    private final ActiveMQConnectionFactory factory; 

    public ActiveMQConnectionFactoryWrapper(ActiveMQConnectionFactory factory) { 
    this.factory = factory; 
    } 

    @Override 
    public XAConnection createXAConnection() throws JMSException { 
    return factory.createXAConnection(factory.getUser(), factory.getPassword()); 
    } 

    @Override 
    public XAConnection createXAConnection(String userName, String password) throws JMSException { 
    return factory.createXAConnection(userName, password); 
    } 

    @Override 
    public XAJMSContext createXAContext() { 
    return factory.createXAContext(factory.getUser(), factory.getPassword()); 
    } 

    @Override 
    public XAJMSContext createXAContext(String userName, String password) { 
    return factory.createXAContext(userName, password); 
    } 
} 

다른 인터페이스가 필요한 경우도 구현 될 수있다 :

감사합니다, 야쿱 해결 방법으로

답변

0

, 우리는 필요한 인터페이스를 구현하는 클래스에 ActiveMQConnectionFactory을 포장하기로 결정했습니다 있다.