首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jboss 6.4中不同消息提供程序的多个资源适配器是否共享默认bean实例池?

Jboss 6.4中不同消息提供程序的多个资源适配器是否共享默认bean实例池?
EN

Stack Overflow用户
提问于 2016-10-18 15:29:47
回答 1查看 1.7K关注 0票数 0

我们使用的是JBoss EAP6.4。在我们的项目中,我们使用两个MOM: 1) Websphere MQ 2) Solace MQ这是上面两个MOM在我们的standalone.xml中定义的资源适配器

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:1.7">
<profile>       

    <subsystem xmlns="urn:jboss:domain:ejb3:1.5">

        <mdb>
            <resource-adapter-ref resource-adapter-name="wmq.jmsra.rar"/>
            <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
        </mdb>
        <pools>
            <bean-instance-pools>
                <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
            </bean-instance-pools>
        </pools>

    </subsystem>


    <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
        <resource-adapters>

            <resource-adapter id="wmq.jmsra.rar">
                <archive>wmq.jmsra.rar</archive>
                <transaction-support>NoTransaction</transaction-support>
                <config-property name="traceLevel">3</config-property>
                <config-property name="traceEnabled">true</config-property>
                <connection-definitions>
                    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedQueueConnectionFactoryImpl" jndi-name="java:jboss/jms/myJMSQueueConnectionFactory" enabled="true" use-java-context="true" pool-name="jms/myJMSQueueConnectionFactoryPool">
                        <config-property name="channel">${mq.channel}</config-property>
                        <config-property name="hostName">${mq.host}</config-property>
                        <config-property name="transportType">${mq.transportType}</config-property>
                        <config-property name="queueManager">${mq.manager}</config-property>
                        <config-property name="port">${mq.port}</config-property>                            
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/abcQueue" enabled="true" use-java-context="true" pool-name="jms/abcQueuePool">
                        <config-property name="targetClient">MQ</config-property>
                        <config-property name="persistence">PERS</config-property>
                        <config-property name="expiry">UNLIMITED</config-property>
                        <config-property name="baseQueueName">${my.abc.queue}</config-property>
                        <config-property name="arbitraryProperties">mdMessageContext="2",mdWriteEnabled="true",mdReadEnabled="true"</config-property>
                        <config-property name="baseQueueManagerName">${mq.manager}</config-property>
                    </admin-object>                       
                </admin-objects>
            </resource-adapter>

            <resource-adapter id="com.solacesystems.ra">
                <archive>sol-jms-ra-7.1.2.248.rar</archive>
                <transaction-support>NoTransaction</transaction-support>
                <config-property name="extendedProps">${solace.extendedproperties}</config-property>
                <config-property name="UserName">${solace.username}</config-property>
                <config-property name="MessageVPN">${solace.vpn}</config-property>
                <config-property name="ConnectionURL">${solace.connectionurl}</config-property>
                <config-property name="Password">${solace.password}</config-property>
                <connection-definitions>
                    <connection-definition class-name="com.solacesystems.jms.ra.outbound.ManagedJMSConnectionFactory" jndi-name="java:jboss/jms/solaceMessageConnectionFactory" enabled="true" pool-name="solaceMessageCFPool">
                        <config-property name="ConnectionFactoryJndiName">${solace.connectionfactory}</config-property>
                        <security>
                            <application/>
                        </security>
                        <validation>
                            <background-validation>false</background-validation>
                        </validation>
                        <recovery>
                            <recover-credential>
                                <user-name>${solace.username}</user-name>
                                <password>${solace.password}</password>
                            </recover-credential>
                        </recovery>
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="com.solacesystems.jms.ra.outbound.TopicProxy" jndi-name="java:jboss/jms/xyzMessageTopic" enabled="true" use-java-context="false" pool-name="xyzMessageTopicPool">
                        <config-property name="Destination">${xyz.topic}</config-property>
                    </admin-object>
                </admin-objects>
            </resource-adapter>
        </resource-adapters>
    </subsystem>
</profile>

在上面的文件中,我们基本上定义了两个resourceAdapters --一个用于WMQ,另一个用于Solace。

  • <mdb>标记下,我们定义了默认资源适配器名和定义了<bean-instance-pool-ref值,以限制默认情况下用于消息驱动Beans的实例池。
  • 对于很少的MDB,我们使用jboss-ejb3.xml显式地覆盖每个bean的实例池值。

由于我们有多个消息驱动的bean同时监听WMQ和SOLACE,所以我的问题是:

  1. 我们尚未在jboss-ejb3.xml中定义显式池的MDB(监听WMQ队列和安慰队列)是否共享标记下定义的相同默认池?
  2. 还是类似于默认池只适用于侦听WMQ队列的MDB。
  3. 如果默认池仅应用于侦听WMQ队列的MDB,则侦听standalone.xml或jBos-ejb3.xml中没有定义池大小的Solace队列的MDB会发生什么情况?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 15:03:00

1)没有指定实例池的mdb将使用默认的mdb-严格-最大-池。您可以定义自己的池(我建议这样做):

代码语言:javascript
复制
        <pools>
            <bean-instance-pools>
                <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                <strict-max-pool name="MyPool" max-pool-size="10" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
            </bean-instance-pools>
        </pools>

然后使用注释:

代码语言:javascript
复制
import org.jboss.ejb3.annotation.Pool;

@Pool(value="MyPool") 

在MDB里。这也可以在部署描述符文件中完成。

2)见上文。我更喜欢每个MDB部署的实例池。我不喜欢MDB竞争实例池。

3)与上述相同。请注意,您可以看到MDB部署在JMX中使用的实例池名称。注意,如果您有单独的实例池,则池统计信息将变得更有意义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40112293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档