You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hivemind.apache.org by Eli Doran <el...@gmail.com> on 2005/07/05 21:25:51 UTC

some 'how to' questions

Hello, I thought it may be more appropriate to send this to the hivemind 
list because it seems to relate more to hivemind. Please, correct me if 
i'm wrong.  
Below I wrote a few classes representing a simple trio: an object 
(*Member*), a service supplying the object from a key (*Members*), a 
holder of that object for serialization (*MemberHolder*) that only 
serializes the key necessary to restore its *Member* reference.

*Brief:*
    Can you have hivemind reinsert a service into a deserialized state 
object that it previously stored into the session? (reconfigure upon 
deserializing)
    How do you check for or get rid of a state object from Java code?

*Verbose: *

How do I get the *Members* service restored into *MemberHolder* when it 
is deserialized from the session?

I can check if the holder object has been created using 
"state:MemberHolder". But there is no ognl equivalent expression so can 
you not check the existence of state objects from java code without 
forcing creation? Would a call to getMemberHolder (injected property) 
cause the creation of the MemberHolder state object and the session to 
store it in?

Upon logout how do you null the member holder so it's no longer stored 
into the session? I can inject *MemberHolder* into the pages that need 
it but would *setMemberHolder(null)* remove the state object from the 
session?


thank you,
eli

class Member
{
  Integer id;
  String name;
  //obvious get/sets
}

class MemberHolder implements java.io.Serializable
{
  Integer id;
  transient Member member;
  transient Members members;

  // get/sets for member and members
  // if member is null then getMember would
  //use the Integer to get member from Members
}

class Members
{
   Member getMember( Integer id )
}


<service-point id="Members" interface="com.elidoran.member.Members">
  <create-instance class="com.elidoran.member.MembersMap"/>
</service-point>
 
This creates the MemberHolder using a builder service because the 
state-object schema requires the object reference in invoke-factory so 
you can't use hivemind.BuilderFactory. The only reason to not use 
create-instance is to set the Members service into the MemberHolder upon 
creation. So, instead I created a builder service for it and set the 
Members service into that which uses it for newly created MemberHolders.

<contribution configuration-id="tapestry.state.ApplicationObjects">
  <state-object name="MemberHolder" scope="session">
    <invoke-factory object="service:MemberHolderBuilder"/>
  </state-object>
</contribution>
 
<service-point id="MemberHolderBuilder" 
interface="org.apache.tapestry.engine.state.StateObjectFactory">
  <invoke-factory>
    <construct class="com.elidoran.member.MemberHolderBuilder">
       <set-object property="members" value="service:Members"/>
    </construct>
  </invoke-factory>
</service-point>