Crear clase en tiempo de ejecución

View: New views
17 Messages — Rating Filter:   Alert me  

Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Alguien tiene información de como crear una clase en tiempo de ejecucion ?.

Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
quiero crear una clase de nombre Robot con varias funciones y
atributos, y esta misma clase poder usarla en el momento.

Saludos,

Re: Crear clase en tiempo de ejecución

by Gonzalo Aranda :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Pues imagino que deberás hacer algún método que cree el código... luego lo
compilas.. y lo cargas dinamicamente.. no????

no es dificil! (al menos lo que has explicado así...), quizás no rápido o
demasiado eficiente... pero funciona!


El 9 de agosto de 2009 14:56, yamsung lage <yamsung@...> escribió:

>
>
> Alguien tiene información de como crear una clase en tiempo de ejecucion ?.
>
> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
> quiero crear una clase de nombre Robot con varias funciones y
> atributos, y esta misma clase poder usarla en el momento.
>
> Saludos,
>  
>

Re: Crear clase en tiempo de ejecución

by Eloy Mier Pérez :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

¿y uno de los patrones de creacion no te vale?

http://es.wikipedia.org/wiki/Factory_Method_(patr%C3%B3n_de_dise%C3%B1o)


El 9 de agosto de 2009 15:04, Gonzalo Aranda<gonzaloaranda@...> escribió:

>
>
> Pues imagino que deberás hacer algún método que cree el código... luego lo
> compilas.. y lo cargas dinamicamente.. no????
>
> no es dificil! (al menos lo que has explicado así...), quizás no rápido o
> demasiado eficiente... pero funciona!
>
>
> El 9 de agosto de 2009 14:56, yamsung lage <yamsung@...> escribió:
>>
>>
>>
>> Alguien tiene información de como crear una clase en tiempo de ejecucion
>> ?.
>>
>> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>> quiero crear una clase de nombre Robot con varias funciones y
>> atributos, y esta misma clase poder usarla en el momento.
>>
>> Saludos,
>
>



--
VID : 225463
Web:
http://eloy-mp.com
http://xoops.eloy-mp.com
http://wp.eloy-mp.com
http://wordpress.eloy-mp.com
mail:
emierp_@...
eloy.mier.perez_@...
skype: eloy.mier.perez
msn: emierp_@...
icq: 41709142
Un saludo. Eloy Mier Pérez.

Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hola Eloy,

Asi lo he pensado en un principio pero en si no me vale, a ver si
logro explicar el porque:

En el ejemplo de la pagina,

// Definimos la clase abstracta constructora
public abstract class Creator{
    // Operación que realiza
    public Product  anOperation() {
        Product aProduct = factoryMethod();
        return aProduct;
    }

    // Definimos método abstracto
    protected abstract Product factoryMethod();
}

La cuestion es que a partir de aqui, pueden darse infinidades de casos
en la creacion de una clase que extienda de Creator. Actualmente, esa
informacion la leo de un archivo, imagina que en el archivo 1 dice que
existe una clase NoConcreteCreator que extiende de creator y que el
metodo factoryMethod() ejecuta ciertas acciones y que ademas hay dos
metodos propios de NoConcreteCreator, todo esto definido en el XML.

En pocas palabras, las clases resultan dinamicas y por eso necesito
crearlas en tiempo de ejecucion. Me explico?



2009/8/9 Eloy Mier Pérez <emierp@...>:

>
>
> ¿y uno de los patrones de creacion no te vale?
>
> http://es.wikipedia.org/wiki/Factory_Method_(patr%C3%B3n_de_dise%C3%B1o)
>
> El 9 de agosto de 2009 15:04, Gonzalo Aranda<gonzaloaranda@...>
> escribió:
>
>>
>>
>> Pues imagino que deberás hacer algún método que cree el código... luego lo
>> compilas.. y lo cargas dinamicamente.. no????
>>
>> no es dificil! (al menos lo que has explicado así...), quizás no rápido o
>> demasiado eficiente... pero funciona!
>>
>>
>> El 9 de agosto de 2009 14:56, yamsung lage <yamsung@...> escribió:
>>>
>>>
>>>
>>> Alguien tiene información de como crear una clase en tiempo de ejecucion
>>> ?.
>>>
>>> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>>> quiero crear una clase de nombre Robot con varias funciones y
>>> atributos, y esta misma clase poder usarla en el momento.
>>>
>>> Saludos,
>>
>>
>
> --
> VID : 225463
> Web:
> http://eloy-mp.com
> http://xoops.eloy-mp.com
> http://wp.eloy-mp.com
> http://wordpress.eloy-mp.com
> mail:
> emierp_@...
> eloy.mier.perez_@...
> skype: eloy.mier.perez
> msn: emierp_@...
> icq: 41709142
> Un saludo. Eloy Mier Pérez.
>

Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Lo veo poco eficiente, pero bueno igual tengo dudas:

