]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Storage.pm
big changes in little china
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Storage.pm
1 package OpenILS::Application::Storage;
2 use OpenSRF::Application;
3 use base qw/OpenSRF::Application/;
4
5 use OpenSRF::EX qw/:try/;
6 use OpenSRF::Utils::Logger qw/:level/;
7
8 # Pull this in so we can adjust it's @ISA
9 use OpenILS::Application::Storage::CDBI (1);
10 use OpenILS::Application::Storage::FTS;
11
12
13 # the easy way to get to the logger...
14 my $log = "OpenSRF::Utils::Logger";
15
16 sub DESTROY {};
17
18 sub initialize {
19
20         my $conf = OpenSRF::Utils::SettingsClient->new;
21
22         $log->debug('Initializing ' . __PACKAGE__ . '...', DEBUG);
23
24         my $driver = "OpenILS::Application::Storage::Driver::".
25                 $conf->config_value( apps => 'open-ils.storage' => app_settings => databases => 'driver');
26
27
28         $log->debug("Attempting to load $driver ...", DEBUG);
29
30         eval "use $driver;";
31         if ($@) {
32                 $log->debug( "Can't load $driver!  :  $@", ERROR );
33                 $log->error( "Can't load $driver!  :  $@");
34                 throw OpenILS::EX::PANIC ( "Can't load $driver!  :  $@" );
35         }
36
37         $log->debug("$driver loaded successfully", DEBUG);
38
39         # Suck in the method publishing modules
40         @OpenILS::Application::Storage::CDBI::ISA = ( $driver );
41
42         eval 'use OpenILS::Application::Storage::Publisher;';
43         eval 'use OpenILS::Application::Storage::WORM;';
44 }
45
46 sub child_init {
47
48         $log->debug('Running child_init for ' . __PACKAGE__ . '...', DEBUG);
49
50         my $conf = OpenSRF::Utils::SettingsClient->new;
51
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')
55         );
56
57         if (OpenILS::Application::Storage::CDBI->db_Main()) {
58                 OpenILS::Application::Storage::WORM->child_init();
59                 $log->debug("Success initializing driver!", DEBUG);
60                 return 1;
61         }
62         return 0;
63 }
64
65 sub begin_xaction {
66         my $self = shift;
67         my $client = shift;
68
69         $log->debug(" XACT --> 'BEGIN'ing transaction for session ".$client->session->session_id,DEBUG);
70         return OpenILS::Application::Storage::CDBI->db_Main->begin_work;
71 }
72 __PACKAGE__->register_method(
73         method          => 'begin_xaction',
74         api_name        => 'open-ils.storage.transaction.begin',
75         api_level       => 1,
76         argc            => 0,
77 );
78
79 sub commit_xaction {
80         my $self = shift;
81         my $client = shift;
82
83         $log->debug(" XACT --> 'COMMIT'ing transaction for session ".$client->session->session_id,DEBUG);
84         return OpenILS::Application::Storage::CDBI->db_Main->commit;
85 }
86 __PACKAGE__->register_method(
87         method          => 'commit_xaction',
88         api_name        => 'open-ils.storage.transaction.commit',
89         api_level       => 1,
90         argc            => 0,
91 );
92
93
94 sub rollback_xaction {
95         my $self = shift;
96         my $client = shift;
97
98         $log->debug(" XACT --> 'ROLLBACK'ing transaction for session ".$client->session->session_id,DEBUG);
99         return OpenILS::Application::Storage::CDBI->db_Main->rollback;
100 }
101 __PACKAGE__->register_method(
102         method          => 'rollback_xaction',
103         api_name        => 'open-ils.storage.transaction.rollback',
104         api_level       => 1,
105         argc            => 0,
106 );
107
108
109 sub _cdbi2Hash {
110         my $self = shift;
111         my $obj = shift;
112         return { map { ( $_ => $obj->$_ ) } ($obj->columns('All')) };
113 }
114
115 sub _cdbi_list2AoH {
116         my $self = shift;
117         my @objs = @_;
118         return [ map { $self->_cdbi2Hash($_) } @objs ];
119 }
120
121 1;