Persistent DB  connection working fine with Apache::DBI .


But When I try to benchmark the performance with  apache  “ab” command  ( ab -n 100 -c 3  hostname ) ,  It failed with  Segmentation fault (11) .


I have enabled the DBI trace and it shows like


“ DBD::Oracle::st execute failed: ORA-01002: fetch out of sequence (DBD ERROR: OCIStmtExecute) [for Statement “


Any suggestion on this ?





From: Brad Van Sickle [mailto:bvs7085@gmail.com]
Sent: Saturday, September 12, 2009 9:29 PM
To: Kulasekaran, Raja
Cc: mod_perl list
Subject: Re: FW: Apache::DBI Failed due to +GlobalRequest


That simple modification of the code I gave you should solve your problem in 2 minutes. No need to downgrade.

Kulasekaran, Raja wrote:



Great. I guess this might solve the problem.


I had found in one of the forum stating that  we can write a handler which generates the “$r” global object  before initiate the Apache::DBI  connection .  Is that possible ? .


Otherwise, Shall I  install Apache::DBI 1.06 instead of Apache::DBI 1.07 ?





From: Brad Van Sickle [mailto:bvs7085@gmail.com]
Sent: Saturday, September 12, 2009 7:54 PM
To: mod_perl list
Cc: Kulasekaran, Raja
Subject: Re: FW: Apache::DBI Failed due to +GlobalRequest


I've run into this before.   It's a bug in v1.07 of Apache::DBI

Open up the Apache/DBI.pm source file (on one of my test systems it's installed in /usr/lib/perl5/site_perl/5.8.8/Apache/DBI.pm) aind the following block of code:
   if (!$Rollback{$Idx}) {
        my $r;
        if (MP2) {
                $r = Apache2::RequestUtil->request;
        elsif (Apache->can('push_handlers')) {
            $r = 'Apache';

The problem with this is that if you're calling this from startup.pl you're not actually in a request at that point  (as someone already mentioned) so without the eval there the script dies.

Fix it by wrapping the "$r = Apache2::RequestUtil->request;" part in an eval so it looks like this: eval { $r = Apache2::RequestUtil->request;}

André Warnier wrote:

Kulasekaran, Raja wrote:


Thanks for your mail. I did tried. It's not working .

Yes, I am sorry.  I did not look close enough at the following error :

[Thu Sep 10 14:39:30 2009] [error] Global $r object is not available.
Set:\n\tPerlOptions +GlobalRequest\nin httpd.conf at
/var/www/audashboard/exec/startup.pl line 24.\nCompilation failed in
require at (eval 5) line 1.\n

In a mod_perl *request* handler, the first argument
(my $r = shift;)
is usually a pointer to the current Request object.

But in your startup script (startup.pl), that is not the case, because when that script is run, there is no request yet.
I don't know what you are trying to do with $r in that startup script, but something is wrong and maybe the error message above is misleading.
(I mean that it may have nothing to do with GlobalRequest at that stage.)