Неподдерживаемый протокол: исключение t3 при попытке получить количество потоков в weblogic

#java #weblogic #rmi #jmx

#java #weblogic #rmi #jmx

Вопрос:

Я использую JMX для получения количества потоков в Weblogic, но возникает ошибка. Это мой код:

 import java.util.Hashtable;
import javax.management.MBeanServer;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;

public class JMXClient {
         private static MBeanServerConnection connection;
         private static JMXConnector connector;
         private static ObjectName service;
    //Update correct port
    private static String port = "7001";
    //Update localhost if server is accessed remotely   
        private static String url = "t3://localhost:7001";
    // Update hostname if server is accessed remotely
        private static String hostname = "localhost";

        private static String username = "weblogic";
         private static String password = "12345678";
    // server name can differ from host name
    private static String serverName = "AdminServer";
         /*
         * Initialize connection to the Runtime MBean Server
         */
        private static void init() throws IOException, MalformedURLException {
            String protocol = "t3";
            Integer portInteger = Integer.valueOf(port);
            int port = portInteger.intValue();
            String jndiroot = "/jndi/";
            String mserver = "weblogic.management.mbeanservers.runtime";
            //JMXServiceURL serviceURL = new JMXServiceURL(url);
            JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot   mserver);
            Hashtable env = new Hashtable();
            env.put(Context.SECURITY_PRINCIPAL, username);
            env.put(Context.SECURITY_CREDENTIALS, password);
            env.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.runtime.JRockitRuntimeMBean");
            connector = JMXConnectorFactory.connect(serviceURL, env);
            connection = connector.getMBeanServerConnection();
             try {
                             service = new ObjectName("com.bea:Name=" serverName   ",Type=ServerRuntime");
        } catch (MalformedObjectNameException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }       
        public static void getTotalNumberOfThreads() {
            try {
                init();
                Long totalNumberOfThreads = (Long) connection.getAttribute(service,"TotalNumberOfThreads");
                System.out.println("totalNumberOfThreads is: "   totalNumberOfThreads);
                connection.invoke(service, "start", new Object[] {}, new String[] {});
            } catch(Exception e) {
                e.printStackTrace();
            }
        }             
        public static void main(String[] args) {
        // Invoke required methods
                   JMXClient.getTotalNumberOfThreads();
            }
}
 

Ошибка :

 java.net.MalformedURLException: Unsupported protocol: t3
at javax.management.remote.JMXConnectorFactory.newJMXConnector(Unknown Source)
at javax.management.remote.JMXConnectorFactory.connect(Unknown Source)
 

Я не знаю, почему это происходит.
Когда я использую weblogic.management.remote для получения состояния сервера приложений, все в порядке, но для количества потоков он не отвечает.

Комментарии:

1. Я думаю, что это может быть просто проблемой пути к классу. Убедитесь, что у вас есть оба wljmxclient.jar и wlclient.jar на вашем пути к классу

2. @рокировка Я добавил эти две банки, но исключение все еще работает

Ответ №1:

Я поместил все эти пять jar в classpath, чтобы решить аналогичную проблему:

     <include name="wlclient.jar" />
    <include name="wljmsclient.jar" />
    <include name="wls-api.jar"/>
    <include name="wljmxclient.jar"/>
    <include name="wlconnector.jar"/>
 

Комментарии:

1. На самом деле, если вы добавите wljmxclient только, это сработает.

Ответ №2:

На самом деле вам нужны только следующие банки: Oracle_Homewlserverserverlibwljmxclient.jar Oracle_Homewlserverserverlibweblogic.jar

это работает со мной против поставщика по умолчанию и sql.

Ответ №3:

Я столкнулся с той же проблемой в WLS12.2.1.3, исправленной после добавления только /wlserver/server/lib/wlthint3client.jar файл в библиотеки.