Lo que me propones es lo siguiente:

1. crear un archivo .java con el codigo
2. Compilarlo en tiempo de ejecucion... Tienes informacion de como hacer esto ?
3. Cargarlo dinamicamente ... Igualmente, tendrias informacion de como hacerlo ?

Un saludo


2009/8/9 Gonzalo Aranda <gonzaloaranda@...>:

>
>
> Pues imagino que deberás hacer algún método que cree el código... luego lo
> compilas.. y lo cargas dinamicamente.. no????
>
> no es dificil! (al menos lo que has explicado así...), quizás no rápido o
> demasiado eficiente... pero funciona!
>
>
> El 9 de agosto de 2009 14:56, yamsung lage <yamsung@...> escribió:
>>
>>
>>
>> Alguien tiene información de como crear una clase en tiempo de ejecucion
>> ?.
>>
>> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>> quiero crear una clase de nombre Robot con varias funciones y
>> atributos, y esta misma clase poder usarla en el momento.
>>
>> Saludos,
>
>

Re: Crear clase en tiempo de ejecución

by Sebastian Gurin-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

buscá en google cosas como "lassloader dynamically load class". aca hay uno con ejemplos:

http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html

On Sun, 9 Aug 2009 14:56:16 +0200
yamsung lage <yamsung@...> wrote:

> Alguien tiene información de como crear una clase en tiempo de ejecucion ?.
>
> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
> quiero crear una clase de nombre Robot con varias funciones y
> atributos, y esta misma clase poder usarla en el momento.
>
> Saludos,
>


--
Sebastian Gurin <sgurin@...>

Re: Crear clase en tiempo de ejecución

by Marco Ortiz (Bytesw) :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Some parts of this message have been removed. Learn more about Nabble's security policy.
 

Puedes utilizar janino http://www.janino.net/

Saludos

Sebastian Gurin escribió:

 

buscá en google cosas como "lassloader dynamically load class". aca hay uno con ejemplos:

http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html

On Sun, 9 Aug 2009 14:56:16 +0200
yamsung lage <...> wrote:

> Alguien tiene información de como crear una clase en tiempo de ejecucion ?.
>
> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
> quiero crear una clase de nombre Robot con varias funciones y
> atributos, y esta misma clase poder usarla en el momento.
>
> Saludos,
>

--
Sebastian Gurin <...>


__._,_.___
Para cancelar su subscripción a este grupo, envíe un mensaje de correo electrónico a:
javaSpain-unsubscribe@...

Actividad reciente
Visita tu grupo
Yahoo! Avatares

Tu imagen virtual

¿A qué esperas para

crear el tuyo?

Yahoo! Correo

Regístrate gratis

Lee tu correo desde

cualquier lugar.

Mi Yahoo!

Reúne tu mundo

Tu correo, tus RSS

y mucho más...

.

__,_._,___

Re: Crear clase en tiempo de ejecución

by Sergio Arbeo :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/8/9 yamsung lage <yamsung@...>:
>
>
> Alguien tiene información de como crear una clase en tiempo de ejecucion ?.
>
> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
> quiero crear una clase de nombre Robot con varias funciones y
> atributos, y esta misma clase poder usarla en el momento.

Uhm... no veo por qué necesitarías esta clase. ¿Puedes poner un ejemplo?

Un saludo,

Serabe

--
http://sergio.arbeo.net
http://www.serabe.com

Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> Uhm... no veo por qué necesitarías esta clase. ¿Puedes poner un ejemplo?

No entiendo lo que dices pero bueno trato de ponerte un ejemplo...

Imaginate un programa en java que sea un simulador, entonces le debes
pasar un archivo (Xml, o cualquiera). En este archivo se especifican
unos objetos con sus datos miembros (ubicacion, color, etc) y sus
funciones (cambiar de color, cambiar de posicion, girar, etc).

Bueno la idea es que cuando el programa reciba el archivo, lo abra,
identifique los objetos y los cree en tiempo de ejecución.

Asi este archivo puede tener varios objetos, por ejemplo: Robot, caja,
camion, etc. Y estos a su vez varias atributos con varios metodos.

Sergio, espero haberme hecho explicar


2009/8/9 Sergio Arbeo <serabe@...>:

