View Javadoc

1   /*
2    * EL4J, the Extension Library for the J2EE, adds incremental enhancements to
3    * the spring framework, http://el4j.sf.net
4    * Copyright (C) 2009 by ELCA Informatique SA, Av. de la Harpe 22-24,
5    * 1000 Lausanne, Switzerland, http://www.elca.ch
6    *
7    * EL4J is published under the GNU Lesser General Public License (LGPL)
8    * Version 2.1. See http://www.gnu.org/licenses/
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU Lesser General Public License for more details.
14   *
15   * For alternative licensing, please contact info@elca.ch
16   */
17  package ch.elca.el4j.util.socketstatistics;
18  
19  import java.lang.management.ManagementFactory;
20  import java.net.SocketImpl;
21  import java.net.SocketImplFactory;
22  
23  import javax.management.InstanceAlreadyExistsException;
24  import javax.management.MBeanRegistrationException;
25  import javax.management.MBeanServer;
26  import javax.management.MalformedObjectNameException;
27  import javax.management.NotCompliantMBeanException;
28  import javax.management.ObjectName;
29  
30  import ch.elca.el4j.util.socketstatistics.genericlogger.GenericLogFactory;
31  import ch.elca.el4j.util.socketstatistics.genericlogger.GenericLogger;
32  
33  /**
34   * Implementation of SocketImplFactory for the creation of SocketImplLogger.
35   *
36   * @svnLink $Revision: 3929 $;$Date: 2009-09-25 16:38:41 +0200 (Fr, 25. Sep 2009) $;$Author: jonasha $;$URL: https://el4j.svn.sourceforge.net/svnroot/el4j/branches/el4j_3_1/el4j/framework/modules/socketstatistics/src/main/java/ch/elca/el4j/util/socketstatistics/LoggerSocketFactory.java $
37   *
38   * @author Jonas Hauenstein (JHN)
39   */
40  public class LoggerSocketFactory implements SocketImplFactory {
41  
42  	/**
43  	 * Reference to SocketStatistics.
44  	 */
45  	private static SocketStatistics s_ss = null;
46  
47  	/**
48  	 * Generic Logger.
49  	 */
50  	private final GenericLogger m_logger = GenericLogFactory.getLogger(SocketStatistics.class);
51  
52  	/**
53  	 * Modified version which also registers the corresponding MXbean (SocketStatisticsMXBean) on the MBeanServer.
54  	 * {@inheritDoc}
55  	 */
56  	@Override
57  	public SocketImpl createSocketImpl() {
58  		if (s_ss == null) {
59  			s_ss = new SocketStatistics();
60  			MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
61  			try {
62  				ObjectName name = new ObjectName("ch.elca.el4j.util.socketStatistics:type=SocketStatistics");
63  				if (!mbs.isRegistered(name)) {
64  					mbs.registerMBean(s_ss, name);
65  					m_logger.log("info", "MXBean SocketStatisticsMXBean successfully registered on MBeanServer");
66  				}
67  			} catch (MalformedObjectNameException e) {
68  				m_logger.log("info",
69  					"Failed to register MXBean SocketStatisticsMXBean on MBeanServer (MalformedObjectNameException)");
70  			} catch (NullPointerException e) {
71  				m_logger.log("info",
72  					"Failed to register MXBean SocketStatisticsMXBean on MBeanServer (NullPointerException)");
73  			} catch (InstanceAlreadyExistsException e) {
74  				m_logger.log("info",
75  					"Failed to register MXBean SocketStatisticsMXBean on MBeanServer (MBean already registered)");
76  			} catch (MBeanRegistrationException e) {
77  				m_logger.log("info",
78  					"Failed to register MXBean SocketStatisticsMXBean on MBeanServer (MBeanRegistrationException)");
79  			} catch (NotCompliantMBeanException e) {
80  				m_logger.log("info",
81  					"Failed to register MXBean SocketStatisticsMXBean on MBeanServer (NotCompliantMBeanException)");
82  			}
83  
84  		}
85  		return new SocketImplLogger();
86  	}
87  
88  }