4.7. 激活配置属性
4.7.1. 使用注解配置 MDB 复制链接链接已复制到粘贴板!
您可以使用 @MessageDriven 元素和对应于 @ ActivationConfigProperty 注释的子元素来配置激活 属性。@ActivationConfigProperty 是 MDB 的一组激活配置属性。@ActivationConfigProperty 注释规范如下:
@Target(value={})
@Retention(value=RUNTIME)
public @interface ActivationConfigProperty
{
String propertyName();
String propertyValue();
}
显示 @ActivationConfigProperty 的示例
@MessageDriven(name="MyMDBName",
activationConfig =
{
@ActivationConfigProperty(propertyName="destinationLookup",propertyValue="queueA"),
@ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
})
4.7.2. 使用部署描述符配置 MDB 复制链接链接已复制到粘贴板!
ejb 将 bean 定义为 MDB。-jar.xml 中的 <message-driven > 元素<activation-config> 和元素包含通过 activation-config-property 元素的 MDB 配置。
ejb-jar.xml示例
<?xml version="1.1" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<enterprise-beans>
<message-driven>
<ejb-name>MyMDBName</ejb-name>
<ejb-class>org.jboss.tutorial.mdb_deployment_descriptor.bean.MyMDBName</ejb-class>
<activation-config>
<activation-config-property>
<activation-config-property-name>destinationLookup</activation-config-property-name>
<activation-config-property-value>queueA</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>acknowledgeMode</activation-config-property-name>
<activation-config-property-value>Auto-acknowledge</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
<enterprise-beans>
</jboss:ejb-jar>
| Name | 描述 |
|---|---|
|
| 队列或主题的 Java 命名和目录接口名称。这是一个强制值。 |
|
|
管理员定义的
如果未明确定义,则使用名称为 |
|
|
目标有效值的类型为 |
|
|
|
|
|
不使用转换的 Jakarta Messaging 时进行确认的类型。有效值为
默认值为 |
|
| 连接的客户端 ID。这不是强制值。 |
|
|
主题订阅是否持久.有效值为
默认值为 |
|
| 主题订阅的订阅名称。这不是强制值。 |
| Name | 描述 |
|---|---|
|
|
将此属性与 |
|
| 连接是否已配置为共享订阅。
默认值为 |
|
| Jakarta 消息传递连接的用户。这不是强制值。 |
|
| Jakarta Messaging 连接的密码。这不是强制值。 |
|
| 要使用的最大并发会话数。这不是强制值。
默认值为 |
|
| 会话的事务超时,以毫秒为单位。这不是强制值。
如果没有指定或 0,则忽略该属性,并且不会覆盖 |
|
| 是否使用 Java 命名和目录接口来查找目的地。
默认值为 |
|
|
要在连接中使用的 Java 命名和目录接口参数。参数定义为 |
|
| 使用本地事务而不是 XA。
默认值为 |
|
| 设置雅加达消息传递连接的尝试次数。有可能在 Jakarta Messaging 资源可用之前部署 MDB。在这种情况下,资源适配器将尝试设置几次,直到资源可用为止。这只适用于入站连接。
默认值为 |
|
| 设置 Jakarta 消息传递连接的连续尝试间隔,以毫秒为单位。这只适用于入站连接。
默认值为 |
|
| 是否启用入站连接重新平衡。此参数允许在底层集群拓扑更改时重新平衡所有入站连接。 出站连接没有重新平衡。
默认值为 |
|
| 白名单以逗号分隔的条目列表,这是受信任的类和软件包列表。此属性供 Jakarta 消息传递资源适配器用于允许取消序列列表中的对象。 如需更多信息,请参阅为 JBoss EAP 配置消息传递中的 控制 Jakarta 消息传递 对象Message Deserialization。 |
|
| 黑名单以逗号分隔的条目列表,这是不受信任的类和软件包列表。此属性供 Jakarta 消息传递资源适配器使用,以防止列表中的对象被非序列化。 如需更多信息,请参阅为 JBoss EAP 配置消息传递中的 控制 Jakarta 消息传递 对象Message Deserialization。 |
4.7.3. 配置 MDB 的一些用例示例 复制链接链接已复制到粘贴板!
MDB 接收消息的用例
有关 MDB 收到消息的基本场景,请参阅 JBoss EAP 附带的
helloworld-mdb快速启动。MDB 发送消息的用例
在处理完消息后,您可能需要通知其他业务系统或回复该消息。在这种情况下,您可以从 MDB 发送消息,如下所示:
package org.jboss.as.quickstarts.mdb; import javax.annotation.Resource; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.inject.Inject; import javax.jms.JMSContext; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.Queue; @MessageDriven(name = "MyMDB", activationConfig = { @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queue/MyMDBRequest"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") }) public class MyMDB implements MessageListener { @Inject private JMSContext jmsContext; @Resource(lookup = "java:/queue/ResponseDefault") private Queue defaultDestination; /** * @see MessageListener#onMessage(Message) */ public void onMessage(Message rcvMessage) { try { Message response = jmsContext.createTextMessage("Response for message " + rcvMessage.getJMSMessageID()); if (rcvMessage.getJMSReplyTo() != null) { jmsContext.createProducer().send(rcvMessage.getJMSReplyTo(), response); } else { jmsContext.createProducer().send(defaultDestination, response); } } catch (JMSException e) { throw new RuntimeException(e); } } }在上例中,在 MDB 收到消息后,它将回复
JMSReplyTo中指定的目的地或绑定到 Java 命名和目录接口名称java:/queue/ResponseDefault的目的地。MDB 配置入站连接重新平衡的用例
@MessageDriven(name="MyMDBName", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queueA"), @ActivationConfigProperty(propertyName = "rebalanceConnections", propertyValue = "true") } )