2012-04-28 14 views
-1

私はキューを初めて使用しています。私はJBOSS 5.1 EAPでキューをセットアップしていましたが、キューに注入しようとしている間にClassCastException(JNDIのルックアップで)を取得しています。フロントエンドでフレックスを使用し、フレックスにSpringフレームワークを使用します。 quartzジョブを使用してキューに注入すると、うまく動作します。石英の仕事は別のプロジェクトで、フレックスやスプリングとは関係ありません。JMSのClassCastException JNDIのConnectionFactoryルックアップ

これは瓶の問題かもしれないところで私は春にJMS瓶を持っていましたが、私はすべてのタイプの瓶、

 // Step 1. Create an initial context to perform the JNDI lookup. 

     InputStream in = this.getClass().getResourceAsStream(
       "/clv2.properties"); 
     Properties configProp = new Properties(); 
     configProp.load(in); 
     IpAddress = configProp.getProperty("ipaddress"); 
     port = configProp.getProperty("port"); 
     inQueueName = configProp.getProperty("inQueueName"); 
     Properties props = new Properties(); 
     props.setProperty("java.naming.factory.initial", 
       "org.jnp.interfaces.NamingContextFactory"); 
     props.setProperty("java.naming.factory.url.pkgs", 
       "org.jboss.naming"); 
     // props.setProperty("java.naming.provider.url", host + ":" + port); 
     props.setProperty("java.naming.provider.url", "localhost" + ":" 
       + 1099); 
     // props.setProperty("java.naming.provider.url", 
     // "16.181.233.61:1399"); 
     initialContext = new InitialContext(props); 

     // Step 3. Perform a lookup on the Connection Factory 
     QueueConnectionFactory cf = (QueueConnectionFactory) initialContext 
       .lookup("/ConnectionFactory"); 
     Queue queue = (Queue) initialContext 
       .lookup(/* "/queue/CLVInboundQueue" */inQueueName); 
     // Step 4.Create a JMS Connection 
     connection = (QueueConnection) cf.createConnection(); 

     // Step 5. Create a JMS Session 
     session = (QueueSession) connection.createSession(false, 
       Session.AUTO_ACKNOWLEDGE); 

     // Step 6. Create a JMS Message Producer 
     // MessageProducer producer = session.createProducer(queue); 
     QueueSender queueSender = session.createSender(queue); 
     TextMessage textMessage = session.createTextMessage(message); 
     textMessage.setLongProperty("Rejected_Message_ID", 
       rejected_Message_Id); 
     /* 
     * BufferedReader reader = new BufferedReader(new 
     * InputStreamReader(ClassLoader.class.getResourceAsStream(file))); 
     * StringBuilder sb = new StringBuilder(); String line = null; 
     * 
     * 
     * while ((line = reader.readLine()) != null) { sb.append(line + 
     * "\n"); } String announcementmsg = sb.toString(); 
     */ 
     commonlogger.info(textMessage); 
     connection.start(); 
     // producer.send(session.createTextMessage(announcementmsg)); 
     queueSender.send(textMessage); 

これは、キューに挿入するコードです。私は "//手順3.接続ファクトリでルックアップを実行する"で例外を取得します。これは私のスタックトレースです。

09:22:20,730 ERROR [STDERR] java.lang.ClassCastException: org.jboss.jms.client.JBossConnectionFactory cannot be cast to javax.jms.QueueConnectionFactory 
09:22:20,731 ERROR [STDERR]  at com.cat.clv.util.InQueueReinjectMessage.sendMessage(InQueueReinjectMessage.java:63) 
09:22:20,731 ERROR [STDERR]  at com.cat.clv.util.RejectedMessageReinject.reProcessedMessage(RejectedMessageReinject.java:65) 
09:22:20,731 ERROR [STDERR]  at com.cat.clv.service.ReinjectMessagesServiceImpl.reinjectRejectedMessages(ReinjectMessagesServiceImpl.java:106) 
09:22:20,731 ERROR [STDERR]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
09:22:20,731 ERROR [STDERR]  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
09:22:20,732 ERROR [STDERR]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
09:22:20,732 ERROR [STDERR]  at java.lang.reflect.Method.invoke(Unknown Source) 
09:22:20,732 ERROR [STDERR]  at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421) 
09:22:20,732 ERROR [STDERR]  at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183) 
09:22:20,732 ERROR [STDERR]  at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1503) 

答えて

2

あなたがJBossConnectionFactoryのソースを見れば、あなたはそれがQueueConnectionFactoryを実装して表示されます。

ので、このクラスキャスト例外があるためですることができます。

  1. のJBoss
  2. 異なるjms.jarの誤装着は、クライアントとサーバー

に、あなたは最初のオプション2を試してみるとわかります動作している場合は、jbossのインストールでサンプルが動作するかどうかを確認できません。

0

検索でclassCast例外を取得: ClassCastExceptionが:weblogic.jms.client.JMSconnectionFactoryがjavax.jms.QueueConnectionFactoryを指定

のInitialContext =新しいのInitialContext(小道具)にキャストすることはできません。

// Step 3. Perform a lookup on the Connection Factory 
    QueueConnectionFactory cf = (QueueConnectionFactory) initialContext 
      .lookup("/ConnectionFactory"); 
    Queue queue = (Queue) initialContext 
      .lookup(/* "/queue/CLVInboundQueue" */inQueueName); 
    // Step 4.Create a JMS Connection 
    connection = (QueueConnection) cf.createConnection(); 

    // Step 5. Create a JMS Session 
    session = (QueueSession) connection.createSession(false, 
      Session.AUTO_ACKNOWLEDGE); 

    // Step 6. Create a JMS Message Producer 
    // MessageProducer producer = session.createProducer(queue); 
    QueueSender queueSender = session.createSender(queue); 
    TextMessage textMessage = session.createTextMessage(message); 
    textMessage.setLongProperty("Rejected_Message_ID", 
      rejected_Message_Id); 
    /* 
    * BufferedReader reader = new BufferedReader(new 
    * InputStreamReader(ClassLoader.class.getResourceAsStream(file))); 
    * StringBuilder sb = new StringBuilder(); String line = null; 
    * 
    * 
    * while ((line = reader.readLine()) != null) { sb.append(line + 
    * "\n"); } String announcementmsg = sb.toString(); 
    */ 
    commonlogger.info(textMessage); 
    connection.start(); 
    // producer.send(session.createTextMessage(announcementmsg)); 
    queueSender.send(textMessage); 
関連する問題