[ 
https://issues.apache.org/jira/browse/CAMEL-14327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17004041#comment-17004041
 ] 

Claus Ibsen commented on CAMEL-14327:
-------------------------------------

This only affects components that are non singleton, which is very rare, but 
the jt400 is that. Another way is to rewrite this to be singleton which it 
ought to be in the first place.

> Jt400PgmProducer doStop() method called on actively used instance
> -----------------------------------------------------------------
>
>                 Key: CAMEL-14327
>                 URL: https://issues.apache.org/jira/browse/CAMEL-14327
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jt400
>    Affects Versions: 3.0.0
>            Reporter: Rafał Gała
>            Priority: Major
>             Fix For: 3.0.1, 3.1.0
>
>
> Today I migrated to 3.0.0 version and there seems to be an issue with Service 
> pooling for the Jt400PgmpProducer.
>  
> Here's what I have:
>  
> {code:java}
>     from(
>         "seda:someName?concurrentConsumers=2&size=10")
>             
> .to("jt400://{{as400.user}}:{{as400.password}}@{{as400.host}}/QSYS.LIB/PROGRAM.LIB/KFKEVR.SRVPGM?fieldsLength=200,2000,4,8,8,1000&outputFieldsIdx=0,1,2,3,4,5&connectionPool=#as400ConnectionPool&format=binary&procedureName=RECEIVEEVENT");
> {code}
> When concurrentConsumers attribute of seda endpoint is set to 1 everything 
> works fine, but when it is greater than 1 then it looks like the evict method 
> from MultiplePool class calls stop method on a Jt400PgmProducer instance that 
> is still being used (the process method on it is still getting called). This 
> results in nulling the iSeries object inside Jt400PgmProducer instance:
> {code:java}
>     @Override
>     protected void doStop() throws Exception {
>         if (iSeries != null) {
>             LOG.info("Releasing connection to {}", getISeriesEndpoint());
>             getISeriesEndpoint().releaseSystem(iSeries);
>             iSeries = null;
>         }
>     }
> {code}
> and when the process method gets called later on this instance, it fails with 
> NPE while constructing ServiceProgramCall:
> {code:java}
>     @Override
>     public void process(Exchange exchange) throws Exception {
> ...
>             pgmCall = new ServiceProgramCall(iSeries);
> ...            
> {code}
>  
> I believe this may be related to producer caching in ServicePool class, some 
> sort of key issue in the cache Map maybe?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to