usar seguidores pueden poner pegar para los hashtags funcionan cuantos crear copiar conseguir como java profiling classloader jar

java - seguidores - hashtag para instagram copiar y pegar



¿Cómo explorar qué clases se cargan desde qué JARs? (5)

Al pasar el -verbose:class al comando java se imprimirá cada clase cargada y desde donde se cargó.

Joops es también una buena herramienta para encontrar clases faltantes con anticipación.

¿Hay alguna forma de determinar qué clases se cargan desde qué jar en el tiempo de ejecución?

Estoy seguro de que todos hemos estado en JAR hell antes. Me he encontrado con este problema mucho solucionando problemas de ClassNotFoundException y NoClassDefFoundError en proyectos. Me gustaría evitar encontrar todas las instancias de una clase en jarras y usar el proceso de eliminación en el código que hace que un CNFE encuentre al culpable.

¿Algún perfil o herramientas de gestión le dará este tipo de información?

Este problema es súper molesto simplemente porque deberíamos tener esta información en el momento en que se carga la clase. Tiene que haber una manera de obtenerlo, o grabarlo y encontrarlo, pero no conozco nada que haga esto, ¿verdad?

Sé que OSGi y los paquetes / módulos versionados pretenden que esto no sea un problema ... pero no parece que desaparezca pronto. :)

NOTA: Encontré que esta question es un subconjunto de mi pregunta relacionada con las clases cargadas de archivos con versión.

Actualización : algo relacionado, esta publicación explica una estrategia para buscar una clase dentro de los tarros (ya sea en el directorio actual) o en tu M2_REPO. JarScan, escanea todos los archivos JAR en todas las subcarpetas para una clase específica

Actualización 2 : También algo relacionado, JBoss Tattletale


Desde el código puede llamar:

myObject.getClass().getProtectionDomain().getCodeSource()

(Tenga en cuenta que getProtectionDomain puede devolver null (diseño defectuoso), por lo que el "código correcto" lo verificaría).


En WebSphere (WAS) puede usar una característica llamada "Visor de Class Loader"

Active primero el visor del cargador de clases haciendo clic en Servidores> Tipos de servidores> Servidores de aplicaciones WebSphere> nombre_servidor> Servicio del visor del cargador de clases, habilite el servicio y reinicie el servidor.

Luego puede ir a Solución de problemas> Visor de Class Loader y buscar el nombre de su clase o paquete.

https://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/ttrb_classload_viewer.html?lang=en


Hay un MBean para la bandera JVM mencionado por Jason Day arriba.

Si está utilizando JBoss, puede juntar esto bajo demanda utilizando JMX, si agrega el servidor JMX MBean nativo a su configuración. Agregue las siguientes -D''s:

-Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djboss.platform.mbeanserver -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl -DJBOSS_CLASSPATH="../lib/jboss-system-jmx.jar"

Y luego puede ver esta configuración bajo java.lang: Classloading MBean y puede cortarlo on / off sobre la marcha. Esto es útil si solo lo quiere mientras ejecuta cierto código.

También hay un MBean que le permitirá ingresar un nombre de clase completo y ver de dónde se cargó en la jerarquía de clases. El MBean se llama LoaderRepository y querrá invocar la operación displayClassInfo (), pasando el FQCN.


Puede exportar fácilmente una operación JMX para acceder a la información del paquete para cualquier clase cargada en su proceso como:

public static final class Jmx { @JmxExport public static Reflections.PackageInfo getPackageInfo(@JmxExport("className") final String className) { return Reflections.getPackageInfo(className); } }

y aquí hay una prueba de unidad simple para exportar e invocarlo:

@Test public void testClassLocator() throws IOException, InstanceNotFoundException, MBeanException, ReflectionException { Registry.export(Jmx.class); Reflections.PackageInfo info = (Reflections.PackageInfo) Client.callOperation( "service:jmx:rmi:///jndi/rmi://:9999/jmxrmi", Jmx.class.getPackage().getName(), Jmx.class.getSimpleName(), "getPackageInfo", Registry.class.getName()); System.out.println(info); Assert.assertNotNull(info); }

todo esto se basa en el uso de una pequeña biblioteca de utilidades de spf4j ( http://www.spf4j.org )

Puedes ver este código at y la prueba at