CORBA::omniORB - Perl module implementing CORBA 2.x via omniORB


CORBA-omniORB documentation Contained in the CORBA-omniORB distribution.

Index


Code Index:

NAME

Top

CORBA::omniORB - Perl module implementing CORBA 2.x via omniORB

SYNOPSIS

Top

  use CORBA:::omniORB ids => [ 'IDL:Account/Account:1.0' => undef,
                               'IDL:Account/Counter:1.0' => undef ];

DESCRIPTION

Top

The omniORB module is a Perl interface to the omniORB ORB. It is meant, in the spirit of omniORB, to be a clean, simple, system, at the expense of speed, if necessary.

Arguments to 'use omniORB'

Top

Arguments in the form of key value pairs can be given after the 'use CORBA::omniORB' statement.

ids

The value of the argument is a array reference which contains pairs of the form:

    REPOID => FALLBACK_IDL_FILE

REPOID is the repository id of an interface to pre-load. FALLBACK_IDL_FILE is the name of an IDL file to load the interface from if it is not found in the interface repository. This capability is not yet implemented.

Language Mapping

Top

See the description in CORBA::omniORB::mapping.

Functions in the CORBA module

Top

ORB_init ID
is_nil OBJ

Methods of CORBA::Any

Top

new ( TYPE, VALUE )

Constructs a new any from TYPE (of class CORBA::TypeCode) and VALUE.

type

Returns the type of the any, as a CORBA::TypeCode.

value

Returns the value of the any.

Methods of CORBA::ORB

Top

object_to_string ( OBJ )
list_initial_services
resolve_initial_references ( ID )
string_to_object ( STRING )
cdr_encode ( VAL, TC )
cdr_decode ( CDR, TC)
preload ( REPOID )

Force the interface specified by REPOID to be loaded from the Interface Repository. Returns a true value if REPOID represents interface (dk_Interface), false otherwise.

run
shutdown ( WAIT_FOR_COMPLETION )
perform_work
work_pending
destroy

Methods of CORBA::Object

Top

_get_interface
_non_existent
_is_a
_is_equivalent
_hash
_repoid
_self

Methods of CORBA::TypeCode

Top

new ( REPOID )

Create a new typecode object for the type with the repository id REPOID. Support for the basic types is provided by the pseudo-repository IDs 'IDL:CORBA/XXX:1.0', where XXX is one of Short, Long, UShort, ULong, UShort, ULong, Float, Double, Boolean, Char, Octet, Any, TypeCode, Principal, Object or String. Note that the capitalization here agrees with the C++ names for the types, not with that found in the typecode constant.

In the future, this scheme will probably be revised, or replaced.

kind
equal ( TC )
equivalent ( TC )
get_compact_typecode
id
name
member_count
member_name ( INDEX )
member_type ( INDEX )
member_label ( INDEX )
discriminator_type
default_index
length
content_type
fixed_digits
fixed_scale

Methods of PortableServer::POA

Top

_get_the_name
_get_the_parent
_get_the_POAManager
_get_the_activator
_set_the_activator
create_POA ( ADAPTER_NAME, MNGR_SV, ... )
get_servant_manager
set_servant_manager
get_servant
set_servant
activate_object
activate_object_with_id
deactivate_object
create_reference
create_reference_with_id
servant_to_id
servant_to_reference
reference_to_servant
reference_to_id
id_to_servant
id_to_reference

Methods of PortableServer::POAManager

Top

activate
hold_requests ( WAIT_FOR_COMPLETION )
discard_requests ( WAIT_FOR_COMPLETION )
deactivate ( ETHEREALIZE_OBJECTS, WAIT_FOR_COMPLETION )
get_state

Methods of PortableServer::Current

Top

get_POA
get_object_id

AUTHOR

Top

Owen Taylor <otaylor@gtk.org>

SEE ALSO

Top

perl(1).


CORBA-omniORB documentation Contained in the CORBA-omniORB distribution.

package CORBA::omniORB;

use strict;
no strict qw(refs);
use vars qw($VERSION @ISA);

require DynaLoader;
require Error;

require CORBA::omniORB::Fixed;
require CORBA::omniORB::LongLong;
require CORBA::omniORB::ULongLong;
require CORBA::omniORB::LongDouble;

@ISA = qw(DynaLoader);

$VERSION = '0.9';

bootstrap CORBA::omniORB $VERSION;

