ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arkadiusz Burdach <...@touk.pl>
Subject Re: FATAL in BpelRuntimeContextImpl
Date Mon, 21 Jul 2008 10:16:40 GMT
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

Mime
View raw message