From 0e6b71f0b82b8fc67878c5157740c13e0b1545e9 Mon Sep 17 00:00:00 2001 From: Steve Millidge Date: Sat, 12 Dec 2015 07:35:07 +0000 Subject: [PATCH] Fixes #564 ensure Datasource JNDI entries are removed when it is unregistered. --- .../deployment/util/ApplicationValidator.java | 3 +- .../DataSourceDefinitionDeployer.java | 33 ++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/util/ApplicationValidator.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/util/ApplicationValidator.java index 33d6d264f57..359f574a6e5 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/util/ApplicationValidator.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/util/ApplicationValidator.java @@ -37,12 +37,12 @@ * only if the new code is made subject to such option by the copyright * holder. */ +//Portions Copyright [2015] [C2B2 Consulting Limited] package com.sun.enterprise.deployment.util; import java.util.ArrayList; import java.util.Collection; -import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -56,7 +56,6 @@ import com.sun.enterprise.deployment.*; import com.sun.enterprise.deployment.types.EjbReference; import com.sun.enterprise.deployment.types.MessageDestinationReferencer; -import com.sun.enterprise.deployment.web.EnvironmentEntry; import com.sun.enterprise.util.LocalStringManagerImpl; import org.glassfish.deployment.common.Descriptor; import org.glassfish.deployment.common.DescriptorVisitor; diff --git a/appserver/jdbc/jdbc-runtime/src/main/java/org/glassfish/jdbc/deployer/DataSourceDefinitionDeployer.java b/appserver/jdbc/jdbc-runtime/src/main/java/org/glassfish/jdbc/deployer/DataSourceDefinitionDeployer.java index b1380921071..65813437747 100644 --- a/appserver/jdbc/jdbc-runtime/src/main/java/org/glassfish/jdbc/deployer/DataSourceDefinitionDeployer.java +++ b/appserver/jdbc/jdbc-runtime/src/main/java/org/glassfish/jdbc/deployer/DataSourceDefinitionDeployer.java @@ -221,10 +221,27 @@ private void registerDataSourceDefinitions(String appName, Descriptor descriptor } - private void unregisterDSDReferredByApplication(DataSourceDefinitionDescriptor dsd){ + private void unregisterDSDReferredByApplication(String appName, DataSourceDefinitionDescriptor dsd){ try{ if(dsd.isDeployed()){ undeployResource(dsd); + + // unbind from JNDI + ResourceNamingService resourceNamingService = resourceNamingServiceProvider.get(); + String dsdName = dsd.getName(); + + if(dsdName.startsWith(ResourceConstants.JAVA_GLOBAL_SCOPE_PREFIX) + /*|| next.getName().startsWith("java:module/")*/ + || dsdName.startsWith(ResourceConstants.JAVA_APP_SCOPE_PREFIX)){ + ResourceInfo resourceInfo = new ResourceInfo(dsdName, appName, null); + try { + resourceNamingService.unpublishObject(resourceInfo, dsdName); + dsd.setDeployed(false); + } catch (NamingException e) { + Object params[] = new Object[]{appName, dsdName, e}; + _logger.log(Level.WARNING, "dsd.unregistration.failed", params); + } + } } }catch(Exception e){ _logger.log(Level.WARNING, "exception while unregistering DSD [ "+dsd.getName()+" ]", e); @@ -234,21 +251,21 @@ private void unregisterDSDReferredByApplication(DataSourceDefinitionDescriptor d public void unRegisterDataSourceDefinitions(com.sun.enterprise.deployment.Application application) { Set bundles = application.getBundleDescriptors(); for (BundleDescriptor bundle : bundles) { - unRegisterDataSourceDefinitions(bundle); + unRegisterDataSourceDefinitions(application.getName(),bundle); Collection dds = bundle.getExtensionsDescriptors(); if(dds != null){ for(RootDeploymentDescriptor dd : dds){ - unRegisterDataSourceDefinitions(dd); + unRegisterDataSourceDefinitions(application.getName(), dd); } } } } - private void unRegisterDataSourceDefinitions(Descriptor descriptor) { + private void unRegisterDataSourceDefinitions(String appName, Descriptor descriptor) { if (descriptor instanceof JndiNameEnvironment) { JndiNameEnvironment env = (JndiNameEnvironment) descriptor; for (Descriptor dsd : env.getResourceDescriptors(JavaEEResourceType.DSD)) { - unregisterDSDReferredByApplication((DataSourceDefinitionDescriptor)dsd); + unregisterDSDReferredByApplication(appName, (DataSourceDefinitionDescriptor)dsd); } } @@ -258,14 +275,14 @@ private void unRegisterDataSourceDefinitions(Descriptor descriptor) { Set ejbDescriptors = ejbDesc.getEjbs(); for (EjbDescriptor ejbDescriptor : ejbDescriptors) { for (Descriptor dsd : ejbDescriptor.getResourceDescriptors(JavaEEResourceType.DSD)) { - unregisterDSDReferredByApplication((DataSourceDefinitionDescriptor)dsd); + unregisterDSDReferredByApplication(appName, (DataSourceDefinitionDescriptor)dsd); } } //ejb interceptors Set ejbInterceptors = ejbDesc.getInterceptors(); for (EjbInterceptor ejbInterceptor : ejbInterceptors) { for (Descriptor dsd : ejbInterceptor.getResourceDescriptors(JavaEEResourceType.DSD)) { - unregisterDSDReferredByApplication((DataSourceDefinitionDescriptor)dsd); + unregisterDSDReferredByApplication(appName, (DataSourceDefinitionDescriptor)dsd); } } } @@ -275,7 +292,7 @@ private void unRegisterDataSourceDefinitions(Descriptor descriptor) { Set managedBeanDescriptors = ((BundleDescriptor)descriptor).getManagedBeans(); for (ManagedBeanDescriptor mbd : managedBeanDescriptors) { for (Descriptor dsd : mbd.getResourceDescriptors(JavaEEResourceType.DSD)) { - unregisterDSDReferredByApplication((DataSourceDefinitionDescriptor)dsd); + unregisterDSDReferredByApplication(appName, (DataSourceDefinitionDescriptor)dsd); } } }