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.geronimo.tomcat.cluster;
018    
019    import java.util.Map;
020    
021    import org.apache.catalina.tribes.ChannelInterceptor;
022    import org.apache.catalina.tribes.membership.StaticMember;
023    import org.apache.commons.logging.Log;
024    import org.apache.commons.logging.LogFactory;
025    import org.apache.geronimo.gbean.GBeanInfo;
026    import org.apache.geronimo.gbean.GBeanInfoBuilder;
027    import org.apache.geronimo.gbean.GBeanLifecycle;
028    import org.apache.geronimo.tomcat.BaseGBean;
029    import org.apache.geronimo.tomcat.ObjectRetriever;
030    
031    /**
032     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
033     */
034    public class StaticMemberGBean extends BaseGBean implements
035            GBeanLifecycle, ObjectRetriever {
036    
037        private static final Log log = LogFactory.getLog(StaticMemberGBean.class);
038    
039        public static final String J2EE_TYPE = "StaticMember";
040    
041        private final StaticMember staticMember;
042        private final StaticMemberGBean nextStaticMember;
043    
044        public StaticMemberGBean() {
045            staticMember=null;
046            nextStaticMember=null;
047        }
048        
049        public StaticMemberGBean(String className, Map initParams, StaticMemberGBean nextStaticMember) throws Exception {
050    
051            super(); // TODO: make it an attribute
052    
053            // Validate
054            if (className == null) {
055                throw new IllegalArgumentException("Must have a 'className' attribute.");
056            }
057            
058            if (nextStaticMember != null) {
059                if (!(nextStaticMember.getInternalObject() instanceof StaticMember)){
060                    throw new IllegalArgumentException("nextStaticMember is not of type StaticMember.");                
061                }
062                this.nextStaticMember = nextStaticMember;
063            } else {
064                this.nextStaticMember = null;
065            }
066    
067            // Create the StaticMember object
068            staticMember = (StaticMember) Class.forName(className).newInstance();
069    
070            // Set the parameters
071            setParameters(staticMember, initParams);
072    
073        }
074    
075        public Object getInternalObject() {
076            return staticMember;
077        }
078        
079        public Object getNextStaticMember() {
080            return nextStaticMember;
081        }
082    
083        public void doFail() {
084            log.warn("Failed");
085        }
086    
087        public void doStart() throws Exception {
088            log.debug("Started StaticMember gbean.");
089        }
090    
091        public void doStop() throws Exception {
092            log.debug("Stopped StaticMember gbean.");
093        }
094    
095        public static final GBeanInfo GBEAN_INFO;
096    
097        static {
098            GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("StaticMember", StaticMemberGBean.class, J2EE_TYPE);
099            infoFactory.addAttribute("className", String.class, true);
100            infoFactory.addAttribute("initParams", Map.class, true);
101            infoFactory.addReference("NextStaticMember", StaticMemberGBean.class, J2EE_TYPE);
102            infoFactory.addOperation("getInternalObject", "Object");
103            infoFactory.addOperation("getNextStaticMember", "Object");
104            infoFactory.setConstructor(new String[] { "className", "initParams", "NextStaticMember"});
105            GBEAN_INFO = infoFactory.getBeanInfo();
106        }
107    
108        public static GBeanInfo getGBeanInfo() {
109            return GBEAN_INFO;
110        }
111    }