sub import {
    my $pkg = shift;

    my %keys = @_;

    if (exists $keys{ids}) {
	my $orb = CORBA::ORB_init ("omniORB4");

	my @ids = @{$keys{ids}};
	while (@ids) {
	    my ($id, $idlfile) = splice(@ids, 0, 2);

	    eval { $orb->preload($id); };
	    if( $@ ) {
		require Carp;
		Carp::carp("Could not preload '$id'");
	    }
	}
    }

    if (exists $keys{'wait'}) {
	CORBA::omniORB::debug_wait();
    }

}

END {
    foreach my $repoid (keys %CORBA::omniORB::_interfaces) {
	CORBA::omniORB::clear_interface($repoid);
    }
    my $orb = CORBA::ORB_init ("omniORB4");
    $orb->destroy();
}

package CORBA::Object;

use Carp;

use vars qw($AUTOLOAD);
sub AUTOLOAD {
    my ($self, @rest) = @_;

    my ($method) = $AUTOLOAD =~ /.*::([^:]+)/;

    # Don't try to autoload DESTROY methods - for efficiency

    if ($method eq 'DESTROY') {
	return 1;
    }

    my $id = $self->_repoid;
    if (!defined $id || $id eq '') {
	croak "Can't locate object method $method"
	    . " for object with no repository ID";
    }

    my $newclass = CORBA::omniORB::find_interface ($id);

    if (!defined $newclass) {
	my $iface = $self->_get_interface;
	defined $iface || croak "Can't get interface '$id'\n";
	$newclass = CORBA::omniORB::load_interface ($iface);
    }

    defined $newclass or die "Can't get interface information";

    my ($oldclass) = "$self" =~ /:*([^=]*)/;
    $oldclass ne $newclass or
	croak qq(Can\'t locate object method "$method" via package "$oldclass");

    bless $self, $newclass;

#       The following goto doesn't work for some reason -
#       the mark stack isn't set correctly.
#	goto &{"$ {newclass}::$ {method}"};

# This is decent, but gets the call stack wrong
    $self->$method(@rest);
}

@POA_PortableServer::ServantActivator::ISA = qw(PortableServer::ServantBase);
@POA_PortableServer::ServantLocator::ISA = qw(PortableServer::ServantBase);
@POA_PortableServer::AdapterActivator::ISA = qw(PortableServer::ServantBase);

package CORBA::Exception;

@CORBA::Exception::ISA = qw(Error);

sub stringify {
    my $self = shift;
    "Exception: ".ref($self)." ('".$self->_repoid."')";
}

sub _repoid {
    no strict qw(refs);

    my $self = shift;
    $ {ref($self)."::_repoid"};
}

package CORBA::SystemException;

sub stringify {
    my $self = shift;
    my $retval = $self->SUPER::stringify;
    $retval .= "\n    ($self->{-minor}, $self->{-status})";
    if (exists $self->{-text}) {
	$retval .= "\n   $self->{-text}";
    }
    $retval;
}

package CORBA::UserException;

sub new {
    my $pkg = shift;
    if (@_ == 1 || ref($_[0]) eq 'ARRAY') {
	$pkg->SUPER::new(@{$_[0]});
    } else {
	$pkg->SUPER::new(@_);
    }
}

package DynamicAny;

package DynamicAny::DynAny;

package DynamicAny::DynFixed;
@DynamicAny::DynFixed::ISA    = qw(DynamicAny::DynAny);
package DynamicAny::DynEnum;
@DynamicAny::DynEnum::ISA     = qw(DynamicAny::DynAny);
package DynamicAny::DynStruct;
@DynamicAny::DynStruct::ISA   = qw(DynamicAny::DynAny);
package DynamicAny::DynUnion;
@DynamicAny::DynUnion::ISA    = qw(DynamicAny::DynAny);
package DynamicAny::DynSequence;
@DynamicAny::DynSequence::ISA = qw(DynamicAny::DynAny);
package DynamicAny::DynArray;
@DynamicAny::DynArray::ISA    = qw(DynamicAny::DynAny);
package DynamicAny::DynValue;
@DynamicAny::DynArray::ISA    = qw(DynamicAny::DynAny);

package DynamicAny::DynAnyFactory;

# Preloaded methods go here.

# Autoload methods go after =cut, and are processed by the autosplit program.

1;
__END__