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); } } } }
private void setResourceId(JndiNameEnvironment env, DataSourceDefinitionDescriptor desc){ String resourceId = ""; if(dependencyAppliesToScope(desc, ScopeType.COMPONENT)){ resourceId = getApplicationName(env) + "/" + getModuleName(env) + "/" + getComponentEnvId(env) ; } else if(dependencyAppliesToScope(desc, ScopeType.MODULE)){ resourceId = getApplicationName(env) + "/" + getModuleName(env) ; } else if(dependencyAppliesToScope(desc, ScopeType.APP)){ resourceId = getApplicationName(env) ; } desc.setResourceId(resourceId); } private void addDataSourceBindings(JndiNameEnvironment env, ScopeType scope, Collection<JNDIBinding> jndiBindings) {