home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _96bb312e06a04233b4bc507ab09893df < prev    next >
Text File  |  2000-03-23  |  6KB  |  146 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Eroot - an eternal root to handle persistent objects</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> Eroot - an eternal root to handle persistent objects</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#abstract">ABSTRACT</A></LI>
  24.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  25.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  26.     <LI><A HREF="#instance variables">INSTANCE VARIABLES</A></LI>
  27.     <LI><A HREF="#things to avoid">THINGS TO AVOID</A></LI>
  28.     <LI><A HREF="#notes">NOTES</A></LI>
  29.     <LI><A HREF="#files">FILES</A></LI>
  30. </UL>
  31. <!-- INDEX END -->
  32.  
  33. <HR>
  34. <P>
  35. <H1><A NAME="name">NAME</A></H1>
  36. <P>Eroot - an eternal root to handle persistent objects</P>
  37. <P>
  38. <HR>
  39. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  40. <UL>
  41. <LI>Linux</LI>
  42. <LI>Solaris</LI>
  43. <LI>Windows</LI>
  44. </UL>
  45. <HR>
  46. <H1><A NAME="abstract">ABSTRACT</A></H1>
  47. <P>The Eternal Root (eroot) is given references to the root objects of any
  48. object hierarchies which must persist between separate invocations of the
  49. application.  When the eroot's destructor is called, the eroot will find all
  50. objects referenced in the object hierarchies and will store them.  All
  51. objects will be restored (if possible) when and if the <STRONG>Continue</STRONG> message
  52. is sent to the eroot.</P>
  53. <P>
  54. <HR>
  55. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  56. <PRE>
  57.         require Class::Eroot;
  58.         my $some_obj;
  59.         my $eroot = new EROOT ( 'Name' => "persist.file",
  60.                                   'Key'  => "myAppObjects" );</PRE>
  61. <PRE>
  62.         if( $eroot->Continue ){
  63.                 # No existing objects.  Start from scratch.
  64.                 $some_obj = new SomeObj;
  65.                 $eroot->Keep( "Some_obj" => $some_obj );
  66.         }
  67.         else{
  68.                 $some_obj = $eroot->Root("some_obj");
  69.         }</PRE>
  70. <PRE>
  71.         $eroot->List;
  72.         $eroot->Keep( "MyObj" => $myobj );
  73.         $eroot->Lose( "Old_Obj" );
  74.         $eroot->Lose( $this_obj );</PRE>
  75. <P>
  76. <HR>
  77. <H1><A NAME="description">DESCRIPTION</A></H1>
  78. <P>When the eroot saves a group of object hierarchies, it stores its <STRONG>key</STRONG>
  79. with them.  The key of any objects being restored must match the key of the
  80. eroot which is trying to restore them.  The <STRONG>Continue</STRONG> method will call
  81. <STRONG>die</STRONG> if the keys do not match.  Continue will return 0 if the objects were
  82. loaded and non-zero if they were not.</P>
  83. <P>The eroot will attempt to send a <STRONG>suspend</STRONG> message to the object prior to
  84. storing the object's state.  The object's class is not required to have a
  85. suspend method defined.</P>
  86. <P>When the eroot restores an object it will bless the object reference in the
  87. object's class (package) and will attempt to send a <STRONG>resume</STRONG> message to the
  88. object.  The object's class is not required to have a resume method defined.</P>
  89. <P>An object should not propagate <STRONG>suspend</STRONG> and <STRONG>resume</STRONG> messages.  The eroot
  90. will send suspend messages to the objects in the order in which they were
  91. stored in the eroot (breadth-first, root-to-leaves).  The eroot will send
  92. resume messages by starting with the classes of the objects at the leaves of
  93. the object hierarchy and moving toward the root of the object hierarchy.</P>
  94. <P>Note that Perl will call the <STRONG>destructors</STRONG> of the persistent objects.  The
  95. programmer should be prepared to deal with this.</P>
  96. <P>It is necessary to <STRONG>Keep</STRONG> an object only once.  The object will remain
  97. persistent until the eroot is told to <STRONG>Lose</STRONG> it.</P>
  98. <P>
  99. <HR>
  100. <H1><A NAME="instance variables">INSTANCE VARIABLES</A></H1>
  101. <P>References will be properly hooked up if they are type SCALAR, ARRAY, REF,
  102. or HASH.  The eroot assumes that keys and values (if the value is not a
  103. reference) for the objects' <STRONG>instance variables</STRONG> can be represented as text
  104. within single quotes.  If this is not true for your objects then the object's
  105. <STRONG>suspend</STRONG> method can be used to ``wrap'' the object for storage, and the
  106. <STRONG>resume</STRONG> method can be used to ``unwrap'' the object.</P>
  107. <P>Embedded single quotes in the value will be preserved.  This is
  108. currently the only place where single quotes are handled.</P>
  109. <P>
  110. <HR>
  111. <H1><A NAME="things to avoid">THINGS TO AVOID</A></H1>
  112. <PRE>
  113.         o Storing the eroot.
  114.         o Storing references to tie()'d variables and objects.
  115.         o Storing references to CODE objects.
  116.         o Storing the same object in two different eroots.
  117.           Unless you think you know what you're doing, of course.
  118.         o Using two eroots to store each other :)
  119.         o Storing named arrays and hashes.  These will be restored as
  120.           anonymous arrays and hashes.
  121.         o Storing an object while it has an open stream.
  122.         o Storing an object which has an %OVERLOAD somewhere in
  123.           it's class hierarchy.</PRE>
  124. <P>Know your object hierarchy.  Be sure that everything in the hierarchy
  125. can handle persistence.</P>
  126. <P>
  127. <HR>
  128. <H1><A NAME="notes">NOTES</A></H1>
  129. <P>This is not an OODBMS.</P>
  130. <P>
  131. <HR>
  132. <H1><A NAME="files">FILES</A></H1>
  133. <PRE>
  134.         Class::Eroot.pm - Eternal Root class.
  135.         persist.file    - User-defined file where objects are stored.
  136.         Class::Template.pm      - Struct/member template builder.</PRE>
  137. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  138. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  139. <STRONG><P CLASS=block> Eroot - an eternal root to handle persistent objects</P></STRONG>
  140. </TD></TR>
  141. </TABLE>
  142.  
  143. </BODY>
  144.  
  145. </HTML>
  146.