下面的程序enqueue的时候可以成功的把消息入进队列里面,但是dequeue的时候message却为null,这是为什么呢?难道我的代码写得有错吗?
困扰我很长时间了!大家帮我解决解决吧! public static void main(String[] args) throws Exception{
AQjmsConnection connection = AqUtils.getConnection("aqadm", "aqadm");
AQjmsSession session=(AQjmsSession)connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
enqueue(connection,session);
dequeue(connection,session);
session.close();
connection.close();
} public static void dequeue(AQjmsConnection connection,AQjmsSession session) throws JMSException,AQException {
Queue queue=session.getQueue("aqadm", "wj_aqqueue");
Message message=receiver.receiveNoWait();
System.out.println(message);
}
public static void enqueue(AQjmsConnection connection,AQjmsSession session) throws JMSException,AQException {
Queue queue=session.getQueue("aqadm","wj_aqqueue");
BytesMessage message=session.createBytesMessage();
message.setJMSCorrelationID("fuck");
message.writeBytes("测试的一个入队消息".getBytes());
QueueSender sender = session.createSender(queue);
sender.send(queue,message);
}

解决方案 »

  1.   

    先把上面的Oracle语句抽取出来,在sqlplus或pl/sql下运行,最好是单步调试以查出原因所在。计算机永远都是对的,是你错了!但没必要崩溃,呵呵。
      

  2.   

    你要确保入队的值不为空,才能谈得上出队不为空;
    最简单的办法是先在toad或sqlplus里测试OK后,再把它放到程序里
      

  3.   

    没问题啊我现在在sqlplus命令行里面执行下面代码是可以出队的啊
    DECLARE
    dequeue_options     DBMS_AQ.dequeue_options_t;
    message_properties  DBMS_AQ.message_properties_t;
    message_handle      RAW(16);
    message             SYS.AQ$_JMS_BYTES_MESSAGE;
    BEGIN
       dequeue_options.navigation := DBMS_AQ.FIRST_MESSAGE;
       DBMS_AQ.DEQUEUE(
          queue_name          =>     'aqadm.wj_aqqueue',
          dequeue_options     =>     dequeue_options,
          message_properties  =>     message_properties,
          payload             =>     message,
          msgid               =>     message_handle);
       COMMIT;
    DBMS_OUTPUT.PUT_LINE('message');
    END;
    /