LoginSignup
2
1

Liberty と ActiveMQ Artemisで JMSを構成する (備忘録)

Last updated at Posted at 2024-02-29

はじめに

Liberty と Active MQ Artemis で JMS構成をするのに苦労したところを同じことを調べなくて良いように残しておきます。

以下のページを更新します。

ActiveMQ Artemisを起動

を元にArtemis MQを起動します。

docker run --rm -e AMQ_USER=admin -e AMQ_PASSWORD=admin -p 61616:61616 --name artemis quay.io/artemiscloud/activemq-artemis-broker

最新のResource Adapterを使う

Java8で動かそうと古いResource Adapterで試していましたが、なかなか動いてくれませんでした。Javaを新しいものに変えることでResource Adapterも新しいものが使えるので、うまくいかないときは修正が含まれる最新をためすのが良いです。

2024/2/29 現在 2.31.2 でした。

Libertyの server.xml を更新

もともとあった構成はActiveMQのものでこれを元に更新します。

変更点

  • resource adapter の id を artemis に変更 >> properties の後の指定も変わる
    • 実装にあわせたプロパティ名を使えるのでプロパティも変わる
  • rar を /tmp/artemis-rar-2.31.2.rar に配置して、それを読むように変える
  • jmsQueueConnectionFactory を connectionFactory に変える
    • brokerUrlが設定できなくなるので消す

使用できるプロパティは以下を参考にします。

<server>
    <featureManager>
	<feature>ejb-3.2</feature>
	<feature>localConnector-1.0</feature>
	<feature>servlet-4.0</feature>
	<feature>jsp-2.3</feature>
    <feature>wasJmsClient-2.0</feature>
    </featureManager>

	<httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint">
	</httpEndpoint>
 
    <resourceAdapter id="artemis" location="/tmp/artemis-rar-2.31.2.rar">
        <properties.artemis connectionParameters="host=localhost;port=61616" />
    </resourceAdapter>
	
	<jmsActivationSpec id="jms/PdprofMdb">
		<properties.artemis destinationRef="Q3" destinationType="javax.jms.Queue"/>
	</jmsActivationSpec>
	
	<connectionFactory connectionManagerRef="ConMgr6" jndiName="QCF">
		<properties.artemis/>
	</connectionFactory>
	<connectionManager id="ConMgr6" maxPoolSize="5"/>

	<jmsQueue jndiName="Q1">
		<properties.artemis Address="Q1"/>
	</jmsQueue>

	<jmsQueue id="Q2" jndiName="Q2">
		<properties.artemis Address="Q2"/>
	</jmsQueue>

	<jmsQueue id="Q3" jndiName="Q3">
		<properties.artemis Address="Q3"/>
	</jmsQueue>

	<applicationMonitor updateTrigger="mbean"/>

	<webApplication id="jms" location="jms.war" name="jms"/>

   <logging  traceSpecification="*=info"
      traceFileName="trace.log"
      maxFileSize="20"
      maxFiles="10"
      traceFormat="BASIC" />

</server>

sendの時の commitを追加

ここまででサンプルアプリケーションの send がエラーなく動作するようになるのですが、なぜかキューにメッセージがPUTできない。アプリケーションのコードで commmit を追加してやることでうまく動作します。他のResource Adapterだといらなかったのになぜというところだけど、ひとまず動くことを確認してからあるべき動作を確認していきます。

QueueSession.commit() を QueueSender.send(...) の後に入れることで動くようになりました。

まとめ

同じような苦労をしないように、今回知る事のできた内容をまとめました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1