KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > jmx > adaptor > snmp > trapd > TrapdService


1 /*
2  * Copyright (c) 2003, Intracom S.A. - www.intracom.com
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * This package and its source code is available at www.jboss.org
19 **/

20 package org.jboss.jmx.adaptor.snmp.trapd;
21
22 import java.net.InetAddress JavaDoc;
23 import java.net.UnknownHostException JavaDoc;
24
25 import org.jboss.system.ServiceMBeanSupport;
26 import org.jboss.system.server.ServerConfig;
27 import org.opennms.protocols.snmp.SnmpTrapSession;
28
29 /**
30  * MBean wrapper class that acts as an SNMP trap receiver/logger.
31  * It logs traps as INFO messages - change log4j configuration to
32  * redirect logging output. To reconfigure the listening port
33  * the MBean needs to be stopped and re-started.
34  *
35  * @jmx:mbean
36  * extends="org.jboss.system.ServiceMBean"
37  *
38  * @version $Revision: 23955 $
39  *
40  * @author <a HREF="mailto:spol@intracom.gr">Spyros Pollatos</a>
41  * @author <a HREF="mailto:dimitris@jboss.org">Dimitris Andreadis</a>
42 **/

43 public class TrapdService
44    extends ServiceMBeanSupport
45    implements TrapdServiceMBean
46 {
47    /** The listening port */
48    private int port;
49
50    /** The interface to bind, useful for multi-homed hosts */
51    private InetAddress JavaDoc bindAddress;
52    
53    /** The snmp session used to receive the traps*/
54    protected SnmpTrapSession trapSession;
55     
56    /**
57     * Empty CTOR
58    **/

59    public TrapdService()
60    {
61        // empty
62
}
63         
64    /**
65     * Sets the port that will be used to receive traps
66     *
67     * @param port the port to listen for traps
68     *
69     * @jmx:managed-attribute
70    **/

71    public void setPort(int port)
72    {
73       this.port = port;
74    }
75
76    /**
77     * Gets the port that will be used to receive traps
78     *
79     * @return the port to listen for traps
80     *
81     * @jmx:managed-attribute
82    **/

83    public int getPort()
84    {
85       return this.port;
86    }
87
88    /**
89     * Sets the interface that will be bound
90     *
91     * @param host the interface to bind
92     *
93     * @jmx:managed-attribute
94    **/

95    public void setBindAddress(String JavaDoc host)
96       throws UnknownHostException JavaDoc
97    {
98       this.bindAddress = toInetAddress(host);
99    }
100
101    /**
102     * Gets the interface that will be bound
103     *
104     * @return the interface to bind
105     *
106     * @jmx:managed-attribute
107    **/

108    public String JavaDoc getBindAddress()
109    {
110       String JavaDoc address = null;
111       
112       if (this.bindAddress != null)
113          address = this.bindAddress.getHostAddress();
114       
115       return address;
116    }
117    
118    /**
119     * Performs service start-up by instantiating an SnmpTrapSession
120    **/

121    protected void startService()
122       throws Exception JavaDoc
123    {
124       // Create the SNMP trap receiving session with the logging handler,
125
// using Logger inherited from ServiceMBeanSupport
126
try {
127          // cater for possible global -b option, if no override has been specified
128
InetAddress JavaDoc address = this.bindAddress != null ? this.bindAddress :
129                toInetAddress(System.getProperty(ServerConfig.SERVER_BIND_ADDRESS));
130          
131          this.trapSession =
132             new SnmpTrapSession(new TrapReceiver(this.log), this.port, address);
133       }
134       catch (Exception JavaDoc e) {
135          log.error("Cannot instantiate trap session");
136             
137          throw e; // ServiceMBeanSupport will log this
138
}
139    }
140     
141    /**
142     * Performs service shutdown by stopping SnmpTrapSession
143    **/

144    protected void stopService()
145       throws Exception JavaDoc
146    {
147       this.trapSession.close();
148       this.trapSession = null; // gc
149
}
150    
151    /**
152     * Safely convert a host string to InetAddress or null
153     */

154    private InetAddress JavaDoc toInetAddress(String JavaDoc host)
155       throws UnknownHostException JavaDoc
156    {
157       if (host == null || host.length() == 0)
158          return null;
159       else
160          return InetAddress.getByName(host);
161    }
162     
163 } // class TrapdService
164
Popular Tags