Quale potrebbe essere la causa del seguente ClassCastException
in un'applicazione client JMS autonoma quando tenta di recuperare un factory di connessione dal provider JNDI?Perché ClassCastException su JMS ConnectionFactory cerca in JNDI?
Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.jms.ConnectionFactory
Ecco una versione abbreviata del client JMS che include solo i start()
e stop()
metodi. L'eccezione si verifica sulla prima riga nel metodo start()
che tenta di recuperare il factory di connessione dal provider JNDI, un server LDAP remoto. La factory di connessione JMS e gli oggetti di destinazione si trovano su un server JMS remoto.
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);
}
}
Anche se io preferisco non rivelare i contenuti specifici del context.properties
, contiene le seguenti voci generali:
java.naming.factory.initial=...
java.naming.provider.url=...
java.naming.security.principal=...
java.naming.security.credentials=...
http://forums.sun.com/thread.jspa?threadID=619429 vedere se questo può essere d'aiuto – Bozho
Questo dipende interamente dal server JavaEE che si sta utilizzando. Inoltre, quale valore stai usando per 'connectionFactoryName'? – skaffman
Questo è un client Java standalone che utilizza la libreria client Geronimo JMS 'geronimo-jms-1.1-spec.jar' e una libreria JMS supplementare personalizzata e una libreria correlata JNDI. –