There is no such method as
The current implementation of the message cache
would make this hard to implement.
It does not guarantee (nor should it) that all
messages for a transaction are held in memory.
With lots of transactions/messages you would
very quickly get an OutOfMemoryException
Reliability is always more important than speed.
Your idea is a good one though. It would be more
optimal to persist the messages at transaction
prepare/commit when memory is not an issue.
Thanks your response.
This sample code is change by me.
I changed this code local and SpyXAResourceManager ,too.
afer make jar.
this code perfoms 1s process 2000tran .
I understand transactions from client is held memory.
This messege is sended by Queue client over sock network.
(transactions hold message,ack list)
This transactions is sended to Oracle by PersistanceManager .
1 tran is proceed by SQL over network .
this point is neck point.
I change markMessage and add method like under code.
public void markMessage(PreparedStatement stmt, long messageid, String destination, org.jboss.mq.pm.Tx txId, String mark)
// LogInfo logInfo;
if (txId == null)
I think that changes code more 100tran per 1 SQL over network(executeBatch)
doesn't lost reliability and not occures OutOfMemory ?
You would actually make the OutOfMemory
The 2000 message body contents are stored both in
memory and in the statement's list of command
to execute as blobs.
Now multiply that by N clients doing the same thing.
If you have a working example, post a patch