Hadoop-Inline-ClassLoader

 view release on metacpan or  search on metacpan

lib/Hadoop/Inline/ClassLoader.pm  view on Meta::CPAN

package Hadoop::Inline::ClassLoader;

use 5.014;
use strict;
use warnings;

our $VERSION = '0.002'; # VERSION

use Carp           qw( croak   );
use File::Basename qw( dirname );
use Ref::Util      qw(
    is_arrayref
    is_hashref
);

use Constant::FromGlobal
    DEBUG => {
        default => 0,
        env     => 1,
        int     => 1,
    },
;

use constant {
    CHAR_COLON        => q{:},
    EMPTY_STRING      => q{ },
    HADOOP_COMMAND    => '/usr/bin/hadoop',
    IJ_DEBUG          => DEBUG && DEBUG > 1,
    PACKAGE_DELIMITER => q{::},
    RE_MULTI_LF       => qr{ \n+ }xms,
    RE_PATH_SEP_CHAR  => qr{ [:] }xms,
    RE_WS             => qr{ \s+ }xms,
};

my $ENV_INITIALIZED;

my %DEFAULT = (
    alias => 1,
);

sub import {
    my($class, @args) = @_;

    my $opt          = @args && is_hashref $args[0] ? shift(@args) : { %DEFAULT };
    my @java_classes = @args or croak 'No java classes were defined';
    my $caller       = $opt->{export_to} || caller 1;

    if ( ! $ENV_INITIALIZED ) {
        my($henv, $paths) = $class->_collect_env( $opt );
        $ENV{$_} = $henv->{ $_ } for keys %{ $henv };

        require Inline;
        require Inline::Java;

        Inline->import(
           Java  => 'STUDY',
           STUDY => [],
           DEBUG => IJ_DEBUG,
        );

        $ENV_INITIALIZED++;
    }

    eval qq{
        package $caller;
        use Inline (
            Java  => 'STUDY',
            STUDY => [],
        ) ;
        1;
    } or do {



( run in 0.608 second using v1.01-cache-2.11-cpan-39bf76dae61 )