package SomeFramework::JobsQueue::Executor; use Moose; use MooseX::Params::Validate; has queue { isa => 'SomeFramework::JobsQueue', required => 1, reader => 'get_queue', writer => '_set_queue' } # This attribute is being set by the framework when the framework # creates the SomeFramework::JobsQueue::Runner-based object sub execute { my($self, $job, $options) = validated_hash( \@_, job => { isa => 'SomeFramework::JobsQueue::Job' }, options => { isa => 'HashRef' } ); my $queue = $self->get_queue; $queue->mark_as_running($job->get_id); $job->execute(options => $options); $queue->mark_as_completed($job->get_id); }