jboss message driver bean:NameNotFoundException

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值