[
https://issues.apache.org/jira/browse/CAMEL-14327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17002711#comment-17002711
]
Rafał Gała commented on CAMEL-14327:
------------------------------------
Tried to increase producer cache size, but it looks like it is always set to 1,
here is part of the code from SendProcessor class:
{code:java}
@Override
protected void doStart() throws Exception {
if (producerCache == null) {
// use a single producer cache as we need to only hold reference
for one destination
// and use a regular HashMap as we do not want a soft reference
store that may get re-claimed when low on memory
// as we want to ensure the producer is kept around, to ensure its
lifecycle is fully managed,
// eg stopping the producer when we stop etc.
producerCache = new DefaultProducerCache(this, camelContext, 1);
// do not add as service as we do not want to manage the producer
cache
}
{code}
> 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
>
> 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)