if (obj instanceof DatastoreItem)
{
log.debug("Returning DatastoreItem self reference.");// TODO: we could
- // store the update
- // hierarchy - so
- // retrieve parent
- // for obj.
+ // store the update
+ // hierarchy - so
+ // retrieve parent
+ // for obj.
return (DatastoreItem) obj;
}
return (DatastoreItem) dsObjReg.get(obj);
}
- public void registerDsObj(DatastoreItem dsitem)
+ synchronized void registerDsObj(DatastoreItem dsitem)
{
- synchronized (dsItemReg)
+ Object[] dsregitem = (Object[]) dsItemReg.get(dsitem);
+ if (dsregitem == null)
{
- Object[] dsregitem = (Object[]) dsItemReg.get(dsitem);
- if (dsregitem == null)
+ // create a new item entry
+ dsregitem = new Object[]
+ { dsitem.jvobj, dsitem.vobj };
+ dsItemReg.put(dsitem, dsregitem);
+ dsObjReg.put(dsitem.jvobj, dsitem);
+ dsObjReg.put(dsitem.vobj, dsitem);
+ }
+ else
+ {
+ // update registry for any changed references
+ // for the jvobject
+ if (dsitem.jvobj != dsregitem[0])
{
- // create a new item entry
- dsregitem = new Object[]
- { dsitem.jvobj, dsitem.vobj };
- dsItemReg.put(dsitem, dsregitem);
+ // overwrite existing involved entries.
+ if (dsregitem[0] != null)
+ {
+ dsObjReg.remove(dsregitem[0]);
+ }
+ if ((dsregitem[0] = dsitem.jvobj) != null)
+ {
+ dsObjReg.put(dsregitem[0], dsitem);
+ }
}
- // atomic update of the jv and vobject references in the dsObjReg
- synchronized (dsObjReg)
+ // and for the vobject
+ if (dsitem.vobj != dsregitem[1])
{
- // for the jvobject
- if (dsitem.jvobj != dsregitem[0])
+ // overwrite existing involved entries.
+ if (dsregitem[1] != null)
{
- // overwrite existing involved entries.
- if (dsregitem[0] != null)
- {
- dsObjReg.remove(dsregitem[0]);
- }
- if ((dsregitem[0] = dsitem.jvobj) != null)
- {
- dsObjReg.put(dsregitem[0], dsitem);
- }
+ dsObjReg.remove(dsregitem[1]);
}
- // and for the vobject
- if (dsitem.vobj != dsregitem[1])
+ if ((dsregitem[1] = dsitem.vobj) != null)
{
- // overwrite existing involved entries.
- if (dsregitem[1] != null)
- {
- dsObjReg.remove(dsregitem[1]);
- }
- if ((dsregitem[1] = dsitem.vobj) != null)
- {
- dsObjReg.put(dsregitem[1], dsitem);
- }
+ dsObjReg.put(dsregitem[1], dsitem);
}
}
}
* @return null or last known Object[] { jvobject, vobject } references for
* this dsitem
*/
- public Object[] removeDsObj(DatastoreItem dsitem)
+ public synchronized Object[] removeDsObj(DatastoreItem dsitem)
{
Object[] dsregitem = null;
- synchronized (dsItemReg)
+ // synchronized (dsItemReg)
{
- synchronized (dsObjReg)
+ // synchronized (dsObjReg)
{
dsregitem = (Object[]) dsItemReg.remove(dsitem);
if (dsregitem != null)
items = null;
dsObjReg.clear();
}
- if (dsItemReg!=null)
+ if (dsItemReg != null)
{
dsItemReg.clear();
}