このような状況では、コンテナー管理トランザクションが使用されます。onMessage
メソッドがコンテナーによって呼び出されるとトランザクションが開始され、メソッドがonMessage
正常に終了するとコミットされます (RuntimeException がスローされるかsetRollBackOnly
、MessageDrivenBean コンテキストから呼び出されるとトランザクションは失敗します)。また、再配信間隔と再配信の最大数を構成することもできます。
Glassfish サーバーで OpenMQ を使用している場合は、これを ejb-jar.xml 記述子内で構成できます。ejb-jar.xml 記述子内で、プロパティ endpointExceptionRedeliveryInterval (ミリ秒単位) および endpointExceptionRedeliveryAttempts (メッセージがデッド メッセージ キューに送信される前に再配信される回数) を設定します。次に例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<enterprise-beans>
<message-driven>
<ejb-name>EjbName</ejb-name>
<ejb-class>com.example.MyMessageDrivenBean</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>someQueue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>endpointExceptionRedeliveryInterval</activation-config-property-name>
<activation-config-property-value>5000</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>endpointExceptionRedeliveryAttempts</activation-config-property-name>
<activation-config-property-value>4</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
</enterprise-beans>
</ejb-jar>
メッセージ駆動型 Bean 内では、RuntimeException をスローして失敗としてマークし、メッセージはキューに返されます。
WebLogic Server の構成プロパティもここにあります:
http://docs.oracle.com/cd/E12839_01/apirefs.1111/e13952/pagehelp/JMSjmstemplatesjmstemplateconfigredeliverytitle.html