I have Apache::Session::Oracle running. It creates the session fine, but
after accessing the page successfully a few times, the script gets held
up waiting for a lock to release and page never loads until I restart
Apache. Here is the sample code I am using. Is there something I need to
do with Apache::Session::Oracle, so it will release a lock it creates.
I am not that familiar with how locks are created in Oracle, but my DBA
took a look at the database, and said that there were some stale locks. I
can run Apache::Session::Oracle under CGI without a problem. Any tips?

brian

use strict;
use Apache;
use DBI ();
use CGI qw(:standard);
use vars qw($DBH);
use Apache::Session::Oracle;

use constant DB     => 'DBI:Oracle:foo';
use constant DBAUTH => '<user_id>:<password>';
use constant EXPIRE => 3;  # allow 3 days before expiration
use constant COOKIE_NAME => 'Session1';

my $r = Apache->request();

$r->status(200);
$r->content_type("text/html");


# Open the database
$DBH ||= DBI->connect(DB, split(':', DBAUTH, 2), {PrintError => 0}) 
    || die "Couldn't open database: ", $DBI::errstr;


my $session_id = cookie(COOKIE_NAME) unless param('new');

$session_id = $session_id ? $session_id : undef;

my %session;

tie %session, 'Apache::Session::Oracle', 
  $session_id,
  {Handle     => $DBH };


my $input = param('input');
$session{name} = $input if $input;

print header(-Cookie  => [cookie(-name    => COOKIE_NAME,
         -value   => $session{_session_id},
         -expires => '+' . EXPIRE . 'd'),
        cookie(-name    => 'sessionID',
         -value   => 'no longer valid',
         -expires => '-1d')
        ]
      ),
  start_html(-Title   => 'Hangman 7',
       -bgcolor => 'white');

print<<__EOS__;

Hello<br>
Session ID number is: $session{_session_id}<br>
The Session ID is embedded in the URL<br>
<br>
Your input to the form was: $input<br>
Your name is <b>$session{name}</b><br>

<br>
<a href="http://penguin:8080/perl/example_db.perl";>Reload this session</a><br>
<a href="http://penguin:8080/perl/example_db.perl?new=1";>New session</a>

<form action="http://penguin:8080/perl/example_db.perl"; method="post">
  Type in your name here:
  <input name="input">
  <input type="submit" value="Go!">
</form>
__EOS__

print end_html;

-- 
Brian Lavender
http://www.brie.com/brian/

Reply via email to