-1

私はキューが初めてです。JBOSS 5.1 EAP でキューをセットアップしましたが、ClassCastException(JNDI のルックアップで) キューに注入しようとしているときに、フロントエンドでフレックスを使用し、フレックスに Spring フレームワークを使用しています。Quartz ジョブを使用してキューに挿入すると、正常に実行されます。クォーツの仕事は別のプロジェクトであり、フレックスやスプリングとは何の関係もありません。

これがjarの問題である可能性がある場所をいくつか読みました。春にJMS jarがあり、すべてのタイプのjarを削除して置き換えようとしましたが、運がありませんでした。

        // 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)
4

2 に答える 2

2

JBossConnectionFactoryのソースを見ると、QueueConnectionFactoryを実装していることがわかります。

したがって、このクラスキャスト例外は次の理由で発生する可能性があります。

  1. JBossの誤ったインストール
  2. クライアントとサーバーで異なるjms.jar

最初にオプション2を試して、それが機能するかどうかを確認できますか。機能しない場合は、jbossインストールで例が機能するかどうかを確認できます。

于 2012-04-30T17:12:51.693 に答える
0

検索時に classCast 例外を取得しています: classcastexception: weblogic.jms.client.JMSconnectionFactory を javax.jms.QueueConnectionFactory にキャストできません

initialContext = 新しい 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);
于 2017-06-08T10:07:49.510 に答える