初学EJB3.0遇到一个问题。用Jboss6.0学习MDB的时候出javax.naming.NameNotFoundException 谷歌了半天也没搞定。
package cong.deng.ejb;import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;@MessageDriven(
  activationConfig = {
     @ActivationConfigProperty(propertyName = "destinationType", propertyValue  = "javax.jms.Queue"),
     @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/myqueue")
  }
)
public class MyQueueMDBBean implements MessageListener {    public void onMessage(Message msg) {
        try {
            TextMessage tmsg = (TextMessage) msg;
            System.out.println("MyQueueMDBBean被调用了[" + tmsg.getText() + "]");
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }}package cong.deng.ejb;import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.InitialContext;public class MyQueueMDBBeanClient {    public static void main(String[] args) throws Exception {
        InitialContext context = new InitialContext();
        QueueConnectionFactory factory = (QueueConnectionFactory) context
                .lookup("ConnectionFactory");        QueueConnection connection = factory.createQueueConnection();
        QueueSession session = connection.createQueueSession(false,
                QueueSession.AUTO_ACKNOWLEDGE);        Queue queue = (Queue)context.lookup("queue/myqueue");
        TextMessage message = session.createTextMessage("你好");
        QueueSender sender = session.createSender(queue);
        sender.send(message);
        session.close();
        connection.close();
        
        System.out.println("end!");
    }
异常Exception in thread "main" javax.naming.NameNotFoundException: myqueue not bound
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
    at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
    at org.jnp.server.NamingServer.lookup(NamingServer.java:443)
    at org.jnp.server.NamingServer.lookup(NamingServer.java:399)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
    at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at cong.deng.ejb.MyQueueMDBBeanClient.main(MyQueueMDBBeanClient.java:24)
小弟初学ejb 望大虾们指点指点

解决方案 »

  1.   

    Exception in thread "main" javax.naming.NameNotFoundException: myqueue not bound从异常信息可以看出来是名字没有定义异常,队列没有范围。剩下的看不懂了,没用过jboss。
      

  2.   


    对,消息列队那个XML楼主你要没有丢在JBOSS里当然JNDI找不到啦。
      

  3.   

    JBoss6的消息配置方法如下:1.打开{JBOSS_HOME}\server\default\deploy\hornetq目录,复制 hornetq-configuration.xml和hornetq-jms.xml到你的系统目录,以保证在编译后这2个文件会被打包到EAR或者JAR的META-INF中。2. 修改hornetq-jms.xml,将里面原来的内容清空,加上你自己的Queue即可。类似于:
    <configuration xmlns="urn:hornetq"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
    <queue name="MyQueue">
    <entry name="/queue/MyQueue"/>
    </queue>
    </configuration>这样就可以在发布EJB的同时将消息队列配置完毕了!
      

  4.   

    现在比较modern的做法不是使用这样冗余的配置文件了,直接登录进jboss,然后添加相应的资源就搞定了