>
>
> 2009/8/9 yamsung lage <yamsung@...>:
>
>>
>>
>> Alguien tiene información de como crear una clase en tiempo de ejecucion
>> ?.
>>
>> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>> quiero crear una clase de nombre Robot con varias funciones y
>> atributos, y esta misma clase poder usarla en el momento.
>
>
> Un saludo,
>
> Serabe
>
> --
> http://sergio.arbeo.net
> http://www.serabe.com
>

Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Muchas gracias Sebastian,

Con lo que me envias solucionaria los puntos 2 y 3 de lo comentado
anteriormente:

1. crear un archivo .java con el codigo
2. Compilarlo en tiempo de ejecucion... Dynamic Class Loading and
Reloading in Java
3. Cargarlo dinamicamente ... Dynamic Class Loading and Reloading in Java

Lo mirare un poco, más y mañana me pongo a implementarlo con esta solución.


2009/8/9 Sebastian Gurin <sgurin@...>:

>
>
> buscá en google cosas como "lassloader dynamically load class". aca hay uno
> con ejemplos:
>
> http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html
>
> On Sun, 9 Aug 2009 14:56:16 +0200
> yamsung lage <yamsung@...> wrote:
>
>> Alguien tiene información de como crear una clase en tiempo de ejecucion
>> ?.
>>
>> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>> quiero crear una clase de nombre Robot con varias funciones y
>> atributos, y esta misma clase poder usarla en el momento.
>>
>> Saludos,
>>
>
> --
> Sebastian Gurin <sgurin@...>
>

Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Marco,

Pero esto seria un compilador de java totalmente independiente, o me equivoco ?



2009/8/9 Marco Ortiz <mortiz@...>:

>
>
> Puedes utilizar janino http://www.janino.net/
>
> Saludos
>
> Sebastian Gurin escribió:
>
>
>
> buscá en google cosas como "lassloader dynamically load class". aca hay uno
> con ejemplos:
>
> http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html
>
> On Sun, 9 Aug 2009 14:56:16 +0200
> yamsung lage <yamsung@...> wrote:
>
>> Alguien tiene información de como crear una clase en tiempo de ejecucion
>> ?.
>>
>> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>> quiero crear una clase de nombre Robot con varias funciones y
>> atributos, y esta misma clase poder usarla en el momento.
>>
>> Saludos,
>>
>
> --
> Sebastian Gurin <sgurin@...>
>
>

Re: Crear clase en tiempo de ejecución

by Sebastian Gurin-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

ojo con esto... No acabo de entender cuáles son tus requerimientos, pero si lo que quieres es persistir los objetos de tu applicación entonces no es por el lado de carga dinámica de clases que lo resuelves, sino por el lado de serialización de objetos java a xml. Son cosas distintas.

Utiliza la carga dinámica de clases solo cuando ya no te quede otra... o sea, cuando el requerimiento sea que el usuario pueda insertar su propia implementación de cierto comportamiento en caliente (sin tener que detener la aplicación, agregar el código, compilar y reiniciar la aplicación).

Si "las variantes" del comportamiento se conocen todas, en ese caso te conviene implementarlas a cada una de ellas en una clase java por separado, y utilizar el patrón de diseño Strategy para que el usuario pueda intercambiar de "variante" dinámicamente. Utiliza dynamic class loading solo cuando el requerimiento sea que las alternativas puedan ser definidas y "publicadas" dinámicamente.

En el caso de que la carga dinámica de clases se alo que necesites, a continuación pego un código que hace los pasos 1, 2 y 3 que mencionas en otro mail. Suerte!

import java.io.*;
import java.util.*;
import java.lang.reflect.*;

public class MakeTodayClass {
  Date today = new Date();
  String todayMillis = Long.toString(today.getTime());
  String todayClass = "z_" + todayMillis;
  String todaySource = todayClass + ".java";
 
  public static void main (String args[]){
    MakeTodayClass mtc = new MakeTodayClass();
    mtc.createIt();
    if (mtc.compileIt()) {
       System.out.println("Running " + mtc.todayClass + ":\n\n");
       mtc.runIt();
       }
    else
       System.out.println(mtc.todaySource + " is bad.");
    }

  public void createIt() {
    try {
      FileWriter aWriter = new FileWriter(todaySource, true);
      aWriter.write("public class "+ todayClass + "{");
      aWriter.write(" public void doit() {");
      aWriter.write(" System.out.println(\""+todayMillis+"\");");
      aWriter.write(" }}\n");
      aWriter.flush();      
      aWriter.close();
      }
    catch(Exception e){
      e.printStackTrace();
      }
    }
 
