Pourquoi ClassCastException sur JMS ConnectionFactory de recherche dans JNDI?

Ce qui pourrait être la cause de l'suivantes ClassCastException dans un standalone client JMS application lorsqu'il tente de récupérer une usine de raccordement à partir de la JNDI fournisseur?

Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.jms.ConnectionFactory

Ici est une version abrégée de la JMS client qui ne comprend que son start() et stop() méthodes. L'exception se produit sur la première ligne de la méthode start() qui tente de récupérer l'usine de raccordement à partir de la JNDI fournisseur, un serveur LDAP distant. La fabrique de connexions JMS et objets de destination sont sur une distance de serveur JMS.

class JmsClient {
    private ConnectionFactory connectionFactory;
    private Connection connection;
    private Session session;
    private MessageConsumer consumer;
    private Topic topic;

    public void stop() throws JMSException {
        consumer.close();
        session.close();
        connection.close();
    }

    public void start(Context context, String connectionFactoryName, String topicName) throws NamingException, JMSException {
        //ClassCastException occurs when retrieving connection factory.
        connectionFactory = (ConnectionFactory) context.lookup(connectionFactoryName);
        connection = connectionFactory.createConnection("username","password");
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        topic = (Topic) context.lookup(topicName);
        consumer = session.createConsumer(topic);
        connection.start();
    }

    private static Context getInitialContext() throws NamingException, IOException {
        String filename = "context.properties";
        Properties props = new Properties();
        props.load(new FileInputStream(filename));
        return new InitialContext(props);
    }
}

Mais je préfère ne pas divulguer le contenu spécifique de context.properties, il contient les entrées:

java.naming.factory.initial=...
java.naming.provider.url=...
java.naming.security.principal=...
java.naming.security.credentials=...
forums.sun.com/thread.jspa?threadID=619429 voir, si cela peut aider
Cela dépend entièrement de ce qui JavaEE serveur que vous utilisez. Aussi, quelle est la valeur que vous utilisez pour connectionFactoryName?
C'est un standalone client Java qui utilise Geronimo client JMS bibliothèque geronimo-jms-1.1-spec.jar et personnalisé supplémentaire JMS bibliothèque et un JNDI liés à la bibliothèque.
contextFactoryName suit une syntaxe personnalisés qui correspond à une entrée dans un serveur LDAP.
Merci pour la référence. Ce problème ne semble pas être un général de la recherche JNDI problème et n'est pas JMS spécifiques.

OriginalL'auteur Derek Mahar | 2010-05-12