📄 portletdescriptorregistry.java.svn-base
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.pluto.core;import java.io.IOException;import java.io.InputStream;import java.util.Map;import java.util.WeakHashMap;import javax.servlet.ServletContext;import org.apache.pluto.PlutoConfigurationException;import org.apache.pluto.PortletContainerException;import org.apache.pluto.om.portlet.PortletApplicationDefinition;import org.apache.pluto.services.PortletAppDescriptorService;import org.apache.pluto.util.StringManager;/** * Simple caching mechanism used to manage portlet descriptors. This mechanism * takes special considerations to make sure that the cache is invalidated for * any ServletContext that is destroyed, thus allowing for a the context to be * redeployed. * * NOTE: This should only be used internally. Do not access it from embedding * portals, instead, utilize the PortletRegistryService. * * @version 1.0 * @since Nov 3, 2004 */public class PortletDescriptorRegistry { /** Portlet deployment descriptor location. */ private static final String PORTLET_XML = "/WEB-INF/portlet.xml"; /** Exception Messages. */ private static final StringManager EXCEPTIONS = StringManager.getManager( PortletDescriptorRegistry.class.getPackage().getName()); /** The static singleton registry instance. */ private static final PortletDescriptorRegistry REGISTRY = new PortletDescriptorRegistry(); // Private Member Variables ------------------------------------------------ /** The portlet application descriptor service. */ private PortletAppDescriptorService portletDDService; /** * Cache of descriptors. WeakHashMap is used so that * once the context is destroyed (kinda), the cache is eliminated. * Ideally we'd use a ServletContextListener, but at this * point I'm wondering if we really want to add another * config requirement in the servlet xml? Hmm. . . */ private Map cache = new WeakHashMap(); // Constructor ------------------------------------------------------------- /** * Returns the singleton registry instance. * @return the singleton registry instance. */ public static PortletDescriptorRegistry getRegistry() { return REGISTRY; } /** * Private constructor that prevents external instantiation. * We must modify the context class loader in order for * the Configuration utility to find the properties file. * @throws PlutoConfigurationException if fail to instantiate portlet * application descriptor service. */ private PortletDescriptorRegistry() throws PlutoConfigurationException { String className = Configuration.getPortletAppDescriptorServiceImpl(); try { Class clazz = Class.forName(className); portletDDService = (PortletAppDescriptorService) clazz.newInstance(); } catch (ClassNotFoundException ex) { throw new PlutoConfigurationException( "Unable to find class " + className, ex); } catch (InstantiationException ex) { throw new PlutoConfigurationException( "Unable to instantiate class " + className, ex); } catch (IllegalAccessException ex) { throw new PlutoConfigurationException( "Unable to access class " + className, ex); } } // Public Methods ---------------------------------------------------------- /** * Retrieve the Portlet Application Deployment Descriptor for the given * servlet context. Create it if it does not allready exist. * * @param servletContext the servlet context. * @return The portlet application deployment descriptor. * @throws PortletContainerException if the descriptor can not be found or parsed */ public PortletApplicationDefinition getPortletAppDD(ServletContext servletContext) throws PortletContainerException { PortletApplicationDefinition portletApp = (PortletApplicationDefinition) cache.get(servletContext); if (portletApp == null) { portletApp = createDefinition(servletContext); cache.put(servletContext, portletApp); } return portletApp; } // Private Methods --------------------------------------------------------- /** * Creates the portlet.xml deployment descriptor representation. * * @param servletContext the servlet context for which the DD is requested. * @return the Portlet Application Deployment Descriptor. * @throws PortletContainerException */ private PortletApplicationDefinition createDefinition(ServletContext servletContext) throws PortletContainerException { PortletApplicationDefinition portletApp = null; try { InputStream in = servletContext.getResourceAsStream(PORTLET_XML); if (in == null) { throw new PortletContainerException("Cannot find '" + PORTLET_XML + "'. Are you sure it is in the deployed package?"); } portletApp = portletDDService.read(in); } catch (IOException ex) { throw new PortletContainerException(EXCEPTIONS.getString( "error.context.descriptor.load", new String[] { servletContext.getServletContextName() }), ex); } return portletApp; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -