Alex Boisvert wrote:
Thanks for the bug report. Sounds like there's a concurrency issue in the
JBI IL. I won't have time to look into this in the very near future, so
if
you have the guts to look deeper in the code now, feel free to investigate
and ask questions if you need help.
Hi.
I think, that I knew what is the reason of this bug. I found out that
after some processes, some MessageExchange is stored in some Correlators
in case that, this ME is useless. There is invoked release() method on
this ME but in this method nothing is happened. In the fact, this ME
doesn't exist in their Correlator in exchanges list. I've tried to do
quick fix by adding:
if (_process != null)
_process.removeMEXFromAllCorrelators(this);
in dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
in vi dao-jpa/src/main/java/org/apache/ode/dao/jpa/ProcessDAOImpl.java:
public void removeMEXFromAllCorrelators(MessageExchangeDAO mex) {
for (CorrelatorDAO c : _correlators) {
((CorrelatorDAOImpl)c).removeMEX(mex);
}
}
and in dao-jpa/src/main/java/org/apache/ode/dao/jpa/CorrelatorDAOImpl.java:
public void removeMEX(MessageExchangeDAO mex) {
_exchanges.remove(mex);
}
but this double-used MessageExchange is still in some other Correlator.
How it is possible? Maybe somebody can give me some advices, how to
remove some ME from all possible Correlators? And it will be fine, if
architect of runtime module will tell me, if I'm trying to break some
concept.
Cheers, Arek