BPM-Engine

 view release on metacpan or  search on metacpan

lib/BPM/Engine.pm  view on Meta::CPAN

package BPM::Engine;

BEGIN {
    $BPM::Engine::VERSION   = '0.01';
    $BPM::Engine::AUTHORITY = 'cpan:SITETECH';
    }

use 5.010;
use namespace::autoclean;
use Moose;
use MooseX::StrictConstructor;
#use Scalar::Util ();
use BPM::Engine::Exceptions qw/throw_engine/;
use BPM::Engine::Store;
use BPM::Engine::ProcessRunner;
use BPM::Engine::Types qw/ArrayRef/;

with qw/
    MooseX::SimpleConfig
    MooseX::Traits
    BPM::Engine::Role::WithCallback
    BPM::Engine::Role::WithPersistence
    BPM::Engine::Role::WithLogger
    BPM::Engine::Handler::ProcessDefinitionHandler
    BPM::Engine::Handler::ProcessInstanceHandler
    BPM::Engine::Handler::ActivityInstanceHandler
    /;
with 'BPM::Engine::Role::EngineAPI';

#has '+configfile'       => ( default => '/etc/bpmengine/engine.yaml' );

has '+_trait_namespace' => (default => 'BPM::Engine::Trait');

has 'runner_traits' => (
    isa       => ArrayRef,
    is        => 'rw',
    default   => sub { [] },
    predicate => 'has_runner_traits'
    );

sub runner {
    my ($self, $pi) = @_;

    #Scalar::Util::weaken($self);

    my $args = {
        process_instance => $pi,
        #engine           => $self, # DEPRECATED
        logger           => $self->logger,
        };
    $args->{callback} = $self->callback      if $self->has_callback;
    $args->{traits}   = $self->runner_traits if $self->has_runner_traits;

    return BPM::Engine::ProcessRunner->new_with_traits($args);
    }

__PACKAGE__->meta->make_immutable;

1;
__END__

=pod

=encoding utf-8

=head1 NAME

BPM::Engine - Business Process Execution Engine

=head1 VERSION

0.01

=head1 SYNOPSIS

Create a new BPM engine

  use BPM::Engine;

  my $callback = sub {
      my($runner, $entity, $event, $node, $instance) = @_;
      ...
      };

  my $engine = BPM::Engine->new(
      log_dispatch_conf => 'log.conf',
      connect_info      => { dsn => $dsn, user => $user, password => $password },
      callback          => $callback
      );

Save an XPDL file with workflow process definitions, and retrieve the process 
definitions
  
  my $package = $engine->create_package('/path/to/model.xpdl');

  my @processes = $engine->get_process_definitions->all;

Create and run a process instance  
  
  my $instance = $engine->create_process_instance(
      $process, { instance_name => 'My first process run' }
      );

  $engine->start_process_instance($instance, { param1 => 'value1' });



( run in 2.850 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )