Introduccción al uso de CORBA desde Java


Java y CORBA




Desarrollo de un programa CORBA

Pasos muy similares a Java RMI




Diseño de las interfaces remotas: OMG/IDL




Ejemplo de interfaz IDL

exception DivisionByZero
{
        float op1;
        float op2;
};
                                                                                      
//
// Describe the Calculator interface
//
interface Calculator
{
        // Add operation
        float add ( in float nb1, in float nb2 );
                                                                                      
        // Div operation
        float div ( in float nb1, in float nb2 )
              raises ( DivisionByZero );

        oneway void reset ();
};




Traducción de interfaz IDL a Java

java JavaORB.compiler.IdlCompiler -poa Calculator.idl

public interface CalculatorOperations
{

        public float add(float nb1, float nb2);
                                                                                      
        public float div(float nb1, float nb2)
                throws corba_pkg.DivisionByZero;
                                                                                      
        public void reset();
                                                                                      
}




Implementación de la interfaz: Servant

public class CalculatorPOAImpl extends CalculatorPOA
{
        public float add(float nb1, float nb2)
        {
                return nb1 + nb2;
        }
                                                                                      
        public float div(float nb1, float nb2)
                throws DivisionByZero
        {
                if ( nb2 == 0 )
                        throw new DivisionByZero(nb1,nb2);
                return nb1 / nb2;
        }

        public void reset() 
        {
        }
        
}




Implementación del servidor

public class ServerPOA
{
        public static void main( String args[] )
        {
                // 1.
                // Inicializar el ORB
                org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
                                                                                      
                // 2.
                // Obtener la referencia al RootPOA
                org.omg.CORBA.Object objPoa = null;
                org.omg.PortableServer.POA rootPOA = null;




Implementación del servidor

try
{
        objPoa = orb.resolve_initial_references("RootPOA");

}
catch ( org.omg.CORBA.ORBPackage.InvalidName ex )
{

// 3.
// Especializar a objeto POA el objeto genérico
rootPOA = org.omg.PortableServer.POAHelper.narrow(objPoa);




Implementación del servidor

// 4. 
// Creamos una instancia del objeto CORBA Calculator
CalculatorPOAImpl calc = new CalculatorPOAImpl();

try
{
        // 5.
        // Activamos el servant
        byte[] servantId = rootPOA.activate_object(calc);

        // 6.
        // Obtenemos la referencia del servant reference
        org.omg.CORBA.Object obj = rootPOA.id_to_reference(servantId);




Implementación del servidor

        // 7.
        // Guardamos la referencia al servant en un fichero
        String reference = orb.object_to_string(obj);
        // Falta código de guardar en fichero
        // 8.
        // Activamos el POA Manager para recibir las peticiones remotas
        rootPOA.the_POAManager().activate();

        // 9.
        // Nos quedamos a la espera de las peticiones
        orb.run();
    }




Implementación del cliente

obj = orb.string_to_object(stringTarget);
calc = CalculatorHelper.narrow(obj);
try
{
        System.out.println("5 + 3 = " + calc.add(5,3) );

        System.out.println("5 / 0 = " + calc.div(5,0) );
}
catch ( DivisionByZero ex )
{
        System.out.println("Excepción de división por cero"),
        System.out.println("La división fue "+ex.op1+" / "+ex.op2);
}




Primeras conclusiones y puntos abiertos




Versiones de este documento: [ps.gz][html.tar.gz][dvi.tar.gz]
GSyC
Last updated: 2003-05-13