2013-09-16 88 views
2

我是JMS的新手。當我運行獨立JMS測試程序,獲得異常JMS使用jboss

,我發現了異常下面低於:

**Channel end notification received, closing channel Channel ID 4995329b (inbound) of Remoting connection 0aff5851 to null** 

我下面附上我的代碼,供大家參考:

QueueReceiver.java

package com.tradier.webservices.util; 

    import java.util.Hashtable; 

    import javax.jms.*; 

    import javax.naming.Context; 
    import javax.naming.InitialContext; 
    import javax.naming.NamingException; 
    public class QueueReceive { 
    private final static String JNDI_FACTORY = 
    "org.jboss.naming.remote.client.InitialContextFactory";//org.jboss.naming.remote.client.InitialContextFactory 
    private final static String JMS_FACTORY = "java:jboss/exported/jms/RemoteConnectionFactory"; 
    private final static String QUEUE = "queue/test"; 
    private final static String jbossUrl = "remote://localhost:4447"; 

    private static InitialContext getInitialContext() throws NamingException { 
    Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); 
    env.put(Context.PROVIDER_URL, jbossUrl); 
    env.put(Context.SECURITY_PRINCIPAL, "jms"); 
    env.put(Context.SECURITY_CREDENTIALS, "jboss1"); 
    return new InitialContext(env); 
    } 

    public static void main(String[] args) throws Exception { 
    InitialContext ic = getInitialContext(); 
    QueueConnectionFactory qconFactory = (QueueConnectionFactory)ic.lookup(JMS_FACTORY); 
    QueueConnection qcon = qconFactory.createQueueConnection("jms","jboss1"); 
    QueueSession qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 
    Queue queue = (Queue)ic.lookup(QUEUE); 
    QueueReceiver qreceiver = qsession.createReceiver(queue); 

    qcon.start(); 

    TextMessage msg = (TextMessage)qreceiver.receive(); 
    System.out.println("MYTEXT"+msg.getText()); 

    qreceiver.close(); 
    qsession.close(); 
    qcon.close(); 
    } 
    } 

QueueSender.java

package com.tradier.webservices.util; 

    import java.util.Hashtable; 
    import javax.jms.Queue; 
    import javax.jms.QueueConnection; 
    import javax.jms.QueueConnectionFactory; 
    import javax.jms.QueueSender; 
    import javax.jms.QueueSession; 
    import javax.jms.Session; 
    import javax.jms.TextMessage; 

    import javax.naming.Context; 
    import javax.naming.InitialContext; 
    import javax.naming.NamingException; 

    public class QueueSend { 
    private final static String JNDI_FACTORY = 
    "org.jboss.naming.remote.client.InitialContextFactory"; 
    private final static String JMS_FACTORY = "jms/RemoteConnectionFactory"; 
    private final static String QUEUE = "jms/queue/test"; 
    private final static String jbossUrl = "remote://localhost:4447"; 

    private static InitialContext getInitialContext() throws NamingException { 
    Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); 
    env.put(Context.PROVIDER_URL, jbossUrl); 
    env.put(Context.SECURITY_PRINCIPAL, "qtest"); 
    env.put(Context.SECURITY_CREDENTIALS, "mytest"); 
    return new InitialContext(env); 
    } 

    public static void main(String[] args) throws Exception { 
    InitialContext ic = getInitialContext(); 
    try{ 
    QueueConnectionFactory qconFactory = 
    (QueueConnectionFactory)ic.lookup(JMS_FACTORY); 

    QueueConnection qcon = 
    qconFactory.createQueueConnection("qtest","mytest"); 
    QueueSession qsession = qcon.createQueueSession(false, 
    Session.AUTO_ACKNOWLEDGE); 
    Queue queue = (Queue)ic.lookup(QUEUE); 
    QueueSender qsender = qsession.createSender(queue); 

    qcon.start(); 

    TextMessage msg = qsession.createTextMessage();; 
    msg.setText("HelloWorld"); 
    qsender.send(msg); 

    qsender.close(); 
    qsession.close(); 
    qcon.close(); 
    } 
    catch(Exception e){ 
     System.out.println(e); 
    } 
    } 
    } 

JBoss的standalone.xml文件

<subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
       <hornetq-server> 
        <persistence-enabled>true</persistence-enabled> 
        <security-enabled>false</security-enabled> 
        <journal-file-size>102400</journal-file-size> 
        <journal-min-files>2</journal-min-files> 

        <connectors> 
         <netty-connector name="netty" socket-binding="messaging"/> 
         <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> 
          <param key="batch-delay" value="50"/> 
         </netty-connector> 
         <in-vm-connector name="in-vm" server-id="0"/> 
        </connectors> 

        <acceptors> 
         <netty-acceptor name="netty" socket-binding="messaging"/> 
         <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> 
          <param key="batch-delay" value="50"/> 
          <param key="direct-deliver" value="false"/> 
         </netty-acceptor> 
         <in-vm-acceptor name="in-vm" server-id="0"/> 
        </acceptors> 

        <broadcast-groups> 
         <broadcast-group name="bg-group1"> 
          <group-address>231.7.7.7</group-address> 
          <group-port>9876</group-port> 
          <broadcast-period>5000</broadcast-period> 
          <connector-ref> 
           netty 
          </connector-ref> 
         </broadcast-group> 
        </broadcast-groups> 

        <discovery-groups> 
         <discovery-group name="dg-group1"> 
          <group-address>231.7.7.7</group-address> 
          <group-port>9876</group-port> 
          <refresh-timeout>10000</refresh-timeout> 
         </discovery-group> 
        </discovery-groups> 

        <cluster-connections> 
         <cluster-connection name="my-cluster"> 
          <address>jms</address> 
          <connector-ref>netty</connector-ref> 
          <discovery-group-ref discovery-group-name="dg-group1"/> 
         </cluster-connection> 
        </cluster-connections> 

        <security-settings> 
         <security-setting match="#"> 
          <permission type="send" roles="guest"/> 
          <permission type="consume" roles="guest"/> 
          <permission type="createNonDurableQueue" roles="guest"/> 
          <permission type="deleteNonDurableQueue" roles="guest"/> 
         </security-setting> 
        </security-settings> 

        <address-settings> 
         <address-setting match="#"> 
          <dead-letter-address>jms.queue.DLQ</dead-letter-address> 
          <expiry-address>jms.queue.ExpiryQueue</expiry-address> 
          <redelivery-delay>0</redelivery-delay> 
          <max-size-bytes>10485760</max-size-bytes> 
          <address-full-policy>BLOCK</address-full-policy> 
          <message-counter-history-day-limit>10</message-counter-history-day-limit> 
          <redistribution-delay>1000</redistribution-delay> 
         </address-setting> 
        </address-settings> 

        <jms-connection-factories> 
         <connection-factory name="InVmConnectionFactory"> 
          <connectors> 
           <connector-ref connector-name="in-vm"/> 
          </connectors> 
          <entries> 
           <entry name="java:/ConnectionFactory"/> 
          </entries> 
         </connection-factory> 
         <connection-factory name="RemoteConnectionFactory"> 
          <connectors> 
           <connector-ref connector-name="netty"/> 
          </connectors> 
          <entries> 
           <entry name="RemoteConnectionFactory"/> 
           <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> 
          </entries> 
         </connection-factory> 
         <pooled-connection-factory name="hornetq-ra"> 
          <transaction mode="xa"/> 
          <connectors> 
           <connector-ref connector-name="in-vm"/> 
          </connectors> 
          <entries> 
           <entry name="java:/JmsXA"/> 
          </entries> 
         </pooled-connection-factory> 
        </jms-connection-factories> 

        <jms-destinations> 
         <jms-queue name="testQueue"> 
          <entry name="queue/test"/> 
          <entry name="java:jboss/exported/jms/queue/test"/> 
         </jms-queue> 
        </jms-destinations> 
       </hornetq-server> 
      </subsystem> 

幫助我解決這個問題。 在此先感謝。

回答

0

你能澄清你在哪裏得到這個錯誤。 在發件人程序或收件人? 當您的發件人本身發生故障並終止時,通常會發生這種情況,但您的Receiver仍在等待接收連接。在這種情況下,上述錯誤出現在Receiver的控制檯輸出中,而主例外顯示在發件人的控制檯中。

在這種情況下,主例外可能是由於用戶不存在(例如ApplicationRealm中)而導致的安全異常,或者用戶可能沒有正確的角色。