private void undeployDataSourceDefinitions(JndiNameEnvironment env) { for (DataSourceDefinitionDescriptor dsd : env.getDataSourceDefinitionDescriptors()) { Collection<ResourceDeployer> resourceDeployers = habitat.getAllByContract(ResourceDeployer.class); try{ if(dsd.isDeployed()){ ResourceDeployer deployer = getResourceDeployer(dsd, resourceDeployers); deployer.undeployResource(dsd); dsd.setDeployed(false); } }catch(Exception e){ _logger.log(Level.WARNING, "unable to undeploy DataSourceDefinition [ " + dsd.getName() + " ] ", e); } } }
private void registerDSDReferredByApplication(String appName, DataSourceDefinitionDescriptor dsd) { // It is possible that JPA might call this method multiple times in a single deployment, // when there are multiple PUs eg: one PU in each of war, ejb-jar. Make sure that // DSD is bound to JNDI only when it is not already deployed. if(!dsd.isDeployed()){ DataSourceDefinitionProxy proxy = habitat.getComponent(DataSourceDefinitionProxy.class); ResourceNamingService resourceNamingService = habitat.getComponent(ResourceNamingService.class); proxy.setDescriptor(dsd); //String appName = application.getAppName(); String moduleName = null; if(dsd.getName().startsWith(ConnectorConstants.JAVA_APP_SCOPE_PREFIX)){ dsd.setResourceId(appName); } if(dsd.getName().startsWith(ConnectorConstants.JAVA_GLOBAL_SCOPE_PREFIX) /*|| next.getName().startsWith("java:module/")*/ || dsd.getName().startsWith(ConnectorConstants.JAVA_APP_SCOPE_PREFIX)){ ResourceInfo resourceInfo = new ResourceInfo(dsd.getName(), appName, moduleName); try { resourceNamingService.publishObject(resourceInfo, proxy, true); dsd.setDeployed(true); } catch (NamingException e) { Object params[] = new Object[]{appName, dsd.getName(), e}; _logger.log(Level.WARNING, "dsd.registration.failed", params); } } } }
public void undeployResource(Object resource) throws Exception { final DataSourceDefinitionDescriptor desc = (DataSourceDefinitionDescriptor) resource; Collection<ResourceDeployer> deployers = habitat.getAllByContract(ResourceDeployer.class); String poolName = ConnectorsUtil.deriveDataSourceDefinitionPoolName(desc.getResourceId(), desc.getName()); String resourceName = ConnectorsUtil.deriveDataSourceDefinitionResourceName(desc.getResourceId(), desc.getName()); if(_logger.isLoggable(Level.FINE)) { _logger.log(Level.FINE, "DataSourceDefinitionDeployer.undeployResource() : pool-name ["+poolName+"], " + " resource-name ["+resourceName+"]"); } //undeploy resource JdbcResource jdbcResource = new MyJdbcResource(poolName, resourceName); getDeployer(jdbcResource, deployers).undeployResource(jdbcResource); //undeploy pool JdbcConnectionPool jdbcCp = new MyJdbcConnectionPool(desc, poolName); getDeployer(jdbcCp, deployers).undeployResource(jdbcCp); desc.setDeployed(false); }
if(dataSourceDefinitionDescriptor.isDeployed()) { if(undepoyResource(dataSourceDefinitionDescriptor)) { dataSourceDefinitionDescriptor.setDeployed(false);