`
bawking
  • 浏览: 33635 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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=RequestOmsQueue" 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics