EJB30在发布时出现异常javax.naming.NameNotFoundException: RequestOmsQueue not bound
platform:
Jboss 5.1GA(默认jms提供者为JBoss Messaging 1.4,而非JbossMQ)
服务器端:
package com.octawave.oms.trade.msg;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
/**
* Message-Driven Bean implementation class for: QueueMessageBean
*
*/
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/RequestOmsQueue") })
public class QueueMessageBean implements MessageListener {
/**
* Default constructor.
*/
public QueueMessageBean() {
// TODO Auto-generated constructor stub
}
/**
* @see MessageListener#onMessage(Message)
*/
public void onMessage(Message message) {
try {
ObjectMessage obj = (ObjectMessage) message;
System.out.println("服务器收到的消息是:" + omessage.getObject());
} catch (Exception e) {
}
}
}
客户端:
package com.octawave.oms.trade.msg;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class MDBClient {
public static void main(String[] args) {
try {
InitialContext context = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) context
.lookup("ConnectionFactory");
QueueConnection connection = factory.createQueueConnection();
QueueSession session = connection.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
// 获取Destination对象
Queue queue = (Queue) context.lookup("queue/RequestOmsQueue");
// 创建发送者
QueueSender sender = session.createSender(queue);
// 创建文本消息
ObjectMessage msg = session.createObjectMessage("hello world!");
// 发送消息
sender.send(msg);
// 关闭会话
session.close();
connection.close();
System.out.println("消息发送完毕");
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
我发现在JBoss5.x根目录server/default/deploy下的mail-service.xml文件中加入如下:
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.org.destination:server=Queue,name=RequestOmsQueue" >
<attribute name="JNDIName" >queue/RequestOmsQueue</attribute>
<depends optional-attribute-name = "DestinationManager" >
jboss.mq:service=DestinationManager
</depends>
</mbean>
重启JBoss问题即解决。
这是我自己的情况。当然这个导致这个异常的肯定不止这一个问题。《JBoss AS 5 Development》第7章有提到在server/**/deploy下建立一个*-service.xml的文件,大致如下:
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.messaging.destination:service=Queue,name=[color=red]RequestOmsQueue[/color]" xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
</mbean>
</server>
另外还有,实体和数据库连接不上或者出问题时,也会出现NameNotFoundException,比如
persistence.xml里的<jta-data-source>java:/MySqlDS</jta-data-source>没有对应好。
附:
另见:http://jeff312.iteye.com/blog/398687
platform:
Jboss 5.1GA(默认jms提供者为JBoss Messaging 1.4,而非JbossMQ)
服务器端:
package com.octawave.oms.trade.msg;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
/**
* Message-Driven Bean implementation class for: QueueMessageBean
*
*/
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/RequestOmsQueue") })
public class QueueMessageBean implements MessageListener {
/**
* Default constructor.
*/
public QueueMessageBean() {
// TODO Auto-generated constructor stub
}
/**
* @see MessageListener#onMessage(Message)
*/
public void onMessage(Message message) {
try {
ObjectMessage obj = (ObjectMessage) message;
System.out.println("服务器收到的消息是:" + omessage.getObject());
} catch (Exception e) {
}
}
}
客户端:
package com.octawave.oms.trade.msg;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class MDBClient {
public static void main(String[] args) {
try {
InitialContext context = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) context
.lookup("ConnectionFactory");
QueueConnection connection = factory.createQueueConnection();
QueueSession session = connection.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
// 获取Destination对象
Queue queue = (Queue) context.lookup("queue/RequestOmsQueue");
// 创建发送者
QueueSender sender = session.createSender(queue);
// 创建文本消息
ObjectMessage msg = session.createObjectMessage("hello world!");
// 发送消息
sender.send(msg);
// 关闭会话
session.close();
connection.close();
System.out.println("消息发送完毕");
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
我发现在JBoss5.x根目录server/default/deploy下的mail-service.xml文件中加入如下:
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.org.destination:server=Queue,name=RequestOmsQueue" >
<attribute name="JNDIName" >queue/RequestOmsQueue</attribute>
<depends optional-attribute-name = "DestinationManager" >
jboss.mq:service=DestinationManager
</depends>
</mbean>
重启JBoss问题即解决。
这是我自己的情况。当然这个导致这个异常的肯定不止这一个问题。《JBoss AS 5 Development》第7章有提到在server/**/deploy下建立一个*-service.xml的文件,大致如下:
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.messaging.destination:service=Queue,name=[color=red]RequestOmsQueue[/color]" xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
</mbean>
</server>
另外还有,实体和数据库连接不上或者出问题时,也会出现NameNotFoundException,比如
persistence.xml里的<jta-data-source>java:/MySqlDS</jta-data-source>没有对应好。
附:
另见:http://jeff312.iteye.com/blog/398687