001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.modeler.modules; 018 019 import java.io.InputStream; 020 import java.io.ObjectInputStream; 021 import java.net.URL; 022 import java.util.ArrayList; 023 import java.util.List; 024 025 import org.apache.commons.logging.Log; 026 import org.apache.commons.logging.LogFactory; 027 import org.apache.commons.modeler.ManagedBean; 028 import org.apache.commons.modeler.Registry; 029 030 031 public class MbeansDescriptorsSerSource extends ModelerSource 032 { 033 private static Log log = LogFactory.getLog(MbeansDescriptorsSerSource.class); 034 Registry registry; 035 String location; 036 String type; 037 Object source; 038 List mbeans=new ArrayList(); 039 040 public void setRegistry(Registry reg) { 041 this.registry=reg; 042 } 043 044 public void setLocation( String loc ) { 045 this.location=loc; 046 } 047 048 /** Used if a single component is loaded 049 * 050 * @param type 051 */ 052 public void setType( String type ) { 053 this.type=type; 054 } 055 056 public void setSource( Object source ) { 057 this.source=source; 058 } 059 060 public List loadDescriptors( Registry registry, String location, 061 String type, Object source) 062 throws Exception 063 { 064 setRegistry(registry); 065 setLocation(location); 066 setType(type); 067 setSource(source); 068 execute(); 069 return mbeans; 070 } 071 072 public void execute() throws Exception { 073 if( registry==null ) registry=Registry.getRegistry(); 074 long t1=System.currentTimeMillis(); 075 try { 076 InputStream stream=null; 077 if( source instanceof URL ) { 078 stream=((URL)source).openStream(); 079 } 080 if( source instanceof InputStream ) { 081 stream=(InputStream)source; 082 } 083 if( stream==null ) { 084 throw new Exception( "Can't process "+ source); 085 } 086 ObjectInputStream ois=new ObjectInputStream(stream); 087 Thread.currentThread().setContextClassLoader(ManagedBean.class.getClassLoader()); 088 Object obj=ois.readObject(); 089 //log.info("Reading " + obj); 090 ManagedBean beans[]=(ManagedBean[])obj; 091 // after all are read without error 092 for( int i=0; i<beans.length; i++ ) { 093 mbeans.add(beans[i]); 094 } 095 096 } catch( Exception ex ) { 097 log.error( "Error reading descriptors " + source + " " + ex.toString(), 098 ex); 099 throw ex; 100 } 101 long t2=System.currentTimeMillis(); 102 log.info( "Reading descriptors ( ser ) " + (t2-t1)); 103 } 104 }