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;