получить доступ к Mbeans на weblogic - PullRequest
2 голосов
/ 11 января 2012

Из документации oracle:

Сервер MBean среды выполнения домена: этот сервер MBean также выступает в качестве единой точки доступа для MBean-компонентов, находящихся на управляемых серверах.

я хочу использовать этот факт для доступа ко всем моим пользовательским mBeans, расположенным на нескольких управляемых серверах.например предположим, что у меня есть два узла server-1 server-2.Как я могу получить доступ ко всем настраиваемым mBeans на обоих серверах-1, сервер-2, подключившись к узлу администратора?

Я не хочу иметь удаленный доступ к каждому узлу для получения результата. Мне нужна единая точка входа, которой я управлялчтобы получить имена серверов, состояния и другую информацию, выполните это

    JMXConnector connector;
            ObjectName service;
            MBeanServerConnection connection;
            String protocol = "t3"; 
        Integer portInteger = Integer.valueOf(<admin server port>);

      int port = portInteger.intValue();
      String jndiroot = "/jndi/";
      String mserver = "weblogic.management.mbeanservers.runtime"; 

      JMXServiceURL serviceURL = new JMXServiceURL(protocol, "<serverName>", port,
      jndiroot + mserver);  

      Hashtable h = new Hashtable();
      h.put(Context.SECURITY_PRINCIPAL, "weblogic");
      h.put(Context.SECURITY_CREDENTIALS, "weblogicpass");
      h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
         "weblogic.management.remote");
      h.put("jmx.remote.x.request.waiting.timeout", new Long(10000));
      connector = JMXConnectorFactory.connect(serviceURL, h);
      connection = connector.getMBeanServerConnection();  service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
      ObjectName[] ons = (ObjectName[]) connection.getAttribute(service, "ServerRuntimes");
       int length = (int) ons.length;

      for (int i = 0; i < length; i++) {
         String name = (String) connection.getAttribute(ons[i],
            "Name");
         String state = (String) connection.getAttribute(ons[i],
            "State");
          String internalPort = (String) connection.getAttribute(ons[i],"ListenPort");
         System.out.println("Server name: " + name + ".   Server state: "
            + state);

, но мне нужно получить доступ к пользовательским Mbeans, созданным на каждом сервере, а не только к информации

1 Ответ

1 голос
/ 12 января 2012

возможно, мой вопрос не был ясен, но я нашел ответ, и я поделюсь им здесь и сейчас: Резюме вопроса: мне нужно получить доступ к пользовательским mBeans на управляемом сервере, подключившись к серверу администрирования из клиентского приложения.

Ответ: для этого необходимо развернуть приложение на сервере администратора (я пробовал удаленно, но это не сработало)

вам необходимо подключиться к DomainRuntimeServiceMBean, поскольку он предоставляет общую точку доступа для навигации по всем MBean-компонентам времени выполнения и конфигурации в домене.

при поиске по имени объекта добавьте Location =

вот код:

    Hashtable props = new Hashtable();
          props.put(Context.INITIAL_CONTEXT_FACTORY,
                    "weblogic.jndi.WLInitialContextFactory");

          props.put(Context.SECURITY_PRINCIPAL,   "<userName>");
          props.put(Context.SECURITY_CREDENTIALS, "<password>");
          Context ctx = new InitialContext(props);
  MBeanServer    server = (MBeanServer)ctx.lookup("java:comp/env/jmx/domainRuntime");


         ObjectName on =new ObjectName("com.<companyName>:Name=<Name>,Type=<Type>,Location=<managed_server_name>");
         boolean boolresult=(Boolean)server.invoke(on, "<method_Name>",
         new Object[]{"<ARG1>","<ARG2>","<ARG3>"}
         ,new String[]{"java.lang.String","java.lang.String","java.lang.String"}); 
         out.print(boolresult);
...