📄 jmx.java
字号:
// SMSLib for Java v3// A Java API library for sending and receiving SMS via a GSM modem// or other supported gateways.// Web Site: http://www.smslib.org//// Copyright (C) 2002-2008, Thanasis Delenikas, Athens/GREECE.// SMSLib is distributed under the terms of the Apache License version 2.0//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.package org.smslib.smsserver.interfaces;import java.lang.management.ManagementFactory;import java.rmi.registry.LocateRegistry;import java.util.List;import java.util.Properties;import java.util.Vector;import javax.management.MBeanServer;import javax.management.ObjectName;import javax.management.remote.JMXConnectorServer;import javax.management.remote.JMXConnectorServerFactory;import javax.management.remote.JMXServiceURL;import org.smslib.OutboundMessage;import org.smslib.Service;import org.smslib.smsserver.AGateway;import org.smslib.smsserver.AInterface;import org.smslib.smsserver.InterfaceTypes;import org.smslib.smsserver.SMSServer;/** * This interface uses JMX for inbound/outbound communication. <br /> * The other end of the jmx communication can add new outbound messages and ask * for inbound messages. Additional, there are some statistic methods for * service inspection. * * @author Sebastian Just */public class Jmx extends AInterface{ /** Interface for JMX connection */ public interface SMSServerMethodsMBean { /** * Spools the given message and sends it on the next run. * * @param msg * The message to send */ public void addOutboundMessage(OutboundMessage msg); /** * Sppols the given messages and send them on the next run. * * @param msgs * The messgaes to send */ public void addOutboundMessage(List msgs); /** * Get all inbound messages since the last call of this method. <br /> * The inbound message spool is deleted after this call! * * @return All new inbound messages */ public List getInboundMessages(); /** * Get all marked outbound messages since the last call of this method. * <br /> * The message spool is deleted after this call! * * @return List of outbound messaages */ public List getMarkedOutboundMessages(); /** * Returns the gateway queue load. * * @see Service#getGatewayQueueLoad() * @return The number of pending messages to be send. */ public int getGatewayQueueLoad(); /** * Returns the inbound message count. * * @see Service#getInboundMessageCount() * @return The number of received messages. */ public int getInboundMessageCount(); /** * Returns the outbound message count. * * @see Service#getOutboundMessageCount() * @return The number of sent messages. */ public int getOutboundMessageCount(); } /** Logic for JMX */ public class SMSServerMethods implements SMSServerMethodsMBean { /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#addOutboundMessage(org.smslib.OutboundMessage) */ public void addOutboundMessage(OutboundMessage msg) { synchronized (outboundMessages) { outboundMessages.add(msg); } } /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#addOutboundMessage(java.util.List) */ public void addOutboundMessage(List msgs) { synchronized (outboundMessages) { outboundMessages.addAll(msgs); } } /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#getInboundMessages() */ public List getInboundMessages() { synchronized (inboundMessages) { List retValue = new Vector(); retValue.addAll(inboundMessages); inboundMessages.clear(); return retValue; } } /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#getMarkedOutboundMessages() */ public List getMarkedOutboundMessages() { synchronized (markedOutboundMessages) { List retValue = new Vector(); retValue.addAll(markedOutboundMessages); markedOutboundMessages.clear(); return retValue; } } /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#getGatewayQueueLoad() */ public int getGatewayQueueLoad() { return server.srv.getGatewayQueueLoad(); } /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#getInboundMessageCount() */ public int getInboundMessageCount() { return server.srv.getInboundMessageCount(); } /* (non-Javadoc) * @see org.smslib.smsserver.interfaces.Jmx.SMSServerMethodsMBean#getOutboundMessageCount() */ public int getOutboundMessageCount() { return server.srv.getOutboundMessageCount(); } } /** Local JMX server */ private MBeanServer mbs; /** JMX endpoint */ private SMSServerMethods ssm; /** Glue between JMX and the managed bean */ private ObjectName obn; /** Outbound message spool */ private List outboundMessages; /** Inbound message spool */ private List inboundMessages; /** Spool for marked outbound messages */ private List markedOutboundMessages; /** * Creates this interface and initalize the message spools. * * @see AGateway#AGateway(String, Properties, SMSServer) */ public Jmx(String infId, Properties props, SMSServer server, InterfaceTypes type) { super(infId, props, server, type); description = "JMX based interface."; ssm = new SMSServerMethods(); outboundMessages = new Vector(); inboundMessages = new Vector(); markedOutboundMessages = new Vector(); } public void CallReceived(String gtwId, String callerId) { // This interface does not handle inbound calls. } /* (non-Javadoc) * @see org.smslib.smsserver.AInterface#MessagesReceived(java.util.List) */ public void MessagesReceived(List msgList) throws Exception { synchronized (inboundMessages) { inboundMessages.addAll(msgList); } } /* (non-Javadoc) * @see org.smslib.smsserver.AInterface#getMessagesToSend() */ public List getMessagesToSend() throws Exception { synchronized (outboundMessages) { List retValue = new Vector(); retValue.addAll(outboundMessages); outboundMessages.clear(); return retValue; } } /* (non-Javadoc) * @see org.smslib.smsserver.AInterface#markMessage(org.smslib.OutboundMessage) */ public void markMessage(OutboundMessage msg) throws Exception { synchronized (markedOutboundMessages) { markedOutboundMessages.add(msg); } } /* (non-Javadoc) * @see org.smslib.smsserver.AInterface#start() */ public void start() throws Exception { LocateRegistry.createRegistry(Integer.parseInt(getProperty("registry_port"))); // Get the platform MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); JMXServiceURL url = new JMXServiceURL(getProperty("url")); JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); connectorServer.start(); obn = new ObjectName(getProperty("object_name")); // Uniquely identify the MBeans and register them with the platform mbs.registerMBean(ssm, obn); server.srv.getLogger().info("Bound JMX to " + url); } /* (non-Javadoc) * @see org.smslib.smsserver.AInterface#stop() */ public void stop() throws Exception { if (mbs != null) { mbs.unregisterMBean(obn); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -