Ir directamente al contenido

Un diminuto servidor de aplicaciones desarrollado en Java

3 mayo, 2008

Este es un código que embute las aplicaciones Java que se deseen dentro de una hebra gestionada por la misma máquina virtual. La resolución de nombres de clases se ha de implementar con un cargador de clases virtual para cada hebra y se debe añadir una biblioteca (que publicaré pronto) de gestión de hebras para resolver el conflicto entre las mismas.

import java.lang.* ;
import java.lang.reflect.Method;

public class Servidor
{
   public static void main(String []args)
   {
     System.out.println("Iniciando la clase Servidor \n");
     iniciarEnHebra("Aplicacion1",args);
     iniciarEnHebra("Aplicacion2",args);
   }

   public static Proceso iniciarEnHebra(String nombreClase, String[] args)
   {
      Proceso proceso = new Proceso(nombreClase, args);
      //****************  Nuevo: **********************
      ThreadGroup grupo = new ThreadGroup("main");
      Thread hebra = new Thread(grupo, proceso);
      //****************  Nuevo: **********************
      hebra.start();
      return proceso;
   }
 }

class Proceso implements Runnable{
  String nombreClase;
  String[] Argumentos;
  //****************  Nuevo: **********************
  ThreadGroup hebraEnCurso;
  //****************  Nuevo: **********************

  public Proceso (String nombre, String[] args)
  {
    nombreClase = nombre;
    Argumentos  = args;
  }

  public static void iniciarOtraClase(String nombreClase, String[] args)
  throws Exception
  {
     //Obtener la clase
     Class objeto = Class.forName(nombreClase);
     //Localizar el metodo main(String []) de esa clase
     Class[] tipoParametrosMain = {args.getClass()};
     Method main = objeto.getMethod("main", tipoParametrosMain);
     //array con los argumentos a pasarle a la clase
     Object[] parametrosMain = {args};
     //Iniciar la clase
     main.invoke(null, parametrosMain);
   }

  public void run()
  {
     //****************  Nuevo: **********************
      hebraEnCurso=Thread.currentThread().getThreadGroup();
     //****************  Nuevo: **********************

     try{
        iniciarOtraClase(nombreClase, Argumentos);
        }catch(Exception e){
           System.out.println(" Excepcion ... ");
	   e.printStackTrace();
        }
  }

  public void terminar()
  {
    if(hebraEnCurso != null)
           hebraEnCurso.stop();
  }

}

Las aplicaciones de prueba que se pueden usar son :

//Aplicacion1
import java.lang.*;

public class Aplicacion1
{
   public static void main(String[]arrs)
   {
     System.out.println("Este bucle es de la aplicacion 1");
     for (int i = 0;i<10000;i++){
        System.out.println("Aplicacion 1");
	   }

    System.out.println("Final de la aplicacion 1");
  }

}
[/sourcecode]

 [sourcecode language='csharp']
//Aplicacion2
import java.lang.*;

public class Aplicacion2
{
   public static void main(String[]arrs)
   {
     System.out.println("Este bucle es de la aplicacion 2");
          for (int i = 0;i<10000;i++){
           System.out.println("Aplicacion 2");
	    }

	 System.out.println("Final de la aplicacion 2");
   }

}
[/sourcecode]

3 comentarios leave one →
  1. Avatar de Antonius
    5 mayo, 2008 08:20

    Veo que le has dado buen uso al metatag de wordpress para publicar código fuente 🙂
    Hale, a disfrutarlo con salud, y felicidades por el artículo en MundoLinux!

  2. Avatar de frago
    frago permalink
    10 mayo, 2008 04:55

    Hola, muy interesante el artículo…bueno…yo soy nuevo en esto…y de verdad me gustaria saber si pudieras decir la forma en que le haces para publicar el código de esa manera, para que se resalten palabras reservadas o cosas asi.

    Saludos!!!

  3. Avatar de jaberme
    jaberme permalink*
    10 mayo, 2008 07:39

    Tal y como me indicó «Antonius» se puede colocar el código de la siguiente forma :

    Usa las metatags

    sourcecode language=’csharp’ (este texto tienes que ponerlo entre [] )

    todo el codigo que quieras

    /sourcecode (este texto tienes que ponerlo entre [] )

Replica a Antonius Cancelar la respuesta