⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmx.java

📁 最近使用的java 通过串口通迅设备(手机或gsm猫)发送短信息的源码
💻 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 + -