1 24 package org.objectweb.jalisto.se.impl.multi; 25 26 import org.objectweb.jalisto.se.impl.LogicalOid; 27 import org.objectweb.jalisto.se.api.internal.OidTable; 28 import org.objectweb.jalisto.se.api.internal.InternalPhysicalFileAccess; 29 import org.objectweb.jalisto.se.api.JalistoProperties; 30 import org.objectweb.jalisto.se.exception.IdentityException; 31 import org.objectweb.jalisto.se.impl.ExtentImpl; 32 import org.objectweb.jalisto.se.impl.server.PhysicalOid; 33 import org.objectweb.jalisto.se.impl.server.oid.OidInfo; 34 import org.objectweb.jalisto.se.impl.server.oid.OidTableImpl; 35 36 import java.util.*; 37 38 public class OidTableMultiImpl extends OidTableImpl { 39 40 private OidTableMultiImpl(InternalPhysicalFileAccess physicalAccess, JalistoProperties properties) { 41 super(physicalAccess, properties); 42 transactionnalOidsMap = new HashMap(); 43 } 44 45 public synchronized void setUpdate(Object sessionId, LogicalOid floid, short value) { 46 OidInfo info = (OidInfo) getTransactionnalOids(sessionId).get(floid); 48 if (info == null) { 49 info = (OidInfo) floidTable.get(floid); 50 if (info == null) { 51 if (loadOidPage(sessionId, floid)) { 52 info = (OidInfo) floidTable.get(floid); 53 } else { 54 throw new IdentityException(); 55 } 56 } 57 } 58 info.setUpdate(value); 59 } 60 61 public synchronized short getUpdate(Object sessionId, LogicalOid floid, boolean transactionnal) { 62 OidInfo info = null; 63 if (transactionnal) { 64 info = (OidInfo) getTransactionnalOids(sessionId).get(floid); 65 } 66 if (info == null) { 67 info = (OidInfo) floidTable.get(floid); 68 if (info == null) { 69 if (loadOidPage(sessionId, floid)) { 70 info = (OidInfo) floidTable.get(floid); 71 } else { 72 return -1; 73 } 74 } 75 } 76 return info.getUpdate(); 77 } 78 79 protected Map getTransactionnalOids(Object sessionId) { 80 return (Map) transactionnalOidsMap.get(sessionId); 81 } 82 83 public void open(Object sessionId) { 84 transactionnalOidsMap.put(sessionId, new TreeMap()); 85 } 86 87 public void close(Object sessionId) { 88 transactionnalOidsMap.remove(sessionId); 89 } 90 91 94 95 public synchronized LogicalOid allocateNewFloid(short clid) { 96 return super.allocateNewFloid(clid); 97 } 98 99 public synchronized Collection getFloidsFromClid(Object sessionId, Object clid, boolean fullyTransactionnal) { 100 return super.getFloidsFromClid(sessionId, clid, fullyTransactionnal); 101 } 102 103 public synchronized Collection getFloidsFromClid(Object sessionId, Object clid, ExtentImpl extent, int number) { 104 return super.getFloidsFromClid(sessionId, clid, extent, number); 105 } 106 107 public synchronized PhysicalOid getFpoid(Object sessionId, LogicalOid floid) { 108 return super.getFpoid(sessionId, floid); 109 } 110 111 public synchronized PhysicalOid getDeletedFpoid(Object sessionId, LogicalOid floid) { 112 return super.getDeletedFpoid(sessionId, floid); 113 } 114 115 public synchronized void removeFloid(Object sessionId, LogicalOid floid) { 116 super.removeFloid(sessionId, floid); 117 } 118 119 public synchronized void updatePoid(Object sessionId, LogicalOid floid, PhysicalOid newFpoid) { 120 super.updatePoid(sessionId, floid, newFpoid); 121 } 122 123 private Map transactionnalOidsMap; 124 125 128 129 public static OidTable getAnOidTable(InternalPhysicalFileAccess physicalAccess, JalistoProperties properties) { 130 OidTableMultiImpl oidTable; 131 try { 132 oidTable = new OidTableMultiImpl(physicalAccess, properties); 133 oidTable.readAtTable(); 134 } catch (Exception e) { 135 oidTable = new OidTableMultiImpl(physicalAccess, properties); 136 } 137 oidTable.oidPageSize = properties.getOidPageSize(); 138 return oidTable; 139 } 140 141 } 142 | Popular Tags |