  public boolean compileIt() {
    String [] source = { new String(todaySource)};
    ByteArrayOutputStream baos= new ByteArrayOutputStream();

    new sun.tools.javac.Main(baos,source[0]).compile(source);
    // if using JDK >= 1.3 then use
    //   public static int com.sun.tools.javac.Main.compile(source);    
    return (baos.toString().indexOf("error")==-1);
    }
   
  public void runIt() {
    try {
      Class params[] = {};
      Object paramsObj[] = {};
      Class thisClass = Class.forName(todayClass);
      Object iClass = thisClass.newInstance();
      Method thisMethod = thisClass.getDeclaredMethod("doit", params);
      thisMethod.invoke(iClass, paramsObj);
      }
    catch (Exception e) {
      e.printStackTrace();
      }
    }
 }



On Sun, 9 Aug 2009 22:57:16 +0200
yamsung lage <yamsung@...> wrote:

> > Uhm... no veo por qué necesitarías esta clase. ¿Puedes poner un ejemplo?
>
> No entiendo lo que dices pero bueno trato de ponerte un ejemplo...
>
> Imaginate un programa en java que sea un simulador, entonces le debes
> pasar un archivo (Xml, o cualquiera). En este archivo se especifican
> unos objetos con sus datos miembros (ubicacion, color, etc) y sus
> funciones (cambiar de color, cambiar de posicion, girar, etc).
>
> Bueno la idea es que cuando el programa reciba el archivo, lo abra,
> identifique los objetos y los cree en tiempo de ejecución.
>
> Asi este archivo puede tener varios objetos, por ejemplo: Robot, caja,
> camion, etc. Y estos a su vez varias atributos con varios metodos.
>
> Sergio, espero haberme hecho explicar
>
>
> 2009/8/9 Sergio Arbeo <serabe@...>:
> >
> >
> > 2009/8/9 yamsung lage <yamsung@...>:
> >
> >>
> >>
> >> Alguien tiene información de como crear una clase en tiempo de ejecucion
> >> ?.
> >>
> >> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
> >> quiero crear una clase de nombre Robot con varias funciones y
> >> atributos, y esta misma clase poder usarla en el momento.
> >
> >
> > Un saludo,
> >
> > Serabe
> >
> > --
> > http://sergio.arbeo.net
> > http://www.serabe.com
> >
>


--
Sebastian Gurin <sgurin@...>

Re: Crear clase en tiempo de ejecución

by Sergio Arbeo :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/8/9 yamsung lage <yamsung@...>:
>
>
>> Uhm... no veo por qué necesitarías esta clase. ¿Puedes poner un ejemplo?
>
> No entiendo lo que dices pero bueno trato de ponerte un ejemplo...

Ok, he entendido parte. Necesitas crear un objeto con ciertos
atributos y ciertos métodos. ¿Dónde se encontrarían las
implementaciones de éstos? ¿O es más estilo XML-RCP? De todas formas,
por lo que estás diciendo, tal vez encuentres algo por reflection. De
todas formas, sigo sin ver la razón por la que necesitas una nueva
clase y no una instancia de algo estilo:

class MyOwnKindOfObjects {
  protected Hashtable<String,Object> attributes;
  protected Hashtable<String,java.lang.reflect.Method> methods;

  public MyOwnKindOfObject() {...}

  public getAttr(String name) {...}
  public setAttr(String name, Obj val) {...}
  public getMethod(String name) {...}
  public setMethod(String name, Method method) {...}
}

Un saludo,

Sergio

--
http://sergio.arbeo.net
http://www.serabe.com

Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Tratare de responderte entre lineas:

> Ok, he entendido parte. Necesitas crear un objeto con ciertos
> atributos y ciertos métodos. ¿Dónde se encontrarían las
> implementaciones de éstos?

Las implementaciones de estos estarian en un XML, PDDL, o en un
archivo de texto cualquiera.


¿O es más estilo XML-RCP?

No es lo mismo, porque en este se supone que ya la clase, los metodos
y los atributos estan creados. En mi caso no, las clases, atributos y
metodos tengo que crearlos dinamicamente.

De todas formas,
> por lo que estás diciendo, tal vez encuentres algo por reflection. De
> todas formas, sigo sin ver la razón por la que necesitas una nueva
> clase y no una instancia de algo estilo:

Es que sino tengo la clase no puedo crear la instancia.... como te
explicaba, en un archivo tengo lo necesario para crear la clase, y una
vez logre hacerlo (que ya con el codigo que me paso sebastian podria
hacerlo) puedo crear la instancia.

Espero haberme hecho entender.

Un saludo,


2009/8/10 Sergio Arbeo <serabe@...>:

