Ejemplillo de: [Perl] CORBA - PERL

Bolo Lacertus lacertus@servidor.unam.mx
Thu, 28 Feb 2002 19:30:37 -0800


Saludos!

Otra referencia que vale mucho la pena es del EMBL-EBI (Centro de
Bioinform=E1tica de la comunidad europea) quienes est=E1n usando CORBA en
serio para contender con el problema del genoma.

En esta exposici=F3n explican los pros y contras de usar CORBA y Perl.

http://industry.ebi.ac.uk/~senger/ws-corba/home/talks/corba_perl/sld001.h=
tm

Carlos Villanueva ha escrito:
> Estoy buscando informacion mas concreta de como utilizar CORBA con perl
> o si alguien tiene ya desarrollo realizado para que me ilumine el camin=
o.
> Si alguien tiene algunos ejemplos de como implementar el IDL/skelenton =
y
> el IDL/Stub
> para que funcionen con CORBA:Orbit y Perl ahi se los encargo, mientras =
tanto
> aqui le sigo macheteando hasta que salga.

Para que se vea lo pr=E1ctico que es CORBA, dejenme poner un ejemplillo,
un servant y cliente (cliente y servidor) basados en CORBA.
Estos podr=EDan realizar sus transacciones sin problemas entre dos equipo=
s
cualquiera (incluso de UNIX a Windows y de regreso) si ambos estan
equipados con ORBs y Perl para CORBA. Dada la complejidad de hacer esta
conecci=F3n interplataformas, incluso para Perl convencional, los
programas son sorprendentemente sencillos y cortos.

Porque no se necesita el visual studio .net para hacerlo: Daniel Sol

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
El servidor (50 lineas, completo):

#!/usr/bin/perl -w
#Programa de pruebas para CORBA, Zoologico
#Daniel Sol Llaven, 7 Mayo del 2001

use CORBA::ORBit idl =3D> [qw(Pato.idl), qw(Perico.idl)];
use Pato;
use Perico;
use Error qw(:try);

$orb =3D CORBA::ORB_init("orbit-local-orb");
$poa =3D $orb->resolve_initial_references("RootPOA");

# Create the main server object
print "Crear un Pato o un pErico?\n";
$op=3D<STDIN>;
chop $op;
if($op eq "p" or $op eq "P")
{
	print "Creando un Pato\n";
	$servant=3Dnew Pato;
}
elsif($op eq "e" or $op eq "E")
{
	print "Creando un Perico\n";
	$servant=3Dnew Perico;
}
else
{
	print "No se como crear un $op\n";
	exit(0);
}

push @servers, $servant;
$id =3D $poa->activate_object ($servant);

print "Objeto:$id\n";
$ref =3D $orb->object_to_string ($poa->id_to_reference ($id));
open (OUT, ">ejemplar.ref");
print OUT $ref;
close OUT;
$poa->_get_the_POAManager->activate;
$orb->run ();

# Never reached
print "finis\n";
exit(0);

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
El cliente (25 lineas completo):

#!/usr/bin/perl -w
#Programa de pruebas para CORBA, Jaula
#Daniel Sol Llaven, 7 Mayo del 2001

use CORBA::ORBit idl =3D> [qw(Pato.idl), qw(Perico.idl)];
use Error qw(:try);
use strict;

my $orb =3D CORBA::ORB_init("orbit-local-orb");
open IOR, "ejemplar.ref";
my $ior =3D <IOR>;
close IOR;

my $ejemplar =3D $orb->string_to_object($ior);

print "Hola:".$ejemplar->_get_clicks."\n";
print "Conversando con el ejemplar\n";
my $di;
while($di=3D<STDIN>)
{
	chop($di);
	$ejemplar->habla($di);
}
print "Hasta luego".$ejemplar->_get_clicks."\n";

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
los IDL
module Pato {
	interface Pato {
		void habla(in string mensaje);
		attribute long clicks;
	};
};
module Perico {
	interface Perico {
		void habla(in string mensaje);
		attribute long clicks;
	};
};
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Los paquetes del objeto tipo Pato y tipo Perico (algo ten=EDa que usar de
ejemplo):

#Modulo para definici=F3n de la clase Pato.pm
#Daniel Sol Llaven, 7 Mayo 2001
#Pruebas de plataforma CORBA

package Pato;
use strict;
@Pato::ISA =3D qw(POA_Pato::Pato);

sub new
{
  #Crea un nuevo pato
  my $proto =3D shift;
	my $class =3D ref($proto) || $proto;
	my $yo  =3D {};
	$yo->{"clicks"}=3D0;
	bless ($yo, $class);
	return $yo;
}

sub habla
{
  my $yo=3Dshift @_;
	print "Cuack! ".$yo->{"clicks"}++."\n";
}

sub _get_clicks
{
  my $yo=3Dshift @_;
	return $yo->{"clicks"};
}

1;


#Modulo para definici=F3n de la clase Perico.pm
#Daniel Sol Llaven, 7 Mayo 2001
#Pruebas de plataforma CORBA

package Perico;
use strict;
@Perico::ISA =3D qw(POA_Perico::Perico);

sub new
{
  #Crea un nuevo perico
  my $proto =3D shift;
	my $class =3D ref($proto) || $proto;
	my $yo  =3D {};
	$yo->{"clicks"}=3D0;
	bless ($yo, $class);
	return $yo;
}

sub habla
{
  my($yo,$vox)=3D@_;
	print "-$vox- ".$yo->{"clicks"}++."\n";
}

sub _get_clicks
{
  my $yo=3Dshift @_;
	return $yo->{"clicks"};
}

1;