Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要澄清JMS与activemqbean/资源配置的区别吗_Java_Glassfish_Jms_Activemq_Ejb 3.1 - Fatal编程技术网

Java 需要澄清JMS与activemqbean/资源配置的区别吗

Java 需要澄清JMS与activemqbean/资源配置的区别吗,java,glassfish,jms,activemq,ejb-3.1,Java,Glassfish,Jms,Activemq,Ejb 3.1,在如何使用JMS资源以及在@MessageDriven批注上使用适当的@ActivationConfigProperty设置activationConfig时,似乎存在一些不一致 首先,这里是我的资源配置(glassfish resources.xml,但可转换为其他部署描述符)。这适用于Glassfish(asadmin add resources Glassfish resources.xml)以及: 当定义@MessageDrivenbean时,就会出现混淆。使用mappedName的以下

在如何使用JMS资源以及在
@MessageDriven
批注上使用适当的
@ActivationConfigProperty
设置
activationConfig
时,似乎存在一些不一致

首先,这里是我的资源配置(glassfish resources.xml,但可转换为其他部署描述符)。这适用于Glassfish(
asadmin add resources Glassfish resources.xml)以及:

当定义@MessageDrivenbean时,就会出现混淆。使用mappedName的以下命令引发异常:

@MessageDriven(mappedName = "jms/queue/myApp")
public class MessageBean implements MessageListener
警告:RAR8000:类中不存在方法setName: org.apache.activemq.command.ActiveMQQueue警告:RAR7097:否 类中的属性名称存在setter方法 org.apache.activemq.command.activemq队列信息:访问未访问 参考资料信息:访问未访问的参考资料警告:RAR8501: ra[activemq rar]的端点激活期间发生异常, activationSpecClass[org.apache.activemq.ra.ActiveMQActivationSpec] :javax.resource.ResourceException:未知目标类型:null 严重:MDB00017:[InvoiceProductionMessageBean]:中出现异常 正在创建消息驱动bean容器:[java.lang.Exception]严重: java.lang.Exception

我被迫将我的MDB定义为:

@MessageDriven(
        activationConfig = {
            @ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "jms/factory/myApp"),
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "myAppAMQ"),
            @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = " JMSType = 'TypeA' "),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
        }
)
public class MessageBean implements MessageListener
我需要提供一个glassfish ejb jar.xml告诉容器使用ActiveMQ资源,否则我会得到一个
java.lang.ClassCastException

警告:RAR8501:ra端点激活期间发生异常[ jmsra],activationSpecClass[com.sun.messaging.jms.ra.ActivationSpec ]:java.lang.ClassCastException: 无法将org.apache.activemq.ra.ActiveMQConnectionFactory强制转换为 com.sun.messaging.jms.ra.DirectConnectionFactory严重:MDB00017: [MessageBean]:创建消息驱动程序时出现异常 bean容器:[java.lang.Exception]严重:java.lang.Exception

glassfish ejb jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>MessageBean</ejb-name>
            <mdb-resource-adapter>
                <resource-adapter-mid>activemq-rar</resource-adapter-mid>
            </mdb-resource-adapter>
        </ejb>
    </enterprise-beans>
</glassfish-ejb-jar>

MessageBean
activemq rar
因此,生产者如何使用资源(JNDI)和消费者如何使用资源(XML+
@ActivationConfigProperty
)之间似乎存在一些不一致之处。此外,EE7 ActivationConfigProperty属性似乎不起作用。例如,使用destinationLookup不会查找目标,我被迫使用ActiveMQ的
destination
属性

ActiveMQ:

acknowledgeMode(要使用的JMS确认模式。有效值 是:自动确认或Dups ok确认)

clientId(要使用的JMS客户端ID(仅在持久的 (主题)

目的地类型(目的地类型;队列或主题)

目的地(目的地名称(队列或主题名称))

启用批处理(用于启用事务批处理以增加 (表演)

maxMessagesPerBatch(每个事务批处理的消息数)

maxMessagesPerSessions(这实际上是 订阅。(是的,名称不正确。)

maxSessions(要使用的最大并发会话数)

消息选择器(用于订阅的JMS消息选择器 执行基于内容的路由(对邮件进行筛选)

noLocal(仅主题订阅需要;指示是否在本地 已发布的邮件是否应包含在订阅中)

密码(JMS连接的密码)

订阅耐久性(无论是否为持久(主题)订阅 是必需的。有效值为:持久或不持久)

subscriptionName(持久订户的名称。仅用于 持久主题,并与clientID相结合,以唯一标识 持久主题订阅)

用户名(JMS连接的用户)

useRAManagedTransaction(通常,资源适配器提供 发送到由容器管理的端点的消息。通常, 此容器希望成为要控制 用于传递入站邮件的事务。但是 有时,您希望交付到一个更简单的容器系统,该系统将 无法控制入站事务。在这些情况下,如果 如果useRAManagedTransaction为true,则资源适配器将提交 如果MessageListener未生成异常,则执行事务,并且 如果引发异常,请回滚。)

初始重新交付显示(重新交付开始前的延迟。另外 可在ResourceAdapter上配置)

最大重新交付次数(重新交付的最大次数或-1表示否 最大值。也可在ResourceAdapter上配置)

重新交付回退乘数(返回时使用的乘数 关闭已启用。也可在ResourceAdapter上配置)

重新交付参见指数退避(启用指数退避。另外 可在ResourceAdapter上配置useJndi否false为true时,使用 目标(作为jndi名称)

Java EE7规范:

acknowledgeMode(此属性用于指定JMS bean管理时消息传递的确认模式 使用事务划分。其值为自动确认或 Dups_ok_确认。如果未指定此属性,则JMS 假设自动确认语义

消息选择器(Thi
@MessageDriven(
        activationConfig = {
            @ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "jms/factory/myApp"),
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "myAppAMQ"),
            @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = " JMSType = 'TypeA' "),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
        }
)
public class MessageBean implements MessageListener
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>MessageBean</ejb-name>
            <mdb-resource-adapter>
                <resource-adapter-mid>activemq-rar</resource-adapter-mid>
            </mdb-resource-adapter>
        </ejb>
    </enterprise-beans>
</glassfish-ejb-jar>