Вопросы по примеру JMX - PullRequest
       12

Вопросы по примеру JMX

2 голосов
/ 14 февраля 2012

Я написал образец JMX MBean "PoolMBean" , основанный на моем понимании MBeans.Я написал это, чтобы управлять и контролировать пул соединений.Мой вопрос здесь, это так, как пишут Mbeans?Есть ли какие-либо проблемы в этом коде Mbean, не относящиеся к пулу соединений?

1) Какие типы объектов может возвращать метод Mbean?

 package pool;

    import java.util.Date;

    public class Connection {

        public Date createdAt;
        protected int usedCount;
        protected boolean isAvailable = true;

        public Connection newConnection(){
            Connection con= null;
            /**
             * Code for creating Connection
             */
             return con;
        }

        public void writeDate(){

            /**
             * Code to write data in the stream
             */
            usedCount++;        
        }   


    }

package pool;

import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.LinkedList;

import javax.management.MBeanServer;
import javax.management.ObjectName;

public class ConnectionPool {
    public static int maxPoolSize = 20;
    public int currentPoolSize = 10;
    public LinkedList<Connection> totalPool = new LinkedList<Connection>();
    public LinkedList<Connection> availablePool = new LinkedList<Connection>();
    public static ConnectionPool cp = new ConnectionPool();
    private ConnectionPool(){

    }

    public synchronized Connection getConnection(){
        Connection con = null;
        /**
         * 
         */
        availablePool.remove(con);
        con.isAvailable = false;
        return con;
    }

    public synchronized void returnConnection(Connection con){

        /**
         * 
         */
        availablePool.addFirst(con);
        con.isAvailable = true;     
    }

    public static void main(String a[]){
        try{
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        Pool mbean = new Pool();
        ObjectName name = new ObjectName("test.conMbean:key1=Pool");
        server.registerMBean(mbean, name);
        System.out.println("Let me see out put");
        System.in.read();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

}

package pool;


public interface PoolMBean {

    public int getCurrentPoolSize();

    public int getMaxPoolSize();

    public void setMaxPoolSize(int maxSize);    

}

package pool;


public class Pool implements PoolMBean {

    @Override
    public int getCurrentPoolSize() {

        return ConnectionPool.cp.currentPoolSize;
    }

    @Override
    public int getMaxPoolSize() {   
        return ConnectionPool.maxPoolSize;
    }

    @Override
    public void setMaxPoolSize(int maxSize) {
        ConnectionPool.maxPoolSize = maxSize;   
    }


}

Добавлено это на основе ответа "yazan jber", предоставленного ниже.

1)Какие типы объектов может возвращать метод Mbean?Например, если PoolMBean имеет getStatistics(), который возвращает объект totalPool LinkedList.В этом случае в JConsole отображается значение Unavailable, но когда я попытался с HashMap с String объектами, это сработало?Так что JConsole не может прочитать все, что он может прочитать, это мой вопрос здесь

Я прошел через Oracle MXBean API аннотаций doc , описание здесь немного сложное.Я получил по этой ссылке: OpenType,ArrayType, CompositeType, SimpleType и TabularType, эти сделки только с

  • java.lang.Void,
  • java.lang.Boolean,
  • java.lang.Character,
  • java.lang.Byte,
  • java.lang.Short,
  • java.lang.Integer,
  • java.lang.Long,
  • java.lang.Float,
  • java.lang.Double,
  • java.lang.String,
  • java.math.BigDecimal,
  • java.math.BigInteger,
  • java.util.Date,
  • javax.management.ObjectName,
  • CompositeData.class.getName(),
  • TabularData.class.getName()

этиобъекты.MBean должен возвращать любой из этих OpenType.

Если мы хотим вернуть любой другой тип, который новый тип должен реализовывать CompositeData интерфейсом, я не очень понял, как эта реализация поможет Jconsoleчитать открытые объекты, это еще один сложный вопрос?

Для отслеживания отдельных компонентов в моем приложении у нас должны быть свои собственные MBeans?Если мое понимание верно, я могу использовать простой класс Java для этой цели, дополнительное преимущество, которое я получаю здесь, - это интерфейс JConsole, не так ли?

Ответы [ 3 ]

1 голос
/ 19 февраля 2012

Ваш CompositeData будет иметь метод для возврата CompositeType.Тип определяет имена атрибутов (ключей) вашего CompositeData.JConsole и другие клиенты JMX могут использовать эти ключи для доступа к данным из CompositeData.

1 голос
/ 09 ноября 2013

Возможно, уже слишком поздно ответить на этот вопрос - однако я хотел сделать снимок, учитывая, что в настоящее время изучаю JMX.

Ответы на вопросы:

  1. Да,опубликованный код, по-моему, является правильным способом написания MBeans в приложении.
  2. Рекомендуется иметь пользовательские MBean-компоненты для управления ресурсами, предоставляемыми приложением.Какие ресурсы требуют управления, как правило, решение времени разработки.Однако из того, что я понимаю;Мы хотели бы управлять ресурсами, которые будут влиять на производительность и стабильность системы и, следовательно, хотели бы администрировать.Хорошим примером могут служить связанные классы Apache Solr , которые реализуют интерфейс управления SoltInfoMBean , так что этими объектами можно управлять из консоли администрирования Solr.
  3. Пока выможет иметь собственную реализацию для отслеживания отдельных компонентов системы, преимущество использования MBeans для отслеживания не ограничивается только поддержкой jConsole ** UI.Используя стандартные интерфейсы JMX, вы предоставляете такие средства, как готовые возможности управления, с любыми приложениями управления, что соответствует спецификации JMX.Кроме того, он будет поддерживать управление различными протоколами связи, такими как RMI, SNMP и т. Д., Без консоли управления, а управляемые приложения будут беспокоиться о мелочах базового протокола. Эта страница предоставляет хороший набор причин для использования интерфейсов JMX для добавления возможностей мониторинга в ваше приложение.

Надеюсь, это поможет.

0 голосов
/ 16 февраля 2012

Я не запускал код, но он выглядит нормально, вы можете вернуть любой сериализуемый объект, если клиент JMX является Java и имеет доступ к тому же сериализуемому классу, см. Эту ссылку

...