从消息驱动的bean访问托管bean

时间:2015-09-01 12:09:54

标签: jsf ejb jms managed-bean message-driven-bean

我正在学习JMS,我想将它应用于JSF,我创建了2个托管bean,生成者发送消息和消费者,我创建了一个实现messagelistner的MDB并且具有onMessage方法,JMS提供者是Wildfly 8 ,我可以由生产者从JSF发送消息,MDB接收它,我想让MDB访问消费者托管bean并设置消息然后再次在JSF中更新它,我试过@Managedproberty和@EJB但是我得到了null,在MDB中requestContext和faceContext也是null,我仍然是EJB的初学者所以我想念很多东西,我的问题是如何从EJB一般访问托管bean和MDB专门,我知道我可以使用其他技术来做像推送甚至网络套接字,但我想先学习JSM。 这是MDB代码

package boddooo.jms;

import java.io.Serializable;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.primefaces.context.RequestContext;

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
            propertyName = "destination", propertyValue = "jms/queue/boddooo"), @ActivationConfigProperty(
            propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    }, 
    mappedName = "jms/queue/boddooo")

public class mdb implements Serializable, MessageListener {

private static final long serialVersionUID = 1L;

TextMessage tm;

@Override
public void onMessage(Message message) {
    if(RequestContext.getCurrentInstance()!=null){
        RequestContext fc=RequestContext.getCurrentInstance();
        consumer c=(consumer)fc.getAttributes().get("consumer");
        tm = (TextMessage) message;
        try {
            c.setMsg(tm.getText());
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

}

0 个答案:

没有答案