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

Reply via email to