@Override
    public int getModelID(int accessor) throws JMFUninitializedAccessException, JMFSchemaViolationException {

        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
            JmfTr.entry(this, tc, "getModelID", new Object[] { Integer.valueOf(accessor) });
        int ans;
        checkIndex(accessor);

        synchronized (getMessageLockArtefact()) {
            checkDynamic(accessor);

            if (cache[accessor] != null) {
                ans = ((JMFPart) cache[accessor]).getModelID();
                if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                    JmfTr.exit(this, tc, "getModelID", Integer.valueOf(ans));
                return ans;
            }

            if (contents == null) {
                JMFUninitializedAccessException e = new JMFUninitializedAccessException("Dynamic value at accessor " + accessor + " is missing");
                if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                    JmfTr.exit(this, tc, "getModelID", e);
                throw e;
            }

            // Get offset of the dynamic field
            int realOffset = getAbsoluteOffset(accessor);

            // Read model Id skipping over length
            ans = ArrayUtil.readInt(contents, realOffset + 4);
        }

        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
            JmfTr.exit(this, tc, "getModelID", Integer.valueOf(ans));
        return ans;
    }
@ Override public int getModelID ( int accessor ) throws JMFUninitializedAccessException , JMFSchemaViolationException { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) JmfTr . entry ( this , tc , "getModelID" , new Object [ ] { Integer . valueOf ( accessor ) } ) ; int ans ; checkIndex ( accessor ) ; synchronized ( getMessageLockArtefact ( ) ) { checkDynamic ( accessor ) ; if ( cache [ accessor ] != null ) { ans = ( ( JMFPart ) cache [ accessor ] ) . getModelID ( ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) JmfTr . exit ( this , tc , "getModelID" , Integer . valueOf ( ans ) ) ; return ans ; } if ( contents == null ) { JMFUninitializedAccessException e = new JMFUninitializedAccessException ( "Dynamic value at accessor " + accessor + " is missing" ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) JmfTr . exit ( this , tc , "getModelID" , e ) ; throw e ; } int realOffset = getAbsoluteOffset ( accessor ) ; ans = ArrayUtil . readInt ( contents , realOffset + 4 ) ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) JmfTr . exit ( this , tc , "getModelID" , Integer . valueOf ( ans ) ) ; return ans ; }
Locking: Needs to lock as it relies on the cache & contents remaining in their current state.