【发布时间】:2021-03-25 19:54:33
【问题描述】:
我已将一个 Java 对象(保存 Oracle 表中的一条记录)作为 ObjectMessage 排入 ActiveMQ 队列。接下来,我想检索 ObjectMessage 并获取其中的 Clob 数据。如果我尝试这个,我会得到错误:
java.lang.IllegalStateException: Clobs may not be accessed after serialization
我只收到 Clob 字段。从队列返回的对象中成功读取 Integer 或 String 字段。
制作人:
public void enqueuToTableQueue(String TableName, Serializable recordObject)
{
jms_queue_name = TableName.trim().toUpperCase() + "_QUEUE";
try {
destination = new ActiveMQQueue(jms_queue_name);
producer = producerSession.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
ObjectMessage aRecordObjMsg = producerSession.createObjectMessage(recordObject);
aRecordObjMsg.setJMSType("OBJECT");
producer.send(aRecordObjMsg);
} catch (JMSException jex) {
logger.info(jex);
} catch (Exception ex) {
logger.info(ex);
}
}
消费者:
public Object dequeuFromTableQueue(String tableName){
try {
Message msg;
try {
msg = consumer.receive();
if (msg instanceof ObjectMessage) {
ObjectMessage objmsg = (ObjectMessage) msg;
Object object = objmsg.getObject();
return object;
} else {
System.out.println("Unrecognized Message type " + msg.getClass());
}
} catch (JMSException e) {
System.out.println("consumer.receive() has thrown JMSException..");
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
来自 Main 的异常:
Object obj = queueManager.dequeuFromTableQueue("BillData");
if ( obj != null) {
BillData billData = (BillData) obj;
System.out.println("Account Num is : " + billData.getACCOUNT_NUM()); // PRINTS SUCCESSFULLY
Reader reader =null;
try {
reader = billData.getDATA().getCharacterStream(); //THIS LINE THROWS Exception :java.lang.IllegalStateException: Clobs may not be accessed after serialization
我正在使用 Hibernate 从生产者的 Oracle 数据库中检索数据,我需要在从 ActiveMQ 读取数据后再次使用 Hibernate 以保存在 Postgres 中。
【问题讨论】:
标签: hibernate deserialization activemq clob