【发布时间】:2014-03-15 17:25:33
【问题描述】:
我是 java 消息驱动 bean 的新手,我有一个小问题。我做了一个测试网络项目(服务器是 glassfish 4.0)。
在消息客户端中,我将 3 个字符串发送到消息队列。如果我正确理解消息驱动 bean,消息驱动 bean 应该在我的控制台中写出所有值,但它只写队列中的第一个值。 我正在尝试实现这一点,因为我需要不同的线程从我的 Web 应用程序向客户发送电子邮件。有没有更好的办法?
这是我的消息客户端的代码:
@Named(value = "messageDrivenbean")
@ViewScoped
public class MessageDrivenBeanClient implements Serializable
{
ArrayList <String>mail;
@Resource(name="connFactory", mappedName="mailConnFactory")
private QueueConnectionFactory QueueConnectionFactory;
@Resource(name="jmsQueue", mappedName="Queue")
private Queue queue;
/**
* Creates a new instance of testingbean
*/
public MessageDrivenBeanClient()
{
}
@PostConstruct
public void init(){
}
Connection conn;
public void start() throws JMSException
{
String text;
Message msg = null;
final int NUM_MSGS = 3;
conn = QueueConnectionFactory.createConnection();
Session sesion=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer msgProducer=sesion.createProducer(queue);
msg=sesion.createTextMessage();
for (int i = 0; i < NUM_MSGS; i++) {
text = "This is message " + (i + 1);
System.out.println("Sending message: " + text);
msg.setStringProperty("message", text);
msgProducer.send(msg);
}
}
}
还有我的消息驱动 bean:
@MessageDriven(activationConfig =
{
@ActivationConfigProperty
(propertyName="destinationType",propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "Queue")
})
public class MsgDrivnBean implements MessageListener
{
@Resource
private MessageDrivenContext mdc;
public MsgDrivnBean()
{
}
@Override
public void onMessage(Message message)
{
TextMessage tm=null;
try{
if(message instanceof TextMessage){
tm= (TextMessage) message;
System.out.println(message.getStringProperty("message"));
System.out.print("sem v msgdrivenbeanu"+ tm.getStringProperty("message"));
//logger.error(tm.getText());
}
else
{
System.out.println("Error");
}
}
catch(JMSException jms)
{
jms.printStackTrace();
mdc.setRollbackOnly();
}
}
}
我目前的输出是:
Sending message: This is message 1
INFO: Sending message: This is message 2
INFO: Sending message: This is message 3
INFO: This is message 1
INFO: sem v msgdrivenbeanuThis is message 1
我认为它也应该写出消息 2 和消息 3,但它没有。
请帮帮我。
【问题讨论】:
-
我也这么认为。不确定这是否有助于它,但我没有看到您在客户端代码中关闭会话和连接。也许尝试将其添加到客户端。
-
试过但没有运气......
标签: jakarta-ee jms message-driven-bean java-ee-7