From: Adrian B. <adr...@jb...> - 2006-02-01 13:51:05
|
User: adrian Date: 06/02/01 08:50:57 Added: src/main/org/jboss/kernel/plugins/deployment/xml BasicXMLDeployer.java Log: [JBMICROCONT-66] - Add BasicKernelDeployer which extends AbstractKernelDeployer to keep track of deployments and provide a shutdown method. Clone BeanXMLDeployer to BasicXMLDeployer to use the BasicKernelDeployer and provide some helpers to undeploy by url/name. Revision Changes Path 1.1 date: 2006/02/01 13:50:57; author: adrian; state: Exp;microkernel/src/main/org/jboss/kernel/plugins/deployment/xml/BasicXMLDeployer.java Index: BasicXMLDeployer.java =================================================================== /* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.kernel.plugins.deployment.xml; import java.io.InputStream; import java.net.URL; import java.util.Map; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.deployment.BasicKernelDeployer; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.logging.Logger; import org.jboss.util.CollectionsFactory; import org.jboss.util.xml.SingletonSchemaResolverFactory; import org.jboss.xb.binding.Unmarshaller; import org.jboss.xb.binding.UnmarshallerFactory; import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver; /** * BasicXMLDeployer. * * @author <a href="ad...@jb...">Adrian Brock</a> * @version $Revision: 1.1 $ */ public class BasicXMLDeployer extends BasicKernelDeployer { /** The log */ private static final Logger log = Logger.getLogger(BasicXMLDeployer.class); /** Unmarshaller factory */ private static final UnmarshallerFactory factory = UnmarshallerFactory.newInstance(); /** The resolver */ private static final SchemaBindingResolver resolver = SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver(); /** The deployments by url or name */ private Map deploymentsByName = CollectionsFactory.createConcurrentReaderMap(); /** * Create a new XML deployer * * @param kernel the kernel * @throws Throwable for any error */ public BasicXMLDeployer(Kernel kernel) throws Throwable { super(kernel); } public void deploy(KernelDeployment deployment) throws Throwable { super.deploy(deployment); deploymentsByName.put(deployment.getName(), deployment); } public void undeploy(KernelDeployment deployment) { deploymentsByName.remove(deployment.getName()); super.undeploy(deployment); } /** * Undeploy a url * * @param url the url to undeploy * @throws IllegalStateException if the url is unknown */ public void undeploy(final URL url) { if (url == null) throw new IllegalArgumentException("Null url"); undeploy(url.toString()); } /** * Undeploy a name deployment * * @param name the name of the deployment to undeploy * @throws IllegalStateException if the name is unknown */ public void undeploy(final String name) { if (name == null) throw new IllegalArgumentException("Null name"); KernelDeployment deployment = (KernelDeployment) deploymentsByName.remove(name); if (deployment == null) throw new IllegalStateException("Unknown deployment " + name); undeploy(deployment); } /** * Deploy a url * * @param url the url to deploy * @throws Throwable for any error */ public KernelDeployment deploy(final URL url) throws Throwable { final boolean trace = log.isTraceEnabled(); if (url == null) throw new IllegalArgumentException("Null url"); if (trace) log.trace("Parsing " + url); long start = System.currentTimeMillis(); Unmarshaller unmarshaller = factory.newUnmarshaller(); KernelDeployment deployment = (KernelDeployment) unmarshaller.unmarshal(url.toString(), resolver); if (deployment == null) throw new RuntimeException("The xml " + url + " is not well formed!"); deployment.setName(url.toString()); if (trace) { long now = System.currentTimeMillis(); log.trace("Parsing " + url + " took " + (now-start) + " milliseconds"); } deploy(deployment); if (trace) { long now = System.currentTimeMillis(); log.trace("Deploying " + url + " took " + (now-start) + " milliseconds"); } return deployment; } /** * Deploy a stream. We may be deploying XML fragments. * * @param deploymentName the deployment name * @param stream the stream */ public KernelDeployment deploy(String deploymentName, final InputStream stream) throws Throwable { boolean trace = log.isTraceEnabled(); if (trace) log.trace("Parsing " + deploymentName); Unmarshaller unmarshaller = factory.newUnmarshaller(); KernelDeployment deployment = (KernelDeployment) unmarshaller.unmarshal(stream, resolver); if (deployment == null) throw new RuntimeException("The deployment " + deploymentName + " is not well formed!"); deployment.setName(deploymentName); deploy(deployment); return deployment; } } |