On Fri, 7 May 2004, Frank Wiles wrote:

>   Well the source leads me to believe they already know it doesn't work
>   with mp2.  To quote it "TODO - Should check for mod_perl 2 and do
>   the right thing there".

I made some changes to make Apache-DBI work with mod_perl2 a few months ago.
It works great for me. I gave them to Ask, but nothing was apparently done
with it.

It's not elegant, but it works for me. Here is the diff:


--- DBI.pm      Tue Feb 17 16:18:50 2004
+++ DBI.pm.new  Thu Feb 26 14:52:49 2004
@@ -8,6 +8,7 @@
 use Carp qw(carp);

 require_version DBI 1.00;
+use constant MP2 => $mod_perl::VERSION >= 1.99;

 $Apache::DBI::VERSION = '0.94';

@@ -32,9 +33,14 @@
     # provide a handler which creates all connections during server startup

     # TODO - Should check for mod_perl 2 and do the right thing there
-    carp "Apache.pm was not loaded\n" and return unless $INC{'Apache.pm'};
-    if([EMAIL PROTECTED] and Apache->can('push_handlers')) {
-        Apache->push_handlers(PerlChildInitHandler => \&childinit);
+    if (MP2) {
+       Apache->server->push_handlers(PerlChildInitHandler => \&childinit);
+    }
+    else {
+       carp "Apache.pm was not loaded\n" and return unless $INC{'Apache.pm'};
+       if([EMAIL PROTECTED] and Apache->can('push_handlers')) {
+           Apache->push_handlers(PerlChildInitHandler => \&childinit);
+       }
     }
     # store connections
     push @ChildConnect, [EMAIL PROTECTED];
@@ -94,12 +100,23 @@
     # this PerlCleanupHandler is supposed to initiate a rollback after the script has 
finished if AutoCommit is off.
     my $needCleanup = ($Idx =~ /AutoCommit[^\d]+0/) ? 1 : 0;
     # TODO - Fix mod_perl 2.0 here
-    if(!$Rollback{$Idx} and $needCleanup and Apache->can('push_handlers')) {
-        print STDERR "$prefix push PerlCleanupHandler \n" if $Apache::DBI::DEBUG > 1;
-        Apache->push_handlers("PerlCleanupHandler", \&cleanup);
-        # make sure, that the rollback is called only once for every
-        # request, even if the script calls connect more than once
-        $Rollback{$Idx} = 1;
+    if (MP2) {
+       if(!$Rollback{$Idx} and $needCleanup) {
+           print STDERR "$prefix push PerlCleanupHandler \n" if $Apache::DBI::DEBUG > 
1;
+           Apache->server->push_handlers("PerlCleanupHandler", \&cleanup);
+           # make sure, that the rollback is called only once for every
+           # request, even if the script calls connect more than once
+           $Rollback{$Idx} = 1;
+        }
+    }
+    else {
+       if(!$Rollback{$Idx} and $needCleanup and Apache->can('push_handlers')) {
+           print STDERR "$prefix push PerlCleanupHandler \n" if $Apache::DBI::DEBUG > 
1;
+           Apache->push_handlers("PerlCleanupHandler", \&cleanup);
+           # make sure, that the rollback is called only once for every
+           # request, even if the script calls connect more than once
+           $Rollback{$Idx} = 1;
+       }
     }

     # do we need to ping the database ?

-- 
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to