Im новое для java-сообщений, управляемых beans, и у меня есть небольшая проблема. Я сделал тестовый веб-проект (сервер - это стеклянная рыба 4.0).Управляемые сообщениями bean-модули только одно значение
В messageclient я отправляю 3 строки в очередь сообщений. Если я правильно понимаю управляемые сообщениями компоненты, bean с сообщениями должен записывать все значения в моей консоли, но вместо этого он записывает только первое значение в очереди. Я пытаюсь реализовать это, потому что мне нужен другой поток для отправки электронной почты клиенту из моего веб-приложения. Может быть, лучший способ?
вот код моего клиента сообщения:
@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);
}
}
}
И мой управляемый сообщениями компонент:
@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, но это не так.
Пожалуйста, помогите мне.
Я бы так подумал. Не уверен, что это вносит свой вклад в это, но я не вижу, чтобы вы закрывали сеанс и соединение в клиентском коде. Возможно, попробуйте добавить это к клиенту. – mikemil
Пробовал, но не повезло .... – Salko