>
>
> 2009/8/9 yamsung lage <yamsung@...>:
>>
>>
>>> Uhm... no veo por qué necesitarías esta clase. ¿Puedes poner un ejemplo?
>>
>> No entiendo lo que dices pero bueno trato de ponerte un ejemplo...
>
> Ok, he entendido parte. Necesitas crear un objeto con ciertos
> atributos y ciertos métodos. ¿Dónde se encontrarían las
> implementaciones de éstos? ¿O es más estilo XML-RCP? De todas formas,
> por lo que estás diciendo, tal vez encuentres algo por reflection. De
> todas formas, sigo sin ver la razón por la que necesitas una nueva
> clase y no una instancia de algo estilo:
>
> class MyOwnKindOfObjects {
> protected Hashtable<String,Object> attributes;
> protected Hashtable<String,java.lang.reflect.Method> methods;
>
> public MyOwnKindOfObject() {...}
>
> public getAttr(String name) {...}
> public setAttr(String name, Obj val) {...}
> public getMethod(String name) {...}
> public setMethod(String name, Method method) {...}
> }
>
> Un saludo,
>
> Sergio
>
> --
> http://sergio.arbeo.net
> http://www.serabe.com
>

Parent Message unknown Re: Crear clase en tiempo de ejecución

by yamsung lage :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Sebastian,

Muchas gracias esto es justamente lo que estoy preguntando y justo lo
que necesitaba "Carga dinámica de clases", el codigo esta estupendo y
me viene super bien.

Lo necesito así, porque las implementaciones de cierto comportamiento
tienen que ser ingresadas en "caliente".

He modificado para ponerlo un poco mas a mis necesidades. Lo
adjunto por si alguien lo necesitara alguna vez.

Ahora son tres clases: MakeTodayClass, ClaseACrear y MetodoClase.

-----------------------------


import java.io.*;
import java.util.*;
import java.lang.reflect.*;

public class MakeTodayClass {
        Date today = new Date();
        ClaseACrear todayClass;
        String todayMillis = Long.toString(today.getTime());
        //String todayClass = "z_" + todayMillis;
        String todaySource = todayClass + ".java";

        public static void main(String args[]) {
                MakeTodayClass mtc = new MakeTodayClass();
               
                /* Clase a crear */
                mtc.todayClass = new ClaseACrear();
                mtc.todayClass.setNombrePaquete("sim.pelea.makeClass");
                mtc.todayClass.setNombreClase("z_" + mtc.todayMillis);
                mtc.todayClass.setNombreArchivo(mtc.todayClass.getNombreClase() + ".java");
               
                // Crear metodo
                MetodoClase metodo1 = new MetodoClase();
                metodo1.setNombre("doit");
                metodo1.setContenidoEjecutar(" System.out.println(\"" +
mtc.todayMillis + "\");");
               
                MetodoClase metodo[] = new MetodoClase[1];
                metodo[0] = metodo1;
               
                mtc.todayClass.setMetodos(metodo);
               
                mtc.createIt();
                if (mtc.compileIt()) {
                        System.out.println("Running " + mtc.todayClass + ":\n\n");
                        mtc.runIt();
                } else
                        System.out.println(mtc.todaySource + " is bad.");
        }

