1

私は自分の問題の解決策をできる限り探しました。私のアプリは Glassfish v3 で実行されます。このアプリはメッセージを Glassfish JMS キューに送信し、このメッセージは同じホスト上にあるが Glassfish JVM の外部にあるスタンドアロン クライアントによって読み取られることになっています。

スタンドアロンのクライアント Java コードを作成しました。Glassfish インストール ディレクトリから appserv-rt.jar と gf-client.jar をインクルードしました。

このクライアント コードは、メッセージを受信できません。システム アウト ステートメントは、「コンシューマを取得」するまで出力されます。その後は何も起こりません。

キューの名前を変更すると、キューが見つからないというエラーが表示されます。クライアント コードはキューを見つけることができるようですが、メッセージを受信しないようです。クライアント コードに何を含める必要がありますか?

これが私のJavaクラスです:-

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;

import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.Queue;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.log4j.Category;

import domain.RedirectFile;

 public class ZblBulkUploadThread implements Runnable,MessageListener{

 private static final Category log = Category.getInstance(ZblBulkUploadThread.class) ;



    private Queue queue;

public void run()
{
    try
    {

        System.out.println(" inside try") ;
        InitialContext jndiContext = null;

        MessageConsumer messageConsumer=null;


        jndiContext = new InitialContext();

        System.out.println(" got context ") ;

        ConnectionFactory connectionFactory = (ConnectionFactory)jndiContext.
                lookup("jms/SimpleConnectionFactory");



        System.out.println("got connectionfactory") ;

    Connection connection = connectionFactory.createConnection();

    System.out.println("got connection") ;
    Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);

    queue = (Queue)jndiContext.lookup("jms/SimpleQueue") ;

    System.out.println("got queue"+queue.getQueueName()) ;

    messageConsumer = session.createConsumer(queue);

    System.out.println(" selector "+messageConsumer.getMessageSelector()) ;

    System.out.println("got consumer") ;

    Message message = messageConsumer.receive() ;

    System.out.println("Message is "+message) ;

    System.out.println("destination is "+message.getJMSDestination()) ;

    ObjectMessage om = ((ObjectMessage)message) ;
    try
    {

    RedirectFile file = (RedirectFile)om.getObject() ;

    log.debug("filePath "+file.getFilePath()) ;
    log.debug(" userName "+file.getUserName()) ;
    log.debug(" mode is "+file.getMode()) ;

    System.out.println("filePath "+file.getFilePath()) ;
    System.out.println(" userName "+file.getUserName()) ;
    System.out.println(" mode is "+file.getMode()) ;
    }
    catch(Exception ex)
    {
        log.error("ERROR "+ex.getMessage()) ;
        ex.printStackTrace() ;
    }

    log.debug("session created") ;

    }
    catch(Exception ex)
    {

        ex.printStackTrace() ;
        log.error("Error "+ex.getMessage()) ;
    }
}


public void onMessage(Message message)
{
    System.out.println("Message received "+message) ;
}

public static void main(String[] args)
{
    ZblBulkUploadThread zbut = new ZblBulkUploadThread() ;
    new Thread(zbut).start() ;
}

}

4

1 に答える 1

0

試してみてください:connection.start();受信コールの前のどこか。

于 2012-04-26T05:34:15.737 に答える