throw new RuntimeException ("DbSource \""+sourceName+"\" not found for prototype "+typename);
app.logEvent ("*** Data Source for prototype "+typename+" does not exist: "+sourceName); app.logEvent ("*** accessing or storing a "+typename+" object will cause an error.");
    public synchronized void update () {	table = props.getProperty ("_tablename");	idgen = props.getProperty ("_idgen");	// see if there is a field which specifies the prototype of objects, if different prototypes	// can be stored in this table	prototypeField = props.getProperty ("_prototypefield");	// see if this prototype extends (inherits from) any other prototype	extendsProto = props.getProperty ("_extends");		String sourceName = props.getProperty ("_datasource");	if (sourceName != null) {	    source = app.getDbSource (sourceName);	    if (source == null) {	        // what we really want to do here is mark the DbMapping as invalid, so no data can be saved to it.	        throw new RuntimeException ("DbSource \""+sourceName+"\" not found for prototype "+typename);	    }	}	// id field must not be null, default is "id"	idField = props.getProperty ("_id", "id");	nameField = props.getProperty ("_name");	protoField = props.getProperty ("_prototype");		String parentMapping = props.getProperty ("_parent");	if (parentMapping != null) {	    // comma-separated list of properties to be used as parent	    StringTokenizer st = new StringTokenizer (parentMapping, ",;");	    parent = new ParentInfo[st.countTokens()];	    for (int i=0; i<parent.length; i++)	        parent[i] = new ParentInfo (st.nextToken().trim());	} else	    parent = null;	lastTypeChange = props.lastModified ();	// set the cached schema & keydef to null so it's rebuilt the next time around	schema = null;	keydef = null;    }