Programación General => Java => Mensaje iniciado por: laura_mg en Jueves 31 de Enero de 2008, 10:55
Título: Duda Con Classloader
Publicado por: laura_mg en Jueves 31 de Enero de 2008, 10:55
Hola, mi duda es la siguiente:
Tengo que hacer una aplicación en la que hay que realizar una carga de clases en tiempo de ejecución, de tal forma que tenga un comportamiento "Modular". Es decir, que en función de determinados parámetros se tendrá que cargar un módulo u otro y, si alguno de estos módulos cambia (es necesario cambiar el contenido de alguna clase) sólo sea necesario compilar este módulo y no la aplicación entera y no haya que volverla a instalar.
He estado mirando y he visto que hay un ClassLoader pero no se ni cómo funciona ni siquiera si es lo que necesito.
Además, estos módulos son ficheros que estarán en un directorio diferente al de la aplicación.
Lo que me gustaría saber es si lo que pretendo es posible y en caso de que lo sea, cómo lo podría hacer.
Agradecería cualquier ayuda. Muchas gracias de antemano.
Título: Re: Duda Con Classloader
Publicado por: JuanK en Jueves 31 de Enero de 2008, 14:06
con solo cambiar la clase compilada es suficiente. no necesitas hacer nada como carga de clases en tiempo de ejecucion, salvo que tu no sepas cuales seran las clases a cargar.
Título: Re: Duda Con Classloader
Publicado por: laura_mg en Jueves 31 de Enero de 2008, 18:19
Pero si tienes la clase en el mismo jar que toda la aplicación, te tocaría volver a hacer el jar completo. NO??
Para que sólo tengas que compilar la clase que modifiques, tendrá q estar en otro jar diferente. Hay que hacer algo para que la aplicación encuentre la clase y no de error de carga xq no la encuentre??
Gracias
Título: Re: Duda Con Classloader
Publicado por: khrono en Jueves 31 de Enero de 2008, 18:43
Código: Text
Class t = Class.forName("with.packgage.class.MyClass");
esto carga la clase a memoria , Java busca la clase en le classpath asi que puede estar fuera de un jar , o en otro jar siempre y cuando esta en el classpath de la applicacion.
Código: Text
AbstractParaMiClase base=return
(AbstractParaMiClase) t.getConstructors()[0]
.newInstance(Parametros del Constructor[0]);
Cargamos la instancia de la clase en memoria definimos una clase abstracta o interface, usamo esto ya que no vamos a tener una referencia directa a nuestra clase cargada dinamicamente.Encaso de que nuestra clase tubiera mas constructores estos son ordenas en el Array segun la declaracion en la clase