Weblogic如何只有一个Message驱动bean的实例/线程

时间:2016-12-02 18:36:29

标签: java ejb weblogic12c message-driven-bean

在Weblogic 12c中,我怎么才能只有一个Message driven bean的实例/线程。

我找不到" max-beans-in-free-pool"的等效注释属性。如此处所定义 https://docs.oracle.com/cd/E24329_01/web.1211/e24977/summary.htm#WLMDB1385

Java代码: -

    @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "connectionFactoryJndiName", propertyValue = "jms/myConnectionFactory"),
        @ActivationConfigProperty(propertyName = "destinationJndiName", propertyValue = "jms/myQueue"),
        @ActivationConfigProperty(propertyName = "MaxPoolSize", propertyValue = "1") })
public class JayMDB implements MessageListener {

额外参考:https://docs.oracle.com/cd/E24329_01/web.1211/e24390/mdbtuning.htm#PERFM271

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用weblogic的工作管理员? 从管理控制台 - >创建一个,将1分配给新的最大线程容量约束并将其分配给您的工作管理器。在MDB中使用此工作管理器(例如,在weblogic-ra.xml中设置)。

在这种情况下,您将只有一个按节点划分MDB所针对的线程。

答案 1 :(得分:0)

感谢大家的投入,是的,我通过工作经理和工作组合解决了这个问题。 max-beans-in-free-pool,maxSession属性。以下是我需要后者的完整代码。

<强> weblogic.xml中

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.6/weblogic-web-app.xsd">
  <session-descriptor></session-descriptor>
  <jsp-descriptor></jsp-descriptor>
  <container-descriptor></container-descriptor>
  <work-manager>
    <name>WorkManager-MDB</name>
    <max-threads-constraint>
      <name>MaxThreadsConstraint-MDB</name>
      <count>1</count>
    </max-threads-constraint>
  </work-manager>
</weblogic-web-app>

<强> WebLogic的EJB-jar.xml中

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://www.oracle.com/technology/weblogic/weblogic-ejb-jar/1.1/weblogic-ejb-jar.xsd">

    <weblogic-enterprise-bean>
        <ejb-name>JayMDB</ejb-name>

        <message-driven-descriptor>
            <pool>
                <max-beans-in-free-pool>1</max-beans-in-free-pool>
            </pool>
        </message-driven-descriptor>
    </weblogic-enterprise-bean>

</weblogic-ejb-jar>

消息驱动Bean

@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "connectionFactoryJndiName", propertyValue = "jms/myConnectionFactory"),
@ActivationConfigProperty(propertyName = "destinationJndiName", propertyValue = "jms/myQueue"),
@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1")})
public class JayMDB implements MessageListener {