private void initializeAdapters(OpenMode openMode, TaskMonitor monitor)
			throws CancelledException, IOException, VersionException {

		//
		// IMPORTANT! All adapter versions must retain read-only capability to permit
		// opening older archives without requiring an upgrade. Failure to do so may
		// present severe usability issues when the ability to open for update is not 
		// possible.
		//

		checkManagerVersion(openMode);

		VersionException versionExc = null;
		try {
			callingConventionAdapter =
				CallingConventionDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			builtinAdapter = BuiltinDBAdapter.getAdapter(dbHandle, openMode, tablePrefix);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			categoryAdapter = CategoryDBAdapter.getAdapter(dbHandle, openMode, tablePrefix);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			arrayAdapter = ArrayDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			typedefAdapter = TypedefDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			compositeAdapter =
				CompositeDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			componentAdapter = ComponentDBAdapter.getAdapter(dbHandle, openMode, tablePrefix);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			functionDefAdapter = FunctionDefinitionDBAdapter.getAdapter(dbHandle, openMode,
				tablePrefix, callingConventionAdapter, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			paramAdapter =
				FunctionParameterAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			settingsAdapter = SettingsDBAdapter.getAdapter(tablePrefix + SETTINGS_TABLE_NAME,
				dbHandle, openMode, null, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			pointerAdapter = PointerDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			enumAdapter = EnumDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			enumValueAdapter =
				EnumValueDBAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			parentChildAdapter = ParentChildAdapter.getAdapter(dbHandle, openMode, tablePrefix);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}
		try {
			sourceArchiveAdapter =
				SourceArchiveAdapter.getAdapter(dbHandle, openMode, tablePrefix, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}

		try {
			initializeOtherAdapters(openMode, monitor);
		}
		catch (VersionException e) {
			versionExc = e.combine(versionExc);
		}

		if (versionExc != null) {
			throw versionExc;
		}

		updateManagerAndAppVersion(openMode);
	}
Constructor for a database-backed <code>DataTypeManagerDB</code> extension.
NOTE: This does not check for and handle data organization changes which must be
handled later (use {@link #hasDataOrganizationChange(boolean)} and 
{@link #compilerSpecChanged(TaskMonitor)} to check for and initiate response to changes).

@param handle     database handle
@param addrMap    address map (may be null)
@param openMode   open mode CREATE, READ_ONLY, UPDATE, UPGRADE.
@param tablePrefix DB table prefix to be applied to all associated table names.  This 
                   need only be specified when using multiple instances with the same
                   DB handle (null or empty string for no-prefix).
@param errHandler the error handler
@param lock       database lock
@param monitor    the current task monitor
@throws CancelledException if an upgrade is cancelled
@throws IOException if there is a problem reading the database
@throws VersionException if any database handle's version doesn't match the expected version.
                  This exception will never be thrown in READ_ONLY mode.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java