📄 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 + -