从 jboss 7.1 开始连接 JMS (Apacher ServiceMix)
Connection with JMS (Apacher ServiceMix) from jboss 7.1
我在 jboss 7.1 中部署了一个 Web 应用程序,它必须将消息发送到在 apacheServiceMix 6.1.0 中实现的 JMS QUEUE。
每当我想发送消息时,我都会收到此错误消息:
Exception in thread "JMX connector" java.lang.UnsupportedOperationException: JBAS011859: Naming context is read-only
我不确定这是配置问题还是我的代码有问题。
ConnectionFactory factory = null;
try{
factory = new ActiveMQConnectionFactory(jmsUser, jmsPassword, jmsUrl);
Producer producer = new Producer(factory, jmsQueue);
Map<String, String> mapMessage = new HashMap<String, String>();
mapMessage.put("From", "mail@from.com");
mapMessage.put("to","mailTo");
mapMessage.put("subject", "Subject");
mapMessage.put("template", "template.vm");
mapMessage.put("user", "username");
mapMessage.put("link", "link");
producer.getMessages().add(mapMessage);
producer.run();
producer.close();
} catch (Exception e){
LOG.error(e.getMessage(), e);
}
Producer.java
public class Producer{
private ConnectionFactory factory;
private Connection connection;
private Session session;
private MessageProducer producer;
private List<Map<String, String>> messages;
public Producer(ConnectionFactory factory, String queueName) throws JMSException
{
this.factory = factory;
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(queueName);
producer = session.createProducer(destination);
}
public void run() throws JMSException
{
for(Map<String, String> mapMessage : messages){
ObjectMessage message = session.createObjectMessage();
for (Map.Entry<String, String> entry : mapMessage.entrySet()){
message.setStringProperty(entry.getKey(), entry.getValue());
}
producer.send(message);
}
}
public void close() throws JMSException
{
if (connection != null)
{
connection.close();
}
}
public List<Map<String, String>> getMessages() {
if(messages == null){
messages = new ArrayList<Map<String, String>>();
}
return messages;
}
public void setMessages(List<Map<String, String>> messages) {
this.messages = messages;
}
}
我尝试使用 -Dorg.apache.activemq.broker.jmx.createConnector=false 参数开始 jboss,结果相同。
有线索吗?
我已经解决了这个问题。
我正在使用 vm (url vm:// ) 协议,当我将其更改为 tcp tcp://:61616 时,它的效果非常好。
我在 jboss 7.1 中部署了一个 Web 应用程序,它必须将消息发送到在 apacheServiceMix 6.1.0 中实现的 JMS QUEUE。
每当我想发送消息时,我都会收到此错误消息:
Exception in thread "JMX connector" java.lang.UnsupportedOperationException: JBAS011859: Naming context is read-only
我不确定这是配置问题还是我的代码有问题。
ConnectionFactory factory = null;
try{
factory = new ActiveMQConnectionFactory(jmsUser, jmsPassword, jmsUrl);
Producer producer = new Producer(factory, jmsQueue);
Map<String, String> mapMessage = new HashMap<String, String>();
mapMessage.put("From", "mail@from.com");
mapMessage.put("to","mailTo");
mapMessage.put("subject", "Subject");
mapMessage.put("template", "template.vm");
mapMessage.put("user", "username");
mapMessage.put("link", "link");
producer.getMessages().add(mapMessage);
producer.run();
producer.close();
} catch (Exception e){
LOG.error(e.getMessage(), e);
}
Producer.java
public class Producer{
private ConnectionFactory factory;
private Connection connection;
private Session session;
private MessageProducer producer;
private List<Map<String, String>> messages;
public Producer(ConnectionFactory factory, String queueName) throws JMSException
{
this.factory = factory;
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(queueName);
producer = session.createProducer(destination);
}
public void run() throws JMSException
{
for(Map<String, String> mapMessage : messages){
ObjectMessage message = session.createObjectMessage();
for (Map.Entry<String, String> entry : mapMessage.entrySet()){
message.setStringProperty(entry.getKey(), entry.getValue());
}
producer.send(message);
}
}
public void close() throws JMSException
{
if (connection != null)
{
connection.close();
}
}
public List<Map<String, String>> getMessages() {
if(messages == null){
messages = new ArrayList<Map<String, String>>();
}
return messages;
}
public void setMessages(List<Map<String, String>> messages) {
this.messages = messages;
}
}
我尝试使用 -Dorg.apache.activemq.broker.jmx.createConnector=false 参数开始 jboss,结果相同。
有线索吗?
我已经解决了这个问题。
我正在使用 vm (url vm:// ) 协议,当我将其更改为 tcp tcp://:61616 时,它的效果非常好。