我正在学习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();
}
}
}
}