チームが現在取り組んでいるスタンドアロンの Spring (4.3.2) アプリケーションから接続しようとしている Apache ActiveMQ Artemis (1.3) インスタンスがあります。Atomikos (4.0.4) UserTransactionManagerをプロバイダーとして使用するSpring JTATransactionManagerがあり、これらのトランザクション中に、前述の MQ を含むいくつかのリソースに接続する必要があります。Artemis および Atomikos のマニュアルに従って、 ActiveMQConnectionFactoryをセットアップし、これをAtomikosConnectionFactoryBeanに渡します。これはすべて Spring コンテナーで発生しますが、それは私たちの問題とは関係がないようです。
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 () メソッドを (XAConnectionFactory インターフェイスから)呼び出しています。これは、その実装でわかるように、明示的に渡されない限り資格情報を無視します。
@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);
}
これは、このクラスの他のいくつかのメソッドも同様に機能する方法であるため、バグではないと思います。その場合、認証されたXAConnectionを取得するにはどうすればよいですか? そのコードを見て、Atomikos がオーバーロードされたバージョンを呼び出す可能性はわかりません。
よろしく、ヤクブ