2014-10-08 4 views
6

Come è possibile verificare se esiste una coda su un server JMS utilizzando l'API Java? Per ora non voglio inviare o ricevere alcun dato alla coda, basta verificare che la coda esista. Inoltre, la coda potrebbe essere vuota.Come verificare che esista una coda JMS utilizzando Java?

Ecco il mio esempio di codice. Ho rimosso la gestione degli errori per semplicità.

Connection connection = null; 
    Session session = null; 
    connection = factory.createConnection(); 
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

    //I was hoping this next line would throw an exception if the queue does not exist 
    Queue queue = session.createQueue(queueName); 

Il mio server JMS è TIBCO EMS. Sto sperando in una soluzione che funzioni sulle versioni 5-7.

Soluzione

ho seguito la raccomandazione nella risposta accettato, ma ha creato un browser. La seguente riga ha generato un'eccezione, se lo desideri:

QueueBrowser browser = session.createBrowser(queue); 
+0

JMS non definisce un'interfaccia o un modello amministrativo; quindi la risposta a questo dipende dal tuo provider JMS. Quale stai usando? – Calanais

risposta

3

provare a creare un consumatore o produttore al largo della sessione passando l'oggetto coda di appena creato:

session.createConsumer(queue); 

Questo dovrebbe lanciare un InvalidDestinationException se la coda (o argomento) non esiste.

4

Questo dipende dal provider, ma nella maggior parte dei casi non si sa fino a quando non si crea il tipo di sessione, ad esempio session.createConsumer. Semplicemente creando un consumatore in questo modo non consumerai alcun messaggio finché non riceverai una ricezione. Ed è qui che il comportamento può cambiare da provider a provider e configurazione del server.

Ad esempio con ActiveMQ, supponendo che non vi siano autorizzazioni che bloccano l'utente con cui ci si connette, la coda viene creata automaticamente quando si crea il tipo di sessione.

Con WebSphere MQ, la coda deve essere definita da un amministratore. Se non esiste, il gestore code restituirà un'eccezione con un codice motivo di 2085 (UNKNOWN_OBJECT_NAME).

Al di fuori di questo, è necessario verificare se il provider specifico ha un modo per accedere a un elenco di code. Utilizzando gli esempi precedenti, ActiveMQ è possibile ottenere l'elenco di code utilizzando JMX, con WebSphere MQ, è possibile farlo se si dispone delle autorizzazioni per inviare comandi PCF al gestore code.