2017-05-30 2 views
0

J'ai un serveur GlassFish en cours d'exécution (version 4.1). Maintenant, je suis intéressé par la création d'un simple service de messagerie utilisant jms et un client de messagerie autonome. (ceci devrait fonctionner sur une machine distante dans une JVM séparée.) Malheureusement, je reçois toujours une exception NameNotFoundException lorsque j'essaie d'initialiser ma QueueConnectionFactory.NameNotFoundException lors de la recherche QueueConnectionFactory

Ceci est mon code:

import java.util.Properties; 
import javax.naming.InitialContext; 
import javax.jms.*; 
import javax.naming.Context; 

public class TestJMSQueue { 

    public static void main(String[] args) throws Exception{ 
    String msg = "Hello from remote JMS Client"; 

    test.sendMessage2Queue(msg); 

    System.exit(0); 
    } 

    private void sendMessage2Queue(String msg) throws Exception { 

    props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
    props.put(Context.PROVIDER_URL, "mq://localhost:7676"); 
    props.put("connectionFactoryNames" , "TestQueueConnectionFactory"); 
    props.put("queue." + "TestQueue", "TestQueue"); 

    InitialContext ctx = new InitialContext(props); 
    System.out.println("Context created"); 

    ConnectionFactory qFactory = (ConnectionFactory) ctx.lookup("TestQueueConnectionFactory"); 

    Connection connection = qFactory.createConnection(); 

    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

    TextMessage message = session.createTextMessage(); 
    message.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT); 
    message.setText(msg); 

    Queue queue = (Queue) ctx.lookup("TestQueue"); 

    MessageProducer mp = session.createProducer(queue); 

    mp.send(message); 
    System.out.println("Message sent: " + msg); 

    mp.close(); 
    session.close(); 
    ctx.close(); 
    } 
} 

L'usine et la file d'attente existe sur le serveur. Je suis this tutorial et j'ai déjà créé l'écouteur pour le serveur. J'ai passé les dernières heures à examiner diverses ressources, essayant de résoudre le problème, mais je n'ai pas trouvé de solution.

Pouvez-vous me dire où je me suis trompé?

Merci beaucoup.

Voici quelques-unes des ressources que je cherchais à:

EDIT:

J'ai également essayé avec un fichier jndi.properties à la place du props.put (...) et le InitialContext (props). Et avec l'ajout de ce qui suit avant l'instanciation InitialContext:

properties.put("org.omg.CORBA.ORBInitialHost", "<IP>"); 
properties.put("org.omg.CORBA.ORBInitialPort", "3700"); 
//as found [here...][2] 
//But as I understand it the solution with 3700 is not for JMS so I also tried it with 7676 

Ne fonctionne pas non plus.

L'erreur:

Exception in thread "main" javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [mq] 
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:33) 
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:232) 
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:245) 
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:214) 
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:161) 
    at testjmsqueue.TestJMSQueue.sendMessage2Queue(TestJMSQueue.java:60) 
    at testjmsqueue.TestJMSQueue.main(TestJMSQueue.java:30) 
Caused by: java.io.IOException: Transport scheme NOT recognized: [mq] 
    at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:25) 
    at org.apache.activemq.transport.TransportFactory.findTransportFactory(TransportFactory.java:171) 
    at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:76) 
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:230) 
    ... 5 more 
Caused by: java.io.IOException: Could not find factory class for resource: META-INF/services/org/apache/activemq/transport/mq 
    at org.apache.activemq.util.FactoryFinder.doFindFactoryProperies(FactoryFinder.java:90) 
    at org.apache.activemq.util.FactoryFinder.newInstance(FactoryFinder.java:58) 
    at org.apache.activemq.util.FactoryFinder.newInstance(FactoryFinder.java:47) 
    at org.apache.activemq.transport.TransportFactory.findTransportFactory(TransportFactory.java:167) 
    ... 7 more 

Répondre

1

essayer

props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
    props.put(Context.PROVIDER_URL, "mq://localhost:7676"); 
    props.put("connectionFactoryNames" , "TestQueueConnectionFactory"); 
    props.put("queue." + "TestQueue", "TestQueue"); 
    InitialContext ic = new InitialContext(props); 
    ConnectionFactory qFactory = (ConnectionFactory) ic.lookup("TestQueueConnectionFactory"); 
    Queue queue = (Queue) ic.lookup("TestQueue"); 
+0

une autre erreur est survenue: 'Exception dans le thread "principal" javax.jms.JMSException: Impossible de créer des transports. Raison: java.io.IOException: Schéma de transport NON reconnu: [mq] ' –

+0

Il s'est produit à' Connection connection = qFactory.createConnection(); ' –

+1

J'ai mis à jour ma réponse, ouais, quel est ce mq transport ?? –