        public void createIt() {
                try {
                        String nombre;
                       
                        if (todayClass.nombrePaquete != null)
                        {
                                todayClass.nombreArchivoPackage =
todayClass.nombrePaquete.replace(".",
System.getProperty("file.separator"))+System.getProperty("file.separator")+todayClass.nombreArchivo;
                                nombre = todayClass.nombreArchivoPackage;
                        }
                        else
                        {
                                nombre = todayClass.nombreArchivo;
                        }
                        System.out.println(nombre+" - "+todayClass.nombrePaquete+" -
"+System.getProperty("file.separator"));
                       
                        FileWriter aWriter = new FileWriter(nombre, true);
                       
                        //Package
                        if (todayClass.nombrePaquete != null)
                                aWriter.write("package " + todayClass.nombrePaquete + ";\n\n");
                       
                        //Import
                        if (todayClass.importClase != null)
                                for (int i = 0; i < todayClass.importClase.length; i++)
                                        aWriter.write("import " + todayClass.importClase[i] + ";\n");
                               
                        //Nombre clase
                        aWriter.write(todayClass.tipo+" class " + todayClass.nombreClase + "{\n");
                       
                        //Metodos
                        if (todayClass.metodos != null)
                        for (int i = 0; i < todayClass.metodos.length; i++)
                        {
                                aWriter.write(" "+todayClass.metodos[i].tipo+"
"+todayClass.metodos[i].retorno+" "+todayClass.metodos[i].nombre+"()
{\n");
                                aWriter.write(todayClass.metodos[i].contenidoEjecutar);
                                aWriter.write("\n }\n");
                        }
                       
                        //Final de clase
                        aWriter.write(" }\n");
                        aWriter.flush();
                        aWriter.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        @SuppressWarnings("deprecation")
        public boolean compileIt() {
                String nombre;
               
                if (todayClass.nombrePaquete != null)
                {
                        nombre = todayClass.nombreArchivoPackage;
                }else
                {
                        nombre = todayClass.nombreArchivo;
                }
               
                String[] source = { new String(nombre) };
               
                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                new sun.tools.javac.Main(baos, source[0]).compile(source);
                // if using JDK >= 1.3 then use
                // public static int com.sun.tools.javac.Main.compile(source);
                return (baos.toString().indexOf("error") == -1);
        }

        @SuppressWarnings("unchecked")
        public void runIt() {
                String nombre;
               
                if (todayClass.nombrePaquete != null)
                {
                        nombre = todayClass.nombrePaquete+"."+todayClass.nombreClase;
                }
                else
                {
                        nombre = todayClass.nombreClase;
                }
               
                try {
                        Class params[] = {};
                        Object paramsObj[] = {};
                        Class thisClass = Class.forName(nombre);
                        Object iClass = thisClass.newInstance();
                        Method thisMethod =
thisClass.getDeclaredMethod(todayClass.metodos[0].nombre, params);
                        thisMethod.invoke(iClass, paramsObj);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

--------------------------------------

public class ClaseACrear {
        String nombrePaquete = null;
        String importClase[];
        String tipo = "public";
        String nombreClase;
        String nombreArchivo;
        String nombreArchivoPackage;
       
        MetodoClase metodos[];

        public String getNombrePaquete() {
                return nombrePaquete;
        }

        public void setNombrePaquete(String nombrePaquete) {
                this.nombrePaquete = nombrePaquete;
        }

        public String[] getImportClase() {
                return importClase;
        }

        public void setImportClase(String[] importClase) {
                this.importClase = importClase;
        }

        public String getTipo() {
                return tipo;
        }

        public void setTipo(String tipo) {
                this.tipo = tipo;
        }

        public String getNombreClase() {
                return nombreClase;
        }

        public void setNombreClase(String nombreClase) {
                this.nombreClase = nombreClase;
        }

        public String getNombreArchivo() {
                return nombreArchivo;
        }

        public void setNombreArchivo(String nombreArchivo) {
                this.nombreArchivo = nombreArchivo;
        }

        public MetodoClase[] getMetodos() {
                return metodos;
        }

        public void setMetodos(MetodoClase[] metodos) {
                this.metodos = metodos;
        }

}

------------------------------------


public class MetodoClase {
        String tipo = "public";
        String retorno = "void";
        String nombre;
        String contenidoEjecutar;
       
       
        public String getTipo() {
                return tipo;
        }
        public void setTipo(String tipo) {
                this.tipo = tipo;
        }
        public String getRetorno() {
                return retorno;
        }
        public void setRetorno(String retorno) {
                this.retorno = retorno;
        }
        public String getNombre() {
                return nombre;
        }
        public void setNombre(String nombre) {
                this.nombre = nombre;
        }
        public String getContenidoEjecutar() {
                return contenidoEjecutar;
        }
        public void setContenidoEjecutar(String contenidoEjecutar) {
                this.contenidoEjecutar = contenidoEjecutar;
        }

}
--------------------------------------


Un saludo,


2009/8/11 yamsung lage <yamsung@...>:

> Sebastian,
>
> Muchas gracias esto es justamente lo que estoy preguntando y justo lo
> que necesitaba "Carga dinámica de clases", el codigo esta estupendo y
> me viene super bien.
>
> Lo necesito así, porque las implementaciones de cierto comportamiento
> tienen que ser ingresadas en "caliente".
>
> Hay alguna otra posibilidad de realizar la carga dinámica de clases ?
>
> Un saludo,
>
>
> 2009/8/10 Sebastian Gurin <sgurin@...>:
>> ojo con esto... No acabo de entender cuáles son tus requerimientos, pero si lo que quieres es persistir los objetos de tu applicación entonces no es por el lado de carga dinámica de clases que lo resuelves, sino por el lado de serialización de objetos java a xml. Son cosas distintas.
>>
>> Utiliza la carga dinámica de clases solo cuando ya no te quede otra... o sea, cuando el requerimiento sea que el usuario pueda insertar su propia implementación de cierto comportamiento en caliente (sin tener que detener la aplicación, agregar el código, compilar y reiniciar la aplicación).
>>
>> Si "las variantes" del comportamiento se conocen todas, en ese caso te conviene implementarlas a cada una de ellas en una clase java por separado, y utilizar el patrón de diseño Strategy para que el usuario pueda intercambiar de "variante" dinámicamente. Utiliza dynamic class loading solo cuando el requerimiento sea que las alternativas puedan ser definidas y "publicadas" dinámicamente.
>>
>> En el caso de que la carga dinámica de clases se alo que necesites, a continuación pego un código que hace los pasos 1, 2 y 3 que mencionas en otro mail. Suerte!
>>
>> import java.io.*;
>> import java.util.*;
>> import java.lang.reflect.*;
>>
>> public class MakeTodayClass {
>>  Date today = new Date();
>>  String todayMillis = Long.toString(today.getTime());
>>  String todayClass = "z_" + todayMillis;
>>  String todaySource = todayClass + ".java";
>>
>>  public static void main (String args[]){
>>    MakeTodayClass mtc = new MakeTodayClass();
>>    mtc.createIt();
>>    if (mtc.compileIt()) {
>>       System.out.println("Running " + mtc.todayClass + ":\n\n");
>>       mtc.runIt();
>>       }
>>    else
>>       System.out.println(mtc.todaySource + " is bad.");
>>    }
>>
>>  public void createIt() {
>>    try {
>>      FileWriter aWriter = new FileWriter(todaySource, true);
>>      aWriter.write("public class "+ todayClass + "{");
>>      aWriter.write(" public void doit() {");
>>      aWriter.write(" System.out.println(\""+todayMillis+"\");");
>>      aWriter.write(" }}\n");
>>      aWriter.flush();
>>      aWriter.close();
>>      }
>>    catch(Exception e){
>>      e.printStackTrace();
>>      }
>>    }
>>
>>  public boolean compileIt() {
>>    String [] source = { new String(todaySource)};
>>    ByteArrayOutputStream baos= new ByteArrayOutputStream();
>>
>>    new sun.tools.javac.Main(baos,source[0]).compile(source);
>>    // if using JDK >= 1.3 then use
>>    //   public static int com.sun.tools.javac.Main.compile(source);
>>    return (baos.toString().indexOf("error")==-1);
>>    }
>>
>>  public void runIt() {
>>    try {
>>      Class params[] = {};
>>      Object paramsObj[] = {};
>>      Class thisClass = Class.forName(todayClass);
>>      Object iClass = thisClass.newInstance();
>>      Method thisMethod = thisClass.getDeclaredMethod("doit", params);
>>      thisMethod.invoke(iClass, paramsObj);
>>      }
>>    catch (Exception e) {
>>      e.printStackTrace();
>>      }
>>    }
>>  }
>>
>>
>>
>> On Sun, 9 Aug 2009 22:57:16 +0200
>> yamsung lage <yamsung@...> wrote:
>>
>>> > Uhm... no veo por qué necesitarías esta clase. ¿Puedes poner un ejemplo?
>>>
>>> No entiendo lo que dices pero bueno trato de ponerte un ejemplo...
>>>
>>> Imaginate un programa en java que sea un simulador, entonces le debes
>>> pasar un archivo (Xml, o cualquiera). En este archivo se especifican
>>> unos objetos con sus datos miembros (ubicacion, color, etc) y sus
>>> funciones (cambiar de color, cambiar de posicion, girar, etc).
>>>
>>> Bueno la idea es que cuando el programa reciba el archivo, lo abra,
>>> identifique los objetos y los cree en tiempo de ejecución.
>>>
>>> Asi este archivo puede tener varios objetos, por ejemplo: Robot, caja,
>>> camion, etc. Y estos a su vez varias atributos con varios metodos.
>>>
>>> Sergio, espero haberme hecho explicar
>>>
>>>
>>> 2009/8/9 Sergio Arbeo <serabe@...>:
>>> >
>>> >
>>> > 2009/8/9 yamsung lage <yamsung@...>:
>>> >
>>> >>
>>> >>
>>> >> Alguien tiene información de como crear una clase en tiempo de ejecucion
>>> >> ?.
>>> >>
>>> >> Por ejemplo, tengo un nombre Robot, entonces en tiempo de ejecucion
>>> >> quiero crear una clase de nombre Robot con varias funciones y
>>> >> atributos, y esta misma clase poder usarla en el momento.
>>> >
>>> >
>>> > Un saludo,
>>> >
>>> > Serabe
>>> >
>>> > --
>>> > http://sergio.arbeo.net
>>> > http://www.serabe.com
>>> >
>>>
>>
>>
>> --
>> Sebastian Gurin <sgurin@...>
>>
>

DatePicker en swing y licencias

by Tany Villalba-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hola BUen dia:

BUeo es mi primera participacion en la lista, y bueno como es costumbre
es dudas. Bueno vengo de un mundo de programacion de c# y python, pero
bueno ahora quiero entrar al mundo de java y tengo dos dudas.

1.- Primero alguien conoce unn componente Datepicker para swing, veo
muchos en el internet, y algunos no funcionan, o simplemente no aceptan
ingreso por teclado y unicamente usando mouse, talvez alguien conozca en
especial que usen teclado y mouse?

2.- Si desarrollo un aplicativo utilizando el Java 6 de Sun, el que esta
en los repositorios de ubuntu, podria liberar mi codigo es decir no
tener ningun tipo de restirccion de regalar mi codigo y que lo usen,
obviamente ellos tendrian que instalar el java de sun en version 6.
Tendria problemas con licencias?

Gracias


__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar


------------------------------------

Para cancelar su subscripción a este grupo, envíe un mensaje de correo electrónico a:
javaSpain-unsubscribe@...

Enlaces a Yahoo! Grupos

<*> Para visitar tu grupo en la web, ve a:
    http://es.groups.yahoo.com/group/javaSpain/

<*> La configuración de tu correo:
    Mensajes individuales  | Tradicional

<*> Para modificar la configuración desde la Web, visita:
    http://es.groups.yahoo.com/group/javaSpain/join
    (ID de Yahoo! obligatoria)

<*> Para modificar la configuración mediante el correo:
    mailto:javaSpain-digest@...
    mailto:javaSpain-fullfeatured@...

<*> Para cancelar tu suscripción en este grupo, envía
    un mensaje en blanco a:
    javaSpain-unsubscribe@...

<*> El uso que hagas de Yahoo! Grupos está sujeto a
    las Condiciones del servicio de Yahoo!:
    http://es.docs.yahoo.com/info/utos.html


Re: DatePicker en swing y licencias

by Sebastian Gurin-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hola Tany. Primero que nada, déjame decirte que los nuevos tópicos en una lista de correo se comienzan con un nuevo mail, y no respondiendo a un thread ya abierto. te respondo entre líneas sobre tud preguntas:

On Mon, 17 Aug 2009 08:26:17 -0500
Tany <tanymono@...> wrote:

> Hola BUen dia:
>
> BUeo es mi primera participacion en la lista, y bueno como es costumbre
> es dudas. Bueno vengo de un mundo de programacion de c# y python, pero
> bueno ahora quiero entrar al mundo de java y tengo dos dudas.
>
> 2.- Si desarrollo un aplicativo utilizando el Java 6 de Sun, el que esta
> en los repositorios de ubuntu, podria liberar mi codigo es decir no
> tener ningun tipo de restirccion de regalar mi codigo y que lo usen,
> obviamente ellos tendrian que instalar el java de sun en version 6.
> Tendria problemas con licencias?

Según yo lo entiendo, el tema de las licencias va más por el lado de las librerías que por el lado de la jdk o ide utilizado para desarrollar. Piensa que si tu programa java está bien hecho, debería funcionar en cualqueir jdk, ya sea la de sun, la de gnu o cualquier otra (hay miles). Desde el punto de vista de las licencias, la jdk debe ser vista más como un estándar que como una librería.

La licencia de tu código es independiente de la licencia bajo la cual está liberada la jdk utilizada para desarrollar en un sistema X en un momento X.

Ahora bien , si tu aplicativo utiliza alguna librería de 3eros (algún .jar externo a la jdk) y esa librería está licenciada solamente bajo la GPL (no lgpl), la gpl te obliga a que tu código sea gpl. Las licencias que no tienen esta restricción son apache, lgpl, creative, bsd, eclipse, mit, etc

en conclusión, preocupate solo por las licencias de las librerías, no por las licencias del entorno de desarrollo (jdk, ide, etc).

>
> Gracias
>
>
> __________________________________________________
> Correo Yahoo!
> Espacio para todos tus mensajes, antivirus y antispam _gratis!
> _Abr_ tu cuenta ya! - http://correo.yahoo.com.ar
>
>
> ------------------------------------
>
> Para cancelar su subscripci_n a este grupo, env_e un mensaje de correo electr_nico a:
> javaSpain-unsubscribe@...
>
> Enlaces a Yahoo! Grupos
>
>
>
>
>
>


--
Sebastian Gurin <sgurin@...>