2013-09-16 4 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

Можете уточнить, где вы получаете эту ошибку. В программе отправителя или в приемнике? Обычно это происходит, когда сам отправитель терпит неудачу и завершается, но ваш приемник все еще ждет получения соединений. В таких случаях вышеуказанная ошибка появляется на выходе консоли получателя, в то время как основное исключение отображается в консоли отправителя.

Главным исключением в этом случае может быть исключение безопасности, вызванное тем случаем, когда пользователь не существует (скажем, в ApplicationRealm), или пользователь может не иметь правильных ролей.

Смежные вопросы