001 /** 002 * 003 * Copyright 2003-2005 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * 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.geronimo.tomcat; 018 019 import java.util.ArrayList; 020 import java.util.Iterator; 021 import java.util.Map; 022 import org.apache.catalina.Cluster; 023 import org.apache.catalina.Host; 024 import org.apache.catalina.Manager; 025 import org.apache.catalina.Realm; 026 import org.apache.catalina.Valve; 027 import org.apache.catalina.core.StandardHost; 028 import org.apache.commons.logging.Log; 029 import org.apache.commons.logging.LogFactory; 030 import org.apache.geronimo.gbean.GBeanInfo; 031 import org.apache.geronimo.gbean.GBeanInfoBuilder; 032 import org.apache.geronimo.gbean.GBeanLifecycle; 033 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 034 import org.apache.geronimo.tomcat.cluster.CatalinaClusterGBean; 035 036 /** 037 * @version $Rev: 357408 $ $Date: 2005-12-17 16:20:34 -0800 (Sat, 17 Dec 2005) $ 038 */ 039 public class HostGBean extends BaseGBean implements GBeanLifecycle, ObjectRetriever { 040 041 private static final Log log = LogFactory.getLog(HostGBean.class); 042 043 public static final String J2EE_TYPE = "Host"; 044 private static final String WORKDIR = "workDir"; 045 private static final String NAME = "name"; 046 047 private final Host host; 048 049 public HostGBean(){ 050 host = null; 051 } 052 053 public HostGBean(String className, 054 Map initParams, 055 ArrayList aliases, 056 ObjectRetriever realmGBean, 057 ValveGBean tomcatValveChain, 058 CatalinaClusterGBean clusterGBean, 059 ManagerGBean manager) throws Exception { 060 super(); // TODO: make it an attribute 061 062 //Validate 063 if (className == null){ 064 className = "org.apache.catalina.core.StandardHost"; 065 } 066 067 if (initParams == null){ 068 throw new IllegalArgumentException("Must have a 'name' value in initParams."); 069 } 070 071 //Be sure the name has been declared. 072 if (!initParams.containsKey(NAME)){ 073 throw new IllegalArgumentException("Must have a 'name' value initParams."); 074 } 075 076 //Be sure we have a default working directory 077 if (!initParams.containsKey(WORKDIR)){ 078 initParams.put(WORKDIR, "work"); 079 } 080 081 //Create the Host object 082 host = (Host)Class.forName(className).newInstance(); 083 084 //Set the parameters 085 setParameters(host, initParams); 086 087 //Add aliases, if any 088 if (aliases != null){ 089 for (Iterator iter = aliases.iterator(); iter.hasNext();) { 090 String alias = (String) iter.next(); 091 host.addAlias(alias); 092 } 093 } 094 095 if (realmGBean != null) 096 host.setRealm((Realm)realmGBean.getInternalObject()); 097 098 //Add the valve list 099 if (host instanceof StandardHost){ 100 if (tomcatValveChain != null){ 101 ValveGBean valveGBean = tomcatValveChain; 102 while(valveGBean != null){ 103 ((StandardHost)host).addValve((Valve)valveGBean.getInternalObject()); 104 valveGBean = valveGBean.getNextValve(); 105 } 106 } 107 } 108 109 //Add clustering 110 if (clusterGBean != null){ 111 host.setCluster((Cluster)clusterGBean.getInternalObject()); 112 } 113 114 //Add manager 115 if (manager != null) 116 host.setManager((Manager)manager.getInternalObject()); 117 } 118 119 public Object getInternalObject() { 120 return host; 121 } 122 123 public void doFail() { 124 log.warn("Failed"); 125 } 126 127 public void doStart() throws Exception { 128 log.debug("Started host name '" + host.getName() + "'"); 129 } 130 131 public void doStop() throws Exception { 132 log.debug("Stopped host '" + host.getName() + "'"); 133 } 134 135 public static final GBeanInfo GBEAN_INFO; 136 137 static { 138 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("TomcatHost", HostGBean.class, J2EE_TYPE); 139 infoFactory.addAttribute("className", String.class, true); 140 infoFactory.addAttribute("initParams", Map.class, true); 141 infoFactory.addAttribute("aliases", ArrayList.class, true); 142 infoFactory.addReference("RealmGBean", ObjectRetriever.class, NameFactory.GERONIMO_SERVICE); 143 infoFactory.addReference("TomcatValveChain", ValveGBean.class, ValveGBean.J2EE_TYPE); 144 infoFactory.addReference("CatalinaCluster", CatalinaClusterGBean.class, CatalinaClusterGBean.J2EE_TYPE); 145 infoFactory.addReference("Manager", ManagerGBean.class, ManagerGBean.J2EE_TYPE); 146 infoFactory.addOperation("getInternalObject"); 147 infoFactory.setConstructor(new String[] { 148 "className", 149 "initParams", 150 "aliases", 151 "RealmGBean", 152 "TomcatValveChain", 153 "CatalinaCluster", 154 "Manager"}); 155 GBEAN_INFO = infoFactory.getBeanInfo(); 156 } 157 158 public static GBeanInfo getGBeanInfo() { 159 return GBEAN_INFO; 160 } 161 }