powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Oracle AQ - какой тип сообщения нужен?
8 сообщений из 8, страница 1 из 1
Oracle AQ - какой тип сообщения нужен?
    #36250861
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Создал в Оракле (10.2.0.4) очередь для хранения объектов
Код: plaintext
1.
2.
CREATE OR REPLACE TYPE demo2_queue_payload_type AS OBJECT( message 
VARCHAR2( 4000 ) );

Какой тип сообщения нужно использовать из JAVA?
Попытка сделать
Код: plaintext
1.
2.
3.
       ObjectMessage message = jmsSession.createObjectMessage();
       message.setStringProperty("message", messageText);
       jmsProducer.send(message);

Приводит к ошибке
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
oracle.jms.AQjmsException: JMS- 108 : Сообщения типа ObjectMessage с 
пунктами назначения, содержащими полезную нагрузку типа 
PKG.DEMO2_QUEUE_PAYLOAD_TYPE, запрещены
	at oracle.jms.AQjmsError.throwEx(AQjmsError.java: 372 )
	at oracle.jms.AQjmsProducer.checkMessageType(AQjmsProducer.java: 1965 )
	at oracle.jms.AQjmsProducer.enqueue(AQjmsProducer.java: 813 )
	at oracle.jms.AQjmsProducer.send(AQjmsProducer.java: 692 )
	at oracle.jms.AQjmsProducer.send(AQjmsProducer.java: 465 )

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Oracle AQ - какой тип сообщения нужен?
    #36250913
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   public static class Demo2QueuePayloadType implements Serializable {
     private static final long serialVersionUID = -1874464860474707997L;
     private String message;
     public Demo2QueuePayloadType(String message) {
       this.message = message;
     }
     public String getMessage() {
       return message;
     }
   }
...........
       ObjectMessage message = jmsSession.createObjectMessage(
           new Demo2QueuePayloadType(messageText));
       jmsProducer.send(message);
привел к тому же результату.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Oracle AQ - какой тип сообщения нужен?
    #36251159
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,
StreamMessage
TextMessage
не пробовали?
...
Рейтинг: 0 / 0
Oracle AQ - какой тип сообщения нужен?
    #36251190
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по доке катят лишь
Код: plaintext
1.
AQjmsAdtMessage, AQjmsBytesMessage, AQjmsMapMessage, AQjmsObjectMessage, AQjmsStreamMessage, AQjmsTextMessage
пэкейдж ессно oracle.jms
...
Рейтинг: 0 / 0
Oracle AQ - какой тип сообщения нужен?
    #36252040
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalexaka wrote:

> StreamMessage
> TextMessage
>
> не пробовали?

Пробовал. Та же фигня.
Может я не так очередь создаю?
Так вроде по примеру всё:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TYPE demo2_queue_type AS OBJECT( message VARCHAR2( 1000 ) );
/

begin
   DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table => 'demo2_queue_table', 
queue_payload_type => 'demo2_queue_type');
   DBMS_AQADM.CREATE_QUEUE (queue_name => 'demo2_queue', queue_table => 
'demo2_queue_table');
   DBMS_AQADM.START_QUEUE (queue_name => 'demo2_queue');
end;
/

Но какой тип не выбираю- всё одно- именно он не доступен.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Oracle AQ - какой тип сообщения нужен?
    #36252043
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalexaka wrote:

> AQjmsAdtMessage, AQjmsBytesMessage, AQjmsMapMessage, AQjmsObjectMessage, AQjmsStreamMessage, AQjmsTextMessage
>
> пэкейдж ессно oracle.jms

Я ж не конструктором создаю!
Код: plaintext
1.
2.
3.
       ObjectMessage message = 
jmsSession.createObjectMessage(messageObject);
       System.out.println(message.getClass());

stdout: class oracle.jms.AQjmsObjectMessage

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Oracle AQ - какой тип сообщения нужен?
    #38651932
nikonis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наткнулся на ту же проблему. Мне помогло следующее решение:

Нужно имплементировать интерфейс oracle.sql.ORAData в классе Demo2QueuePayloadType.
Примерно так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class Demo2QueuePayloadType implements ORAData {
  static int[] _sqlType = {12};
  static MutableStruct _struct = new MutableStruct(new Object[1], _sqlType, new Demo2QueuePayloadType());

  public Datum toDatum(Connection c) throws SQLException {
      return _struct.toDatum(c, "PKG.DEMO2_QUEUE_PAYLOAD_TYPE");
  }

  public String getMessage() throws SQLException { 
      return (String) _struct.getAttribute(0); 
  }

  public void setMessage(String msg) throws SQLException {
     _struct.setAttribute(0, msg); 
  }
}



Тогда JMS-сообщение можно передать так:

Код: java
1.
2.
3.
4.
5.
AdtMessage replyMessage = ((AQjmsSession)session).createORAMessage();
Demo2QueuePayloadType t = new Demo2QueuePayloadType();
t.setMessage("my message");
replyMessage.setAdtPayload(t);
messageProducer.send(replyMessage);
...
Рейтинг: 0 / 0
Oracle AQ - какой тип сообщения нужен?
    #38651979
nikonis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо
Код: java
1.
static MutableStruct _struct = new MutableStruct(new Object[1], _sqlType, new Demo2QueuePayloadType());


Читать:
Код: java
1.
static MutableStruct _struct = new MutableStruct(new Object[1], _sqlType, new CustomDatumFactory[1]);
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Oracle AQ - какой тип сообщения нужен?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]