You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Dylan Weed <dw...@fas.harvard.edu> on 2000/06/01 02:12:59 UTC

Apache::Session and blessed references

I can't seem to get Apache::Session to save the blessedness of an object.  
Is this an oversight on my part, a limitation of the module, a limitation
of the database, or an intentional design decision?  

Conceptually, it seems as though an objects blessing is stored in a
different place in the Perl guts than its contents.  Is the problem just
that Apache::Session never saves this information to the database?

Has anyone else had occasion to do this?



An example in Perl:

# %session is a hash tied to a DB with Apache::Session 1.51

package main;

my $dog_obj = { name => 'Fido', breed => 'Mutt' };

bless ($dog_obj, 'Dog');

$dog_obj->bark();
$session{my_dog} = $dog_obj;

# The following line dies with an error:
#       cannot call method bark on unblessed reference.
$session{my_dog}->bark();

package Dog;

sub bark {
	my $self = shift;
	print "Woof! I'm $self->{name}";
}


Re[2]: Apache::Session and blessed references

Posted by serg gajdajchuk <el...@mail.ru>.

Re[2]: Apache::Session and blessed references

Posted by serg gajdajchuk <el...@mail.ru>.

Re: Apache::Session and blessed references

Posted by "Jeffrey W. Baker" <jw...@acm.org>.
On Wed, 31 May 2000, Dylan Weed wrote:

> 
> I can't seem to get Apache::Session to save the blessedness of an object.  
> Is this an oversight on my part, a limitation of the module, a limitation
> of the database, or an intentional design decision?  
> 
> Conceptually, it seems as though an objects blessing is stored in a
> different place in the Perl guts than its contents.  Is the problem just
> that Apache::Session never saves this information to the database?
> 
> Has anyone else had occasion to do this?

Well, that sucks a lot.  This is actually a bug in Apache::Session.  If it
was working properly, blessed references should be fine.  Unfortunately,
the module doesn't seem to be saving hash entries that are added
immediately after creation.  I will fix this tomorrow.

Also I will add a test for this case.

> 
> 
> 
> An example in Perl:
> 
> # %session is a hash tied to a DB with Apache::Session 1.51
> 
> package main;
> 
> my $dog_obj = { name => 'Fido', breed => 'Mutt' };
> 
> bless ($dog_obj, 'Dog');
> 
> $dog_obj->bark();
> $session{my_dog} = $dog_obj;
> 
> # The following line dies with an error:
> #       cannot call method bark on unblessed reference.
> $session{my_dog}->bark();
> 
> package Dog;
> 
> sub bark {
> 	my $self = shift;
> 	print "Woof! I'm $self->{name}";
> }
> 
> 


Re: Apache::Session and blessed references

Posted by Dylan Weed <dw...@fas.harvard.edu>.
Hi Jeffrey --

I'm pretty sure the problem is reproducible, but I'll rerun the dog 
test case tomorrow when I get a chance and let you know whether
things are still broken.  I'll also flesh it out into a complete program.

One unique thing about our configuration is that we're using Apache
1.3.12/mod_perl 1.24/Perl 5.6.0.  (We're also running under Linux and
using mysql locking if it matters.)  We're running Perl 5.6 because we
want to avoid the dying-in-an-eval bug in 5.005, but I can't say that I
trust 5.6 entirely -- it seems to still have a few nasty bugs.  Were you
running your latest tests under 5.6?  And do you think it's possible that
the bug might be a 5.6/Apache::Session interaction?

I'll write again tomorrow with more info.
	
	Thanks,

	 -- Dylan

On Sun, 23 Jul 2000, Jeffrey W. Baker wrote:

> On Wed, 31 May 2000, Dylan Weed wrote:
> 
> > 
> > I can't seem to get Apache::Session to save the blessedness of an object.  
> > Is this an oversight on my part, a limitation of the module, a limitation
> > of the database, or an intentional design decision?  
> > 
> > Conceptually, it seems as though an objects blessing is stored in a
> > different place in the Perl guts than its contents.  Is the problem just
> > that Apache::Session never saves this information to the database?
> > 
> > Has anyone else had occasion to do this?
> > 
> > 
> > 
> > An example in Perl:
> > 
> > # %session is a hash tied to a DB with Apache::Session 1.51
> > 
> > package main;
> > 
> > my $dog_obj = { name => 'Fido', breed => 'Mutt' };
> > 
> > bless ($dog_obj, 'Dog');
> > 
> > $dog_obj->bark();
> > $session{my_dog} = $dog_obj;
> > 
> > # The following line dies with an error:
> > #       cannot call method bark on unblessed reference.
> > $session{my_dog}->bark();
> > 
> > package Dog;
> > 
> > sub bark {
> > 	my $self = shift;
> > 	print "Woof! I'm $self->{name}";
> > }
> 
> 
> You know, I thought that there was a problem here when I first saw this
> email, but today I simply cannot reproduce it.  When I run the example
> program, everything barks.
> 
> Can you still reproduce this problem, and, if so, could you please send me
> a complete, working perl program as a demonstration?
> 
> Regards,
> Jeffrey
> 


Re: Apache::Session and blessed references

Posted by "Jeffrey W. Baker" <jw...@acm.org>.
On Wed, 31 May 2000, Dylan Weed wrote:

> 
> I can't seem to get Apache::Session to save the blessedness of an object.  
> Is this an oversight on my part, a limitation of the module, a limitation
> of the database, or an intentional design decision?  
> 
> Conceptually, it seems as though an objects blessing is stored in a
> different place in the Perl guts than its contents.  Is the problem just
> that Apache::Session never saves this information to the database?
> 
> Has anyone else had occasion to do this?
> 
> 
> 
> An example in Perl:
> 
> # %session is a hash tied to a DB with Apache::Session 1.51
> 
> package main;
> 
> my $dog_obj = { name => 'Fido', breed => 'Mutt' };
> 
> bless ($dog_obj, 'Dog');
> 
> $dog_obj->bark();
> $session{my_dog} = $dog_obj;
> 
> # The following line dies with an error:
> #       cannot call method bark on unblessed reference.
> $session{my_dog}->bark();
> 
> package Dog;
> 
> sub bark {
> 	my $self = shift;
> 	print "Woof! I'm $self->{name}";
> }


You know, I thought that there was a problem here when I first saw this
email, but today I simply cannot reproduce it.  When I run the example
program, everything barks.

Can you still reproduce this problem, and, if so, could you please send me
a complete, working perl program as a demonstration?

Regards,
Jeffrey