よし、やっと手に入れた!ここに長い説明があります。うまくいけば、誰かにも役立つでしょう。
これらの例をいじくり回した後、ActiveMQ のアクティブ化パラメーターが上限を制限していないことがわかりましたが、並列インスタンスを減らすことができます。
<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>maxSessions</activation-config-property-name>
<activation-config-property-value>3</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>maxMessagesPerSessions</activation-config-property-name>
<activation-config-property-value>2</activation-config-property-value>
</activation-config-property>
そこで、オープンソースの道を進むことにしました! 関連するコンポーネントの必要なすべてのソース コードを添付した後:
InstanceLimit は、明示的に照会される GBean プロパティであることがわかりました。デフォルト値は 10 で、Geronimo でハードコーディングされています。デバッガーでこの値を微調整することで、希望どおりの結果が得られました!
しかし、InstanceLimit を設定することは、これを Geronimos config.xml に追加することを提案したメーリング リストでも提案されました。
<module name="org.apache.geronimo.configs/j2ee-server/2.1.4/car">
<gbean name="org.apache.geronimo.configs/j2ee-server/2.1.4/car?ServiceModule=org.apache.geronimo.configs/j2ee-server/2.1.4/car,j2eeType=GBean,name=CustomPropertiesGBean"
gbeanInfo="org.apache.geronimo.system.properties.SystemProperties">
<attribute name="systemProperties">Default\ MDB\ Container.InstanceLimit=50</attribute>
</gbean>
</module>
(もちろん正しいバージョン番号で)しかし、これは何の効果もありませんでした。このヒントを注意深く読み直した後:
作成されるインスタンスの数が利用可能な AMQ セッションの数と一致するように、MdbContainer の InstanceLimit プロパティを 0 に設定してみてください。これを設定するには、これをシステム プロパティとして設定する必要があります。プロパティは containerId.InstanceLimit である必要があります。containerId は次の形式です。
<artifactId>.<Resource Group Name>-<listener interface>
例: org.apache.geronimo.configs/activemq-ra/2.2-SNAPSHOT/car.ActiveMQ RA-javax.jms.MessageListener
<artifactId>
= jms RA の artifactId
<Resource Group Name>
- RA の作成中に指定したリソース グループ名
<listener interface>
- この場合は javax.jms.MessageListener
org.apache.geronimo.openejb.OpenEjbSystemGBean
Geronimos のコードと実行時の状態を調べると、309 行目の InstanceLimit を探していることがわかりました。この ID はサンプル プロジェクトにありました。
org.apache.geronimo.configs/activemq-ra/2.2.1/car.ActiveMQ RA-javax.jms.MessageListener
この情報を装備して、私はこれを試しました:
<module name="org.apache.geronimo.configs/j2ee-server/2.2.1/car">
<gbean name="org.apache.geronimo.configs/j2ee-server/2.2.1/car?ServiceModule=org.apache.geronimo.configs/j2ee-server/2.2.1/car,j2eeType=GBean,name=CustomPropertiesGBean"
gbeanInfo="org.apache.geronimo.system.properties.SystemProperties">
<attribute name="systemProperties">org.apache.geronimo.configs/activemq-ra/2.2.1/car.ActiveMQ\ RA-javax.jms.MessageListener.InstanceLimit=50</attribute>
</gbean>
</module>
そしてそれはうまくいきました!これにより、デバッグ セッションから使用された ID を取得しました...これで、InstanceLimit=0 を設定し、maxSessions
ActiveMQ のプロパティによって並列作業 MDB を構成できるようになりました。