[prev] [thread] [next] [Date index for 2005/01/18]
Hello All,
I'm struggling with some strange problem.
I have the following error message:
TAuction::Biz::Base::Lot can't load TAuction::Biz::User:
TAuction::Biz::User can't load TAuction::Biz::Lot: Can't locate object
method "__lot_extra" via package "TAuction::Biz::Lot" at
../lib/TAuction/Biz/Lot.pm line 18.
Compilation failed in require at ../lib/Class/DBI.pm line 1211. at
../lib/Class/DBI/Relationship/HasMany.pm line 20
Compilation failed in require at ../lib/Class/DBI.pm line 1211. at
/home/ag/apps/perl-5.8.5/lib/site_perl/5.8.5/Class/DBI/Relationship/HasA.pm
line 22
Compilation failed in require at (eval 2) line 3.
...propagated at /home/ag/apps/perl-5.8.5/lib/5.8.5/base.pm line 85.
BEGIN failed--compilation aborted at ../lib/TAuction/Biz/Lot/Delayed.pm
line 6.
the files in question looks like:
-8<-------8<-------8<-------8<-------8<-------8<------
package TAuction::Biz::Base::Lot;
use base qw(TAuction::Class::DBI);
__PACKAGE__->columns(Primary => qw(id));
__PACKAGE__->columns(Essential => qw(owner_id...));
__PACKAGE__->has_a(owner_id => 'TAuction::Biz::User');
....
__PACKAGE__->mk_classdata('__lot_extra'); # here it works ok
-8<-------8<-------8<-------8<-------8<-------8<------
package TAuction::Biz::Lot;
use base qw(TAuction::Biz::Base::Lot);
__PACKAGE__->table('lot');
__PACKAGE__->__lot_extra('TAuction::Biz::LotExtra');
-8<-------8<-------8<-------8<-------8<-------8<------
package TAuction::Biz::Lot::Delayed;
use base qw(TAuction::Biz::Base::Lot);
__PACKAGE__->table('lot_delayed');
__PACKAGE__->__lot_extra('TAuction::Biz::LotExtra::Delayed');
-8<-------8<-------8<-------8<-------8<-------8<------
package TAuction::Biz::User;
use base qw(TAuction::Class::DBI);
__PACKAGE__->table('user');
__PACKAGE__->columns(Primary => qw(id));
__PACKAGE__->has_many(lots => 'TAuction::Biz::Lot', 'owner_id');
-8<-------8<-------8<-------8<-------8<-------8<------
package TAuction::BackEnd::Lot::Open;
use TAuction::Biz::Lot::Delayed; # here it dies
Class::DBI -> TAuction::Class::DBI -> TAuction::Biz::Base::Lot ->
TAuction::Biz::Lot
\->
TAuction::Biz::Lot
It looks like __PACKAGE__->mk_classdata('__lot_extra') in
TAuction::Biz::Base::Lot doesn't get executed
since it isn't available in subclasses of TAuction::Biz::Base::Lot
(TAuction::Biz::Lot and TAuction::Biz::Lot::Delayed)
I've put 'use base qw(....)' on the top of each class, before all the
other 'use's,
but it seems that __PACKAGE__->... are executed after all the 'use's are
processed
Where can I read more an this issue ?
How can I work this around ? I suppose I need to write my own method for
this purpose
instead of relying on Class::Data::Inheritable ?
Sincerely,
Aleksandr
|
Inheritance problem
|
|
Re: Inheritance problem
|
Generated at 17:42 on 27 Jan 2005 by mariachi v0.52