1 package OpenILS::Application::Storage;
2 use OpenSRF::Application;
3 use base qw/OpenSRF::Application/;
5 use OpenSRF::EX qw/:try/;
6 use OpenSRF::Utils::Logger qw/:level/;
8 # Pull this in so we can adjust it's @ISA
9 use OpenILS::Application::Storage::CDBI (1);
10 use OpenILS::Application::Storage::FTS;
13 # the easy way to get to the logger...
14 my $log = "OpenSRF::Utils::Logger";
20 my $conf = OpenSRF::Utils::SettingsClient->new;
22 $log->debug('Initializing ' . __PACKAGE__ . '...', DEBUG);
24 my $driver = "OpenILS::Application::Storage::Driver::".
25 $conf->config_value( apps => 'open-ils.storage' => app_settings => databases => 'driver');
28 $log->debug("Attempting to load $driver ...", DEBUG);
32 $log->debug( "Can't load $driver! : $@", ERROR );
33 $log->error( "Can't load $driver! : $@");
34 throw OpenILS::EX::PANIC ( "Can't load $driver! : $@" );
37 $log->debug("$driver loaded successfully", DEBUG);
39 # Suck in the method publishing modules
40 @OpenILS::Application::Storage::CDBI::ISA = ( $driver );
42 eval 'use OpenILS::Application::Storage::Publisher;';
43 eval 'use OpenILS::Application::Storage::WORM;';
48 $log->debug('Running child_init for ' . __PACKAGE__ . '...', DEBUG);
50 my $conf = OpenSRF::Utils::SettingsClient->new;
52 $log->debug('Calling the Driver child_init', DEBUG);
53 OpenILS::Application::Storage::CDBI->child_init(
54 $conf->config_value( apps => 'open-ils.storage' => app_settings => databases => 'database')
57 if (OpenILS::Application::Storage::CDBI->db_Main()) {
58 OpenILS::Application::Storage::WORM->child_init();
59 $log->debug("Success initializing driver!", DEBUG);
69 $log->debug(" XACT --> 'BEGIN'ing transaction for session ".$client->session->session_id,DEBUG);
71 OpenILS::Application::Storage::CDBI->db_Main->begin_work;
72 $client->session->session_data( xact_id => $client->session->session_id );
74 throw OpenSRF::DomainObject::oilsException->new(
76 status => "Could not BEGIN transaction!",
82 __PACKAGE__->register_method(
83 method => 'begin_xaction',
84 api_name => 'open-ils.storage.transaction.begin',
94 OpenILS::Application::Storage::CDBI->db_Main->commit;
95 $client->session->session_data( xact_id => '' );
97 throw OpenSRF::DomainObject::oilsException->new(
99 status => "Could not COMMIT transaction!",
104 __PACKAGE__->register_method(
105 method => 'commit_xaction',
106 api_name => 'open-ils.storage.transaction.commit',
116 return $client->session->session_data( 'xact_id' );
118 __PACKAGE__->register_method(
119 method => 'current_xact',
120 api_name => 'open-ils.storage.transaction.current',
125 sub rollback_xaction {
129 $log->debug(" XACT --> 'ROLLBACK'ing transaction for session ".$client->session->session_id,DEBUG);
130 $client->session->session_data( xact_id => '' );
131 return OpenILS::Application::Storage::CDBI->db_Main->rollback;
133 __PACKAGE__->register_method(
134 method => 'rollback_xaction',
135 api_name => 'open-ils.storage.transaction.rollback',
144 return { map { ( $_ => $obj->$_ ) } ($obj->columns('All')) };
150 return [ map { $self->_cdbi2Hash($_) } @objs ];