使用Amazon EC2代理的CloudBees上的JMS应用程序

时间:2013-11-19 16:26:56

标签: amazon-ec2 jms cloudbees java-ee-7

我有一个Java ee 7 JMS应用程序,我想在CloudBees上部署它。我尝试过使用cloudAMQP的简单应用程序,它可以工作。但CloudAMQP提供托管的RabbitMQ服务。我必须使用JMS客户端,因为我的代码是在java JMS中实现的。

最后一天,我在Amazon Ec2中创建了一个glassfish 4经纪人,我在CloudBees glassfish web profile平台上部署了一个简单的JMS应用程序,我预计它可以与我的Amazon glassfish经纪人合作。但是有一个错误。

我的代码是:

@JMSConnectionFactoryDefinition(
    name="java:comp/jms/__defaultConnectionFactory",
    maxPoolSize = 30,
    minPoolSize= 20,
    properties = {
        "addressList=mq://ec2-54-194-27-99.eu-west-1.compute.amazonaws.com:7676",
        "reconnectEnabled=true"
    }
) 

@JMSDestinationDefinition(
    name = "java:comp/jms/webappQueue",
    interfaceName = "javax.jms.Queue",
    destinationName = "PhysicalWebappQueue")

    @Named
    @RequestScoped
    public class ReceiverBean {

        static final Logger logger = Logger.getLogger("ReceiverBean");
        @Inject
        private JMSContext context;
        @Resource(lookup = "java:comp/jms/webappQueue")
        private Queue queue;
       .....

    public void getMessage() {
            try {
                JMSConsumer receiver = context.createConsumer(queue);
                String text = receiver.receiveBody(String.class, 1000);

                if (text != null) {
                    FacesMessage facesMessage =
                            new FacesMessage("Reading message: " + text);
                    FacesContext.getCurrentInstance().addMessage(null, facesMessage);
                } else {
                    FacesMessage facesMessage =
                            new FacesMessage("No message received after 1 second");
                    FacesContext.getCurrentInstance().addMessage(null, facesMessage);
                }
            } catch (JMSRuntimeException t) {
                logger.log(Level.SEVERE,
                        "ReceiverBean.getMessage: Exception: {0}",
                        t.toString());
            }
        }

错误是

  

| 2013-11-17T22:34:09.146 + 0000 | SEVERE | glassfish 4.0 | javax.enterprise.system.core | _ThreadID = 45; _TreadName = AutoDeployer; _TimeMillis = 1384727649146; _LevelValue = 1000; |

     

加载应用时出现异常:CDI部署失败:异常   列表有2个例外:

     

异常0:

     

org.jboss.weld.exceptions.DeploymentException:WELD-001408不满意   类型为[JMSContext]的依赖项,带有限定符[@Default] at   注入点[[BackedAnnotatedField] @Inject private   javaeetutorial.websimplemessage.SenderBean.context]

你对我的案子有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

Web配置文件不包含JMS,因此不支持此API和相关的注释/注入。 为此,您需要在容器中使用完整的JavaEE +足够的配置集来插入您的代理。使用vanila JMS API和注释驱动的集成可能更简单