Esempio Di JMS Sender e Receiver

di il
5 risposte

Esempio Di JMS Sender e Receiver

Ciao a tutti,

sto cercando di creare un esempio JMS, ho creato due file su Netbeans
il primo fa da Sender il secondo da receiver:

package sender;

import javax.naming.InitialContext;
                                                                           
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.jms.DeliveryMode;
import javax.jms.QueueSession;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
                                                                           
public class Sender
{
    public static void main(String[] args) throws Exception
    {
       // get the initial context
       InitialContext ctx = new InitialContext();
                                                                          
       // lookup the queue object
       Queue queue = (Queue) ctx.lookup("queue/queue0");
                                                                          
       // lookup the queue connection factory
       QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
           lookup("queue/connectionFactory");
                                                                          
       // create a queue connection
       QueueConnection queueConn = connFactory.createQueueConnection();
                                                                          
       // create a queue session
       QueueSession queueSession = queueConn.createQueueSession(false,
           Session.DUPS_OK_ACKNOWLEDGE);
                                                                          
       // create a queue sender
       QueueSender queueSender = queueSession.createSender(queue);
       queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                                                                          
       // create a simple message to say "Hello"
       TextMessage message = queueSession.createTextMessage("Hello");
                                                                          
       // send the message
       queueSender.send(message);
                                                                          
       // print what we did
       System.out.println("sent: " + message.getText());
                                                                          
       // close the queue connection
       queueConn.close();
    }
}
Receiver

package synchronousreceiver;


import javax.naming.InitialContext;                                                                           
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSession;
import javax.jms.QueueReceiver;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
                                                                           
public class SynchronousReceiver {
    public static void main(String[] args) throws Exception
    {
       // get the initial context
       InitialContext ctx = new InitialContext();
                                                                          
       // lookup the queue object
       Queue queue = (Queue) ctx.lookup("queue/queue0");
                                                                          
       // lookup the queue connection factory
       QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
           lookup("queue/connectionFactory");
                                                                          
       // create a queue connection
       QueueConnection queueConn = connFactory.createQueueConnection();
                                                                          
       // create a queue session
       QueueSession queueSession = queueConn.createQueueSession(false,
           Session.AUTO_ACKNOWLEDGE);
                                                                          
       // create a queue receiver
       QueueReceiver queueReceiver = queueSession.createReceiver(queue);
                                                                          
       // start the connection
       queueConn.start();
                                                                          
       // receive a message
       TextMessage message = (TextMessage) queueReceiver.receive();
                                                                          
       // print the message
       System.out.println("received: " + message.getText());
                                                                          
       // close the queue connection
       queueConn.close();
    }
}

Lancio il receiver che dovrebbe stare in attesa, delle code inviate dal Sender e dopo lancio il sender, mi vengono lanciate due eccezioni una per file:

Sender:
run:
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at sender.Sender.main(Sender.java:23)
Receiver
run:
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at synchronousreceiver.SynchronousReceiver.main(SynchronousReceiver.java:21)
Ho creato una Java application e non ho un file xml, dove indicare il lookup; il problema dovrebbe essere questo, ma non so risolverlo

5 Risposte

  • Re: Esempio Di JMS Sender e Receiver

    Intanto, giusto per sapere, quale è il provider JMS utilizzato? (in pratica quale è il "broker" che hai scelto)
  • Re: Esempio Di JMS Sender e Receiver

    Non ho utilizzato nessun provider, ho solo fatto due file java application su netbeans uno è il Sender e l'altro è il Receiver.

    Ho fatto un' altra prova, ho creato due file java web application,e li ho lanciati, questa volta non stampa nessun errore, ma in output non ho il messaggio, è strano, perchè io non essendo capace continuo a non utilizzare il file xml dove gli scrivo il lookup
  • Re: Esempio Di JMS Sender e Receiver

    manuel__89 ha scritto:


    Non ho utilizzato nessun provider, ho solo fatto due file java application su netbeans uno è il Sender e l'altro è il Receiver.
    Guarda che in JMS una applicazione java che "invia" e una che "riceve" NON parlano MAI direttamente tra di loro! Ci deve essere una terza applicazione, appunto un JMS provider (il "broker") che implementa le specifiche JMS e mette in comunicazione le applicazioni Java garantendo le policy di persistenza o no dei messaggi e garantendo i meccanismi di handshake tali per cui se il broker dice "ho ricevuto il messaggio", perlomeno si ha la ragionevole certezza che il messaggio è in carico al broker.

    Ci sono svariati JMS provider, sia open-source sia commerciali (anche molto $$$). Scegline uno ....

    E tra l'altro vuol dire che al momento non hai assolutamente compreso cosa è JMS.
  • Re: Esempio Di JMS Sender e Receiver

    Grazie per il suggerimento, ho utilizzato Tibco EMS
  • Re: Esempio Di JMS Sender e Receiver

    manuel__89 ha scritto:


    Grazie per il suggerimento, ho utilizzato Tibco EMS
    Scusa ma visto che stai "imparando" JMS, non ti bastava usare uno dei provider open-source come OpenJMS o Apache ActiveMQ di cui trovi tra l'altro sicuramente tanta documentazione, articoli, tutorial (e anche libri, per ActiveMQ ce n'è uno della Manning "ActiveMQ in Action") ???
Devi accedere o registrarti per scrivere nel forum
5 risposte