2010-05-12 17 views
5

JNDI sağlayıcısından bağlantı fabrikası almaya çalışırken, tek başına bir JMS istemci uygulamasında aşağıdaki ClassCastException'un nedenleri neler olabilir? İşte JNDI'da JMS ConnectionFactory aramasında ClassCastException neden?

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

sadece start() ve stop() yöntemlerini içeren JMS istemci kısaltılmış versiyonudur. İstisna, bağlantı fabrikasını JNDI sağlayıcısından, uzaktaki bir LDAP sunucusundan almaya çalışan start() yöntemindeki ilk satırda gerçekleşir. JMS bağlantı fabrikası ve hedef nesneler uzak bir JMS sunucusundadır.

java.naming.factory.initial=... 
java.naming.provider.url=... 
java.naming.security.principal=... 
java.naming.security.credentials=... 
+1

http://forums.sun.com/thread.jspa?threadID=619429 bu Bu kullanmakta olduğunuz JavaEE sunucu tamamen bağlıdır – Bozho

+0

yardımcı olabilir görmek. Ayrıca, 'connectionFactoryName' için hangi değeri kullanıyorsunuz? – skaffman

+0

Bu Geronimo JMS istemci kütüphanesi 'geronimo-jms-1.1-spec.jar' ve özel bir ek JMS kütüphanesi ve JNDI ilgili kütüphane kullanan bağımsız bir Java istemcisidir. –

cevap

9

devamsızlık olmak, sorun bir TIBCO JMS JARDOSYASI nedeniyle olduğunu tibjms.jar çıkıyor:

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); 
    } 
} 

Ben context.properties spesifik içeriklerini ifşa etmemeyi tercih olsa da, aşağıdaki genel girdileri içerir JVM sınıf yolundan. Bu jarfile, Tibco JMS protokolünü uygular ve eksik olduğu için JMS istemcisi, LDMS JNDI hizmet sağlayıcısından JMS bağlantı fabrikasını alamadı.

+0

Sun'ın imq-1.0.jar sınıf yolunda olmadığı zaman aynı hatayı aldım. – Pino

+0

Bu cevap için teşekkürler - benim için çok zaman kazanacaksınız! – Torsten

İlgili konular