/* * 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.tomcat.util.modeler.modules; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.modeler.ManagedBean; import org.apache.tomcat.util.modeler.Registry; public class MbeansDescriptorsSerSource extends ModelerSource { private static Log log = LogFactory.getLog(MbeansDescriptorsSerSource.class); Registry registry; String location; String type; Object source; List mbeans=new ArrayList(); public void setRegistry(Registry reg) { this.registry=reg; } public void setLocation( String loc ) { this.location=loc; } /** Used if a single component is loaded * * @param type */ public void setType( String type ) { this.type=type; } public void setSource( Object source ) { this.source=source; } public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { setRegistry(registry); setLocation(location); setType(type); setSource(source); execute(); return mbeans; } public void execute() throws Exception { if( registry==null ) registry=Registry.getRegistry(); long t1=System.currentTimeMillis(); try { InputStream stream=null; if( source instanceof URL ) { stream=((URL)source).openStream(); } if( source instanceof InputStream ) { stream=(InputStream)source; } if( stream==null ) { throw new Exception( "Can't process "+ source); } ObjectInputStream ois=new ObjectInputStream(stream); Thread.currentThread().setContextClassLoader(ManagedBean.class.getClassLoader()); Object obj=ois.readObject(); //log.info("Reading " + obj); ManagedBean beans[]=(ManagedBean[])obj; // after all are read without error for( int i=0; i<beans.length; i++ ) { mbeans.add(beans[i]); } } catch( Exception ex ) { log.error( "Error reading descriptors " + source + " " + ex.toString(), ex); throw ex; } long t2=System.currentTimeMillis(); log.info( "Reading descriptors ( ser ) " + (t2-t1)); } }