01: /*
02: * Created on 06-Jan-2006
03: */
04: package uk.org.ponder.rsf.state.entity;
05:
06: import uk.org.ponder.beanutil.IterableBeanLocator;
07: import uk.org.ponder.beanutil.WriteableBeanLocator;
08:
09: /** A request-scope container managing a set of entities, probably managed
10: * by some form of ORM solution. Note that the semantics of ALL the inherited
11: * methods are somewhat specific.
12: * <p> locateBean(String ID) - The ID is interpreted as the rendered form of an underlying
13: * database ID, UNLESS it begins with the special prefix BeanUtil.NEW_ENTITY_PREFIX.
14: * If it is not a new entity, the actual ID type will be parsed, and the existing
15: * persistent entity of the type handled by this locator will be returned. If the
16: * ID *does* contain the new entity prefix, a new, default-constructed
17: * entity of the correct type will be returned. Any newly-constructed entities of this sort will
18: * be made persistent by the final actions of the AlterationWrapper active for
19: * this request, which cooperates with all OEBL's currently serving, to harvest
20: * their new entities. As object IDs are assigned by this process,
21: * the EntityIDAssignmentListeners registered with this locator will be informed,
22: * to allow correct propagation of object references out of the current context.
23: *
24: * <p> set(String ID, Object newobj) The object is assumed to be somehow "detached"
25: * or "non-persistent". The user takes responsibility for not supplying an object
26: * in an incorrect persistence state. If the ID begins with the NEW_ENTITY_PREFIX,
27: * the new object had BETTER not have any persistent role, since it will be
28: * interpreted as a currently "transient" entity (in Hibernate-speak) that will be
29: * subject to being saved by the same semantics as entities auto-created by get().
30: * If the ID is not a "new" one, the supplied object will assumed to be "detached"
31: * and will be freshened to the currently active session.
32: *
33: * <p> iterator() This is the source of the "obstinacy" of the BeanLocator. The
34: * iterator() method will ONLY dispense objects that have previously been
35: * referenced through set() and get(), and NOT the entire collection (table)
36: * backing the locator. This method is principally expected to be used by
37: * a StatePreservationStrategy at the terminus of a request. For servicing
38: * "genuine" user-level queries, use a dedicated query "DAO".
39: *
40: * <p> remove(String ID) The object referenced by the supplied (persistent) ID
41: * will be "unlinked". I.e., it will be removed both from persistent state,
42: * and from the "delivered" list of objects constituting the iterable collection.
43: * @author Antranig Basman (amb26@ponder.org.uk)
44: */
45:
46: public interface ObstinateEntityBeanLocator extends
47: WriteableBeanLocator, IterableBeanLocator {
48:
49: }
|