请配置jboss/server/default/conf下的jbossmq-state.xml文件:
 <Users>

    <User>

      <Name>csmjboss</Name>

      <Password>isdnymk</Password>

      <Id>csmjbossid</Id>

    </User>

    <User>

      <Name>csm</Name>

      <Password>isdnymk</Password>

      <Id>csmid</Id>

    </User>

    <User>
<Role name="subscriber">

      <UserName>csm</UserName>

      <UserName>csmsub</UserName>

      <UserName>csmjboss</UserName>

      <UserName>client1</UserName>

      <UserName>client2</UserName>

      <UserName>client3</UserName>

      <UserName>client4</UserName>

      <UserName>client5</UserName>
      <UserName>client6</UserName>
      <UserName>client7</UserName>
      <UserName>client8</UserName>
    </Role>

    <Role name="test">

      <UserName>csm</UserName>

    </Role>
然后配置jboss/server/default/deploy/jms/jbossmq-destination-service.xml文件:  <mbean code="org.jboss.mq.server.jmx.Topic"
 name="jboss.mq.destination:service=Topic,name=csmjms">
    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>
    <attribute name="SecurityConf">
       <security>
<role name="subscriber" read="true" write="true" create="true"/>
<role name="publisher" read="true" write="true" create="true"/>
      </security>
    </attribute>
  </mbean>记住,如果是持久订阅消息一定要设USERNAME,ROLE然后把ROLE加到jbossmq-destination-service文件中,像上述那样加

解决方案 »

  1.   

    lifetragedy(生活是场悲剧)大侠,先在此谢过.
        但如果我的JMS是用Queue而不是Topic呢?是否还要配jbossmq-state.xml文件,jbossmq-destination-service.xml文件的<mbean>中的<attribute name="SecurityConf">
           <security>
    <role name="subscriber" read="true" write="true" create="true"/>
    <role name="publisher" read="true" write="true" create="true"/>
          </security>
    又怎么配?
        谢谢大侠!
      

  2.   

    我刚刚试过,好像还是不行.
      我将以下加入jboss/server/default/deploy/jms/jbossmq-destination-service.xml中
    <mbean code="org.jboss.mq.server.jmx.Queue"
     name="jboss.mq.destination:service=Queue,name=myQueue">
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>
        <attribute name="SecurityConf">
           <security>
    <role name="guest" read="true" write="true"/>
            <role name="publisher" read="true" write="true" create="true"/>
            <role name="noacc" read="true" write="true" create="true"/>
          </security>
        </attribute>
      </mbean>
    然后我的jbossmq-state.xml是这样的
    <?xml version="1.0" encoding="UTF-8"?>
    <StateManager>
    <Users>
    <User>
    <Name>john</Name>
    <Password>needle</Password>
    <Id>DurableSubscriberExample</Id>
    </User>
    <User>
    <Name>guest</Name>
    <Password>guest</Password>
    </User>
    <User>
    <Name>nobody</Name>
    <Password>nobody</Password>
    </User>
    <User>
    <Name>dynsub</Name>
    <Password>dynsub</Password>
    </User>
    </Users>
    <Roles>
    <Role name="guest">
    <UserName>guest</UserName>
    <UserName>john</UserName>
    </Role>
    <Role name="subscriber">
    <UserName>john</UserName>
    </Role>
    <Role name="publisher">
    <UserName>john</UserName>
    <UserName>dynsub</UserName>
    </Role>
    <Role name="durpublisher">
    <UserName>john</UserName>
    <UserName>dynsub</UserName>
    </Role>
    <Role name="noacc">
    <UserName>john</UserName>
    <UserName>nobody</UserName>
    </Role>
    </Roles>
    <DurableSubscriptions>
    </DurableSubscriptions>
    </StateManager>
      

  3.   

    add the follow code in file destinations-service.xml <mbean code="org.jboss.mq.server.jmx.Queue"
     name="jboss.mq.destination:service=Queue,name=order">
        <attribute name="JNDIName">queue/order</attribute>
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
      </mbean>
     modify order to your queue jndi name
      

  4.   

    you can reference this page too
    http://xpetstore.sourceforge.net/setup_jboss-3.0.x.html
      

  5.   

    你用的QUEUE不用配那个jbossmq-state.xml
    只要配那个destination-service.xml
    <mbean code="org.jboss.mq.server.jmx.Queue"
     name="jboss.mq.destination:service=Queue,name=order">
        <attribute name="JNDIName">queue/order</attribute>
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
      </mbean>
    <depends security>千万不能要,要不你就成了要权限的QUEUE了,OK?
      

  6.   

    多谢上面这位仁兄!
        我试过,还是不行.
           我有点怀疑是我程序的问题,我改了一下用jbuilder生成的程序(加了一个方法setEnviroment()和getInitialContext那里改成了return new javax.naming.InitialContext(environment);),如下:
    package datatransfer;import javax.jms.MessageListener;
    import javax.naming.Context;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueConnection;
    import javax.jms.QueueSession;
    import javax.jms.QueueSender;
    import javax.jms.QueueReceiver;
    import javax.jms.Queue;
    import java.io.Serializable;
    import javax.jms.Message;
    import java.util.Hashtable;public class Jms
        implements MessageListener {
      private static Context context;
      private boolean transacted = false;
      private int acknowledgementMode = javax.jms.Session.AUTO_ACKNOWLEDGE;
      private QueueConnectionFactory queueConnectionFactory;
      private QueueConnection queueConnection;
      private QueueSession queueSession;
      private QueueSender queueSender;
      private QueueReceiver queueReceiver;
      private Queue queue;
      private String queueConnectionFactoryName = "ConnectionFactory";
      private String sendQueueName = "myQueue";
      private String recvQueueName = "myQueue";
      private Hashtable environment;  public Jms()
      {  }  public Jms(String queueConnectionFactoryName,String sendQueueName,String recvQueueName)
      {
        this.queueConnectionFactoryName = queueConnectionFactoryName;
        this.sendQueueName = sendQueueName;
        this.recvQueueName = recvQueueName;
      }  public void setEnvironment(Hashtable environment)
      {
        this.environment = environment;
      }
      public void setTransacted(boolean transacted)
      {
        this.transacted = transacted;
      }  public void sendObject(Serializable message) throws Exception
      {
        javax.jms.ObjectMessage objectMessage = getQueueSession().
            createObjectMessage();
        objectMessage.clearBody();
        objectMessage.setObject(message);
        getQueueSender().send(objectMessage);
        if (isTransacted()) {
          getQueueSession().commit();
        }
      }  public void sendText(String message) throws Exception {
        javax.jms.TextMessage textMessage = getQueueSession().createTextMessage();
        textMessage.clearBody();
        textMessage.setText(message);
        getQueueSender().send(textMessage);
        if (isTransacted()) {
          getQueueSession().commit();
        }
      }  public QueueReceiver getQueueReceiver() throws Exception {
        if (queueReceiver == null) {
          queueReceiver = getQueueSession().createReceiver(getRecvQueue());
          queueReceiver.setMessageListener(this);
        }
        return queueReceiver;
      }  public QueueSender getQueueSender() throws Exception {
        if (queueSender == null) {
          queueSender = getQueueSession().createSender(getSendQueue());
        }
        return queueSender;
      }  public Queue getRecvQueue() throws Exception {
        if (queue == null) {
          Object obj = getContext().lookup(recvQueueName);
          queue = (Queue) obj;
        }
        return queue;
      }  public Queue getSendQueue() throws Exception {
        if (queue == null) {
          System.out.print(sendQueueName);
          Object obj = getContext().lookup(sendQueueName);
          queue = (Queue) obj;
        }
        return queue;
      }  public QueueSession getQueueSession() throws Exception {
        if (queueSession == null) {
          queueSession = getQueueConnection().createQueueSession(isTransacted(),
              getAcknowledgementMode());
        }
        return queueSession;
      }  public QueueConnection getQueueConnection() throws Exception {
        if (queueConnection == null) {
          queueConnection = getQueueConnectionFactory().createQueueConnection();
          queueConnection.start();
        }
        return queueConnection;
      }  public QueueConnectionFactory getQueueConnectionFactory() throws Exception {
        if (queueConnectionFactory == null) {
          Object obj = getContext().lookup(queueConnectionFactoryName);
          queueConnectionFactory = (QueueConnectionFactory) obj;
        }
        return queueConnectionFactory;
      }  private Context getInitialContext() throws Exception {
        try {
           return new javax.naming.InitialContext();
        }
        catch (Exception ex) {
          ex.printStackTrace();
          throw ex;
        }
      }  public void setRecvQueueName(String recvQueueName) {
        this.recvQueueName = recvQueueName;
      }  public String getRecvQueueName() {
        return recvQueueName;
      }  public void setSendQueueName(String sendQueueName) {
        this.sendQueueName = sendQueueName;
      }  public String getSendQueueName() {
        return sendQueueName;
      }  public void setQueueConnectionFactoryName(String queueConnectionFactoryName) {
        this.queueConnectionFactoryName = queueConnectionFactoryName;
      }  public String getQueueConnectionFactoryName() {
        return queueConnectionFactoryName;
      }  public void setAcknowledgementMode(int acknowledgementMode) {
        this.acknowledgementMode = acknowledgementMode;
      }  public int getAcknowledgementMode() {
        return acknowledgementMode;
      }  public boolean isTransacted() {
        return transacted;
      }  private Context getContext() throws Exception {
        if (context == null) {
          try {
            context = getInitialContext();
          }
          catch (Exception ex) {
            ex.printStackTrace();
            throw ex;
          }
        }
        return context;
      }  public void onMessage(Message message) {
        if (message instanceof javax.jms.BytesMessage) {
          javax.jms.BytesMessage bytesMessage = (javax.jms.BytesMessage) message;
          /** @todo Process bytesMessage here */
        }
        else if (message instanceof javax.jms.MapMessage) {
          javax.jms.MapMessage mapMessage = (javax.jms.MapMessage) message;
          /** @todo Process mapMessage here */
        }
        else if (message instanceof javax.jms.ObjectMessage) {
          javax.jms.ObjectMessage objectMessage = (javax.jms.ObjectMessage) message;
          /** @todo Process objectMessage here */
        }
        else if (message instanceof javax.jms.StreamMessage) {
          javax.jms.StreamMessage streamMessage = (javax.jms.StreamMessage) message;
          /** @todo Process streamMessage here */
        }
        else if (message instanceof javax.jms.TextMessage) {
          javax.jms.TextMessage objectMessage = (javax.jms.TextMessage) message;
          /** @todo Process textMessage here */
          try{
            System.out.print(objectMessage.getText());
            DataWriter dw = new DataWriter((String)objectMessage.getText());
            dw.write();
          }catch(Exception e)
          {
            e.printStackTrace();
          }
        }
        if (isTransacted()) {
          try {
            getQueueSession().commit();
          }
          catch (Exception ex) {
            ex.printStackTrace();
          }
        }
      }  public void close() throws Exception {
        if (queueSender != null) {
          queueSender.close();
        }
        if (queueReceiver != null) {
          queueReceiver.close();
        }
        if (queueSession != null) {
          queueSession.close();
        }
        if (queueConnection != null) {
          queueConnection.close();
        }
      }
    }
    但我觉得这个initialContext是用我的environment生成的,而我的environment里面就没有放有关Queue的东西,如下:
        ht = new Hashtable();//这个ht就是传入的environment
        ht.put(Context.INITIAL_CONTEXT_FACTORY,
               "org.jnp.interfaces.NamingContextFactory");
        ht.put(Context.PROVIDER_URL, url);
        ht.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
    是否是这里没弄对,请大家赐教.
       谢谢回答问题的大侠们.现在问题还没解决所以还不能结贴,解决之后我会给分的
      

  7.   

    ht.put(Context.PROVIDER_URL, url);
    这里的url必须是这样hostname:portnumber
    OK??
      

  8.   

    我的url是这样的,也没错啊.
    localhost:1099我的意思是出错是在getSendQueue()的Object obj = getContext().lookup(sendQueueName);
    而我又觉得好像这个sendQueueName的Queue对象没有在这个Context里面,所以找不到才说我的Queue没有Bound,是这样吗?
      

  9.   

    谢谢大家的关心,这个问题已经得到解决了.我到www.jboss.com上找到一个例子才知道我的queue写错了,应该写queue/myQueue作为sendQueueName.
        大家辛苦了,接分!