Domanda

Non riesco a ottenere javax.jms.ConnectionFactory iniettato nel mio client JMS autonomo. Ricevo un java.lang.NullPointerException in connectionFactory.createConnection() nel codice seguente.

<”JmsClient.java

public class JmsClient {

    @Resource(mappedName="jms/QueueConnectionFactory")
    private static ConnectionFactory connectionFactory;    

    @Resource(mappedName="jms/ShippingRequestQueue")
    private static Destination destination;

    public static void main(String[] args) {        
        try {
            Connection connection = connectionFactory.createConnection();
            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer producer = session.createProducer(destination);
            ObjectMessage message = session.createObjectMessage();

            ShippingRequestQueue shippingRequest = new ShippingRequestQueue(1, "107, Old Street");

            message.setObject(shippingRequest);
            producer.send(message);
            session.close();
            connection.close();

            System.out.println("Shipping request message sent ..");
        } catch (Throwable ex) {
            ex.printStackTrace();
        }        
    }

}

Ho creato la Connection Factory e la risorsa di destinazione corrispondenti in Open MQ (MoM) utilizzando la console di amministrazione di Glassfish 3.1.

Qualcuno potrebbe aiutarmi a capire cosa mi sto perdendo?

È stato utile?

Soluzione

L'inserimento di risorse funziona solo in un ambiente gestito, come un server di applicazioni Java EE o un contenitore Spring, ad esempio. In un'applicazione standalone JNDI è la tua unica scelta .

Le annotazioni in generale sono pensate per essere elaborate da qualche strumento / framework e la semplice JVM che esegue il metodo main() semplicemente non le contiene. Le uniche annotazioni che conosco che vengono elaborate da JVM fuori dagli schemi sono @Deprecated in fase di compilazione, @Override e @SuppressWarnings.

Risposta al tuo commento: non ho accesso al libro, quindi immagino solo che probabilmente descrivono l'esecuzione di un componente client dell'applicazione e non client di applicazioni autonomo . Non è la stessa cosa: controlla le domande frequenti su Glassfish EJB . Gli ACC vengono normalmente distribuiti in un server delle applicazioni e possono essere eseguiti tramite Java Web Start o senza di esso, ma in un modo specifico per AS. Vedi Esempio di Glassfish ( non hai detto cosa AS esegue il tuo EJB).

Altri suggerimenti

@skip: prova @Resource(name="jms/QueueConnectionFactory") instead of @Resource(mappedName="jms/QueueConnectionFactory")

name= nome JNDI come da javax.annotation.Resource java doc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top