public void addContextResource(Context context, List resourceList, boolean contextBound) { NamingResourcesImpl namingResources = context.getNamingResources(); ContextResource[] resources = namingResources.findResources(); for (int i = 0; i < resources.length; i++) { ContextResource contextResource = resources[i]; ApplicationResource resource = new ApplicationResource(); logger.info("reading resource: " + contextResource.getName()); resource.setApplicationName(context.getName()); resource.setName(contextResource.getName()); resource.setType(contextResource.getType()); resource.setScope(contextResource.getScope()); resource.setAuth(contextResource.getAuth()); resource.setDescription(contextResource.getDescription()); // lookupResource(resource, contextBound, false); resourceList.add(resource); } }
/** Create and initialize the JNDI naming context. */ private void createNamingContext() throws NamingException { // Creating the comp subcontext if (container instanceof Server) { compCtx = namingContext; envCtx = namingContext; } else { compCtx = namingContext.createSubcontext("comp"); envCtx = compCtx.createSubcontext("env"); } int i; if (log.isDebugEnabled()) log.debug("Creating JNDI naming context"); if (namingResources == null) { namingResources = new NamingResourcesImpl(); namingResources.setContainer(container); } // Resource links ContextResourceLink[] resourceLinks = namingResources.findResourceLinks(); for (i = 0; i < resourceLinks.length; i++) { addResourceLink(resourceLinks[i]); } // Resources ContextResource[] resources = namingResources.findResources(); for (i = 0; i < resources.length; i++) { addResource(resources[i]); } // Resources Env ContextResourceEnvRef[] resourceEnvRefs = namingResources.findResourceEnvRefs(); for (i = 0; i < resourceEnvRefs.length; i++) { addResourceEnvRef(resourceEnvRefs[i]); } // Environment entries ContextEnvironment[] contextEnvironments = namingResources.findEnvironments(); for (i = 0; i < contextEnvironments.length; i++) { addEnvironment(contextEnvironments[i]); } // EJB references ContextEjb[] ejbs = namingResources.findEjbs(); for (i = 0; i < ejbs.length; i++) { addEjb(ejbs[i]); } // WebServices references ContextService[] services = namingResources.findServices(); for (i = 0; i < services.length; i++) { addService(services[i]); } // Binding a User Transaction reference if (container instanceof Context) { try { Reference ref = new TransactionRef(); compCtx.bind("UserTransaction", ref); ContextTransaction transaction = namingResources.getTransaction(); if (transaction != null) { Iterator<String> params = transaction.listProperties(); while (params.hasNext()) { String paramName = params.next(); String paramValue = (String) transaction.getProperty(paramName); StringRefAddr refAddr = new StringRefAddr(paramName, paramValue); ref.add(refAddr); } } } catch (NameAlreadyBoundException e) { // Ignore because UserTransaction was obviously // added via ResourceLink } catch (NamingException e) { logger.error(sm.getString("naming.bindFailed", e)); } } // Binding the resources directory context if (container instanceof Context) { try { compCtx.bind("Resources", ((Context) container).getResources()); } catch (NamingException e) { logger.error(sm.getString("naming.bindFailed", e)); } } }
/** * Acknowledge the occurrence of the specified event. Note: Will never be called when the listener * is associated to a Server, since it is not a Container. * * @param event ContainerEvent that has occurred */ @Override public void containerEvent(ContainerEvent event) { if (!initialized) return; // Setting the context in read/write mode ContextAccessController.setWritable(getName(), token); String type = event.getType(); if (type.equals("addEjb")) { String ejbName = (String) event.getData(); if (ejbName != null) { ContextEjb ejb = namingResources.findEjb(ejbName); addEjb(ejb); } } else if (type.equals("addEnvironment")) { String environmentName = (String) event.getData(); if (environmentName != null) { ContextEnvironment env = namingResources.findEnvironment(environmentName); addEnvironment(env); } } else if (type.equals("addLocalEjb")) { String localEjbName = (String) event.getData(); if (localEjbName != null) { ContextLocalEjb localEjb = namingResources.findLocalEjb(localEjbName); addLocalEjb(localEjb); } } else if (type.equals("addResource")) { String resourceName = (String) event.getData(); if (resourceName != null) { ContextResource resource = namingResources.findResource(resourceName); addResource(resource); } } else if (type.equals("addResourceLink")) { String resourceLinkName = (String) event.getData(); if (resourceLinkName != null) { ContextResourceLink resourceLink = namingResources.findResourceLink(resourceLinkName); addResourceLink(resourceLink); } } else if (type.equals("addResourceEnvRef")) { String resourceEnvRefName = (String) event.getData(); if (resourceEnvRefName != null) { ContextResourceEnvRef resourceEnvRef = namingResources.findResourceEnvRef(resourceEnvRefName); addResourceEnvRef(resourceEnvRef); } } else if (type.equals("addService")) { String serviceName = (String) event.getData(); if (serviceName != null) { ContextService service = namingResources.findService(serviceName); addService(service); } } else if (type.equals("removeEjb")) { String ejbName = (String) event.getData(); if (ejbName != null) { removeEjb(ejbName); } } else if (type.equals("removeEnvironment")) { String environmentName = (String) event.getData(); if (environmentName != null) { removeEnvironment(environmentName); } } else if (type.equals("removeLocalEjb")) { String localEjbName = (String) event.getData(); if (localEjbName != null) { removeLocalEjb(localEjbName); } } else if (type.equals("removeResource")) { String resourceName = (String) event.getData(); if (resourceName != null) { removeResource(resourceName); } } else if (type.equals("removeResourceLink")) { String resourceLinkName = (String) event.getData(); if (resourceLinkName != null) { removeResourceLink(resourceLinkName); } } else if (type.equals("removeResourceEnvRef")) { String resourceEnvRefName = (String) event.getData(); if (resourceEnvRefName != null) { removeResourceEnvRef(resourceEnvRefName); } } else if (type.equals("removeService")) { String serviceName = (String) event.getData(); if (serviceName != null) { removeService(serviceName); } } // Setting the context in read only mode ContextAccessController.setReadOnly(getName()); }
/** * Acknowledge the occurrence of the specified event. * * @param event LifecycleEvent that has occurred */ @Override public void lifecycleEvent(LifecycleEvent event) { container = event.getLifecycle(); if (container instanceof Context) { namingResources = ((Context) container).getNamingResources(); logger = log; token = ((Context) container).getNamingToken(); } else if (container instanceof Server) { namingResources = ((Server) container).getGlobalNamingResources(); token = ((Server) container).getNamingToken(); } else { return; } if (Lifecycle.CONFIGURE_START_EVENT.equals(event.getType())) { if (initialized) return; try { Hashtable<String, Object> contextEnv = new Hashtable<>(); namingContext = new NamingContext(contextEnv, getName()); ContextAccessController.setSecurityToken(getName(), token); ContextAccessController.setSecurityToken(container, token); ContextBindings.bindContext(container, namingContext, token); if (log.isDebugEnabled()) { log.debug("Bound " + container); } // Configure write when read-only behaviour namingContext.setExceptionOnFailedWrite(getExceptionOnFailedWrite()); // Setting the context in read/write mode ContextAccessController.setWritable(getName(), token); try { createNamingContext(); } catch (NamingException e) { logger.error(sm.getString("naming.namingContextCreationFailed", e)); } namingResources.addPropertyChangeListener(this); // Binding the naming context to the class loader if (container instanceof Context) { // Setting the context in read only mode ContextAccessController.setReadOnly(getName()); try { ContextBindings.bindClassLoader( container, token, ((Context) container).getLoader().getClassLoader()); } catch (NamingException e) { logger.error(sm.getString("naming.bindFailed", e)); } } if (container instanceof Server) { org.apache.naming.factory.ResourceLinkFactory.setGlobalContext(namingContext); try { ContextBindings.bindClassLoader(container, token, this.getClass().getClassLoader()); } catch (NamingException e) { logger.error(sm.getString("naming.bindFailed", e)); } if (container instanceof StandardServer) { ((StandardServer) container).setGlobalNamingContext(namingContext); } } } finally { // Regardless of success, so that we can do cleanup on configure_stop initialized = true; } } else if (Lifecycle.CONFIGURE_STOP_EVENT.equals(event.getType())) { if (!initialized) return; try { // Setting the context in read/write mode ContextAccessController.setWritable(getName(), token); ContextBindings.unbindContext(container, token); if (container instanceof Context) { ContextBindings.unbindClassLoader( container, token, ((Context) container).getLoader().getClassLoader()); } if (container instanceof Server) { namingResources.removePropertyChangeListener(this); ContextBindings.unbindClassLoader(container, token, this.getClass().getClassLoader()); } ContextAccessController.unsetSecurityToken(getName(), token); ContextAccessController.unsetSecurityToken(container, token); // unregister mbeans. if (!objectNames.isEmpty()) { Collection<ObjectName> names = objectNames.values(); Registry registry = Registry.getRegistry(null, null); for (ObjectName objectName : names) { registry.unregisterComponent(objectName); } } } finally { objectNames.clear(); namingContext = null; envCtx = null; compCtx = null; initialized = false; } } }