From cb2fead2df3b21c0145cbfe2cb71f593f6e0fce9 Mon Sep 17 00:00:00 2001 From: jGauravGupta Date: Tue, 19 Sep 2017 17:25:40 +0530 Subject: [PATCH] PAYARA-2056 NPE at PoolManagerImpl.handleLazilyAssociatedConnectionPools() --- .../resource/pool/PoolManagerImpl.java | 46 ++++++++++++------- .../com/sun/enterprise/LogStrings.properties | 6 +++ 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/PoolManagerImpl.java b/appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/PoolManagerImpl.java index 2adf96bb1db..26019ae0fb0 100644 --- a/appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/PoolManagerImpl.java +++ b/appserver/connectors/connectors-runtime/src/main/java/com/sun/enterprise/resource/pool/PoolManagerImpl.java @@ -609,32 +609,44 @@ private void handleLazilyAssociatedConnectionPools(Object comp, ComponentInvocat return; } - if (list.size() == 0) return; + if (list.isEmpty()) return; ResourceHandle[] handles = new ResourceHandle[list.size()]; handles = (ResourceHandle[]) list.toArray(handles); for (ResourceHandle h : handles) { + if (h == null) { + _logger.log(Level.WARNING, "lazy_association.lazy_association_resource_handle"); + continue; + } ResourceSpec spec = h.getResourceSpec(); + if (spec == null) { + _logger.log(Level.WARNING, "lazy_association.lazy_association_resource_spec"); + continue; + } if (spec.isLazyAssociatable()) { //In this case we are assured that the managedConnection is //of type DissociatableManagedConnection - javax.resource.spi.DissociatableManagedConnection mc = - (javax.resource.spi.DissociatableManagedConnection) h.getResource(); - if (h.isEnlisted()) { - getResourceManager(spec).delistResource( - h, XAResource.TMSUCCESS); - } - try { - mc.dissociateConnections(); - } catch (ResourceException re) { - InvocationException ie = new InvocationException( - re.getMessage()); - ie.initCause(re); - throw ie; - } finally { - if (h.getResourceState().isBusy()) { - putbackDirectToPool(h, spec.getPoolInfo()); + if (h.getResource() != null) { + javax.resource.spi.DissociatableManagedConnection mc + = (javax.resource.spi.DissociatableManagedConnection) h.getResource(); + if (h.isEnlisted()) { + getResourceManager(spec).delistResource( + h, XAResource.TMSUCCESS); } + try { + mc.dissociateConnections(); + } catch (ResourceException re) { + InvocationException ie = new InvocationException( + re.getMessage()); + ie.initCause(re); + throw ie; + } finally { + if (h.getResourceState().isBusy()) { + putbackDirectToPool(h, spec.getPoolInfo()); + } + } + } else { + _logger.log(Level.WARNING, "lazy_association.lazy_association_resource"); } } } diff --git a/appserver/connectors/connectors-runtime/src/main/resources/com/sun/enterprise/LogStrings.properties b/appserver/connectors/connectors-runtime/src/main/resources/com/sun/enterprise/LogStrings.properties index 265532ee01c..88994da2540 100755 --- a/appserver/connectors/connectors-runtime/src/main/resources/com/sun/enterprise/LogStrings.properties +++ b/appserver/connectors/connectors-runtime/src/main/resources/com/sun/enterprise/LogStrings.properties @@ -380,6 +380,12 @@ rardeployment.resource_jndi_bind_failure=RAR8072 : Failed to publish resource {0 RAR8072.diag.check.1=Check whether the connection pool exists. RAR8072.diag.check.2=Check whether the connection pool configuration is valid. RAR8072.diag.check.3=Check whether the resource configuration is valid. +lazy_association.lazy_association_resource_handle=RAR8075: Skipping lazy connection disassociation due to Resource Handle: null +RAR8075.diag.cause.1=Resource Handle Held by the Component is Null. +lazy_association.lazy_association_resource_spec=RAR8076: Skipping lazy connection disassociation due to Resource Spec: null +RAR8076.diag.cause.1=Resource Spec from Resource Handle is Null. +lazy_association.lazy_association_resource=RAR8077: Skipping lazy connection disassociation due to Resource: null +RAR8077.diag.cause.1=Resource from Resource Handle is Null. #------------------------------------------------------------------------------------------------------ #RAR8010 till RAR8500 reserved for connectors-runtime LogStrings. #Please increment RAR IDs by one for any new additional messages added here.