2013-07-24 7 views
8

पर नहीं डाला जा सकता है मैंने संदेश प्रकाशित करने के लिए वेबस्पेयर एमक्यू से कनेक्ट करने के लिए जावा प्रोग्राम लिखा था। मैंने वेबस्पेयर एमक्यू एक्सप्लोर में एक जेएनडीआई नेमस्पेस, कनेक्शन फैक्ट्री, गंतव्यों और कतार प्रबंधक बनाया। जब मैं अपना प्रोग्राम चला रहा हूं तो यह ClassCastExceptionstring से ConnectionFactory से टाइप कास्टिंग के लिए दिखा रहा है।क्लासकास्ट अपवाद: javax.naming.Reference को javax.jms.ConnectionFactory

मेरा कोड यहां है। क्या कोई इस समस्या को हल करने में मदद कर सकता है।

JNDIUtil.java

package com.tradefinance.jms.util; 

//JMS classes 
import javax.jms.JMSException; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 

//JNDI classes 
import javax.naming.InitialContext; 
import javax.naming.Context; 
import javax.naming.NamingException; 

//Standard Java classes 
import java.util.Hashtable; 
import java.util.Properties; 

/** 
* 
* A wrapper class for JNDI calls 
* 
*/ 
public class JNDIUtil 
{ 
    private Context context; 

    public JNDIUtil(String icf, String url) throws JMSException, NamingException 
    { 
     Hashtable environment = new Hashtable(); 

     environment.put(Context.INITIAL_CONTEXT_FACTORY, icf); 
     environment.put(Context.PROVIDER_URL, url); 

    context= new InitialContext(environment); 

    } 

    /** 
    * @param ObjName Object Name to be retrieved 
    * @return Retrieved Object 
    * @throws NamingException 
    */ 
    private Object getObjectByName(String ObjName) throws NamingException 
    { 

     return context.lookup(ObjName); 
    } 

    /** 
    * @param factoryName Factory Name 
    * @return ConnectionFactory object 
    * @throws NamingException 
    */ 
    public ConnectionFactory getConnectionFactory(String factoryName) throws NamingException 
    { 
     return (ConnectionFactory) getObjectByName(factoryName); 
    } 

    /** 
    * @param destinationName Destination Name 
    * @return ConnectionFactory object 
    * @throws NamingException 
    */ 
    public Destination getDestination(String destinationName) throws NamingException 
    { 
     return (Destination) getObjectByName(destinationName); 

    } 
} 

NewPublisher.java

package com.tradefinance.jms.topics; 

//JMS classes 
import javax.jms.JMSException; 
import javax.jms.ConnectionFactory; 
import javax.jms.Connection; 
import javax.jms.Session; 
import javax.jms.Destination; 
import javax.jms.MessageProducer; 
import javax.jms.TextMessage; 

//JNDI classes 
import javax.naming.NamingException; 

import com.tradefinance.jms.util.JNDIUtil; 

/** 
* A class to demonstrate how to a publish to a topic. 
*/ 
public class NewsPublisher 
{ 

    public static String icf = "com.sun.jndi.fscontext.RefFSContextFactory"; 
    public static String url = "file:/C:/JNDI-Directory/"; 

    public static void main(String[] vars) throws JMSException, NamingException 
    { 

     ConnectionFactory factory = null; 
     Connection connection = null; 
     Session session = null; 
     Destination destination= null; // a destination can be a topic or a queue 
     MessageProducer producer= null; 


     try 
     { 

      JNDIUtil jndiUtil= new JNDIUtil(icf,url); 

      factory= jndiUtil.getConnectionFactory("TestQM1ConnectionFactory"); 

      connection = factory.createConnection();    
      connection.start(); 

      // Indicate a non-transactional session 
      boolean transacted = false; 
      session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);   

      destination = jndiUtil.getDestination("NewsTopic"); 

      producer = session.createProducer(destination); 

      TextMessage message = session.createTextMessage("No News is Good News!"); 
      producer.send(message); 

      System.out.println("NewsPublisher: Message Publication Completed"); 

     } 
     finally 
     { 
      // Always release resources 

      if (producer!= null) 
       producer.close(); 

      if (session!= null) 
       session.close(); 

      if (connection!= null) 
       connection.close(); 

     }  
    }   
} 

इन पंक्तियों पर त्रुटि हो रही है:

return (ConnectionFactory) getObjectByName(factoryName); 
in JNDIUtil.java 

factory= jndiUtil.getConnectionFactory("TestQM1ConnectionFactory"); 
in NewPublisher.java 

उत्तर

1

क्या आप JNDI संदर्भ से वापस प्राप्त एक संदर्भ था। यह कनेक्शन फैक्ट्री बनाने के लिए एक नुस्खा है और मुझे संदेह है कि इसके लिए ज़िम्मेदार वर्ग नहीं पाया जा सकता क्योंकि एमक्यू जार आवश्यक क्लासपाथ में नहीं हैं। त्रुटि संदेश अंतर्ज्ञानी नहीं है।

विफल होने पर, मुझे जेन्डी लुकअप के मुद्दों को डीबग करने का एक अच्छा तरीका मिल गया है, संदर्भ प्राप्त करने और उस पर एक सूची निष्पादित करने के लिए एक सूची() को निष्पादित करना है, प्रत्येक ऑब्जेक्ट के विवरण को प्रिंट करना, बस इतना है कि आप वास्तव में क्या रहते हैं निर्देशिका में

0

classpath को नीचे जार जोड़ें:

sibc.jms 
sibc.jndi 
2

आप कुछ जार MQ ग्राहक की याद कर रहे हैं इस काम के प्राप्त करने के लिए। मैं एक ही त्रुटि थी, और कुछ आगे की जांच पड़ताल के बाद, मैं इस काम के प्राप्त करने के जार की इस सूची के साथ समाप्त हो गया:

  • com.ibm.mq.jmqi.jar
  • कॉम .ibm.mqjms.jar
  • dhbcore.jar
  • fscontext.jar
  • providerutil.jar
  • com.ibm.mq.headers.jar
संबंधित मुद्दे