Điều gì có thể là nguyên nhân của ClassCastException
sau trong ứng dụng khách JMS độc lập khi nó cố gắng truy xuất nhà máy kết nối từ nhà cung cấp JNDI?Tại sao nên chọn ClassCastException trên JMS ConnectionFactory trong JNDI?
Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.jms.ConnectionFactory
Dưới đây là một phiên bản rút gọn của khách hàng JMS bao gồm duy nhất của nó start()
và stop()
phương pháp. Ngoại lệ xảy ra trên dòng đầu tiên trong phương thức start()
cố gắng truy xuất nhà máy kết nối từ nhà cung cấp JNDI, một máy chủ LDAP từ xa. Nhà máy kết nối JMS và các đối tượng đích nằm trên một máy chủ JMS từ xa.
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);
}
}
Mặc dù tôi không muốn tiết lộ nội dung cụ thể của context.properties
, nó có chứa các mục chung sau đây:
java.naming.factory.initial=...
java.naming.provider.url=...
java.naming.security.principal=...
java.naming.security.credentials=...
http://forums.sun.com/thread.jspa?threadID=619429 xem liệu điều này có thể giúp – Bozho
Điều này phụ thuộc hoàn toàn vào máy chủ JavaEE bạn đang sử dụng hay không. Ngoài ra, bạn đang sử dụng giá trị nào cho 'connectionFactoryName'? – skaffman
Đây là một máy khách Java độc lập sử dụng thư viện máy khách Geronimo JMS 'geronimo-jms-1.1-spec.jar' và một thư viện JMS bổ sung tùy chỉnh và một thư viện liên quan đến JNDI. –