[
https://issues.apache.org/jira/browse/CAMEL-14327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17004091#comment-17004091
]
Rafał Gała commented on CAMEL-14327:
------------------------------------
I think that Jt400Endpoint can be converted to a singleton. There is a comment
saying that it cannot be because the AS400 instance is stored in configuration,
but imo this is not true. The AS400ConnectionPool is stored in Configuration,
AS400 instances are retrieved using getConnection() method.
> 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)