Gets a type based on a fully-qualified name. This could either be the name of an entity,
like "entity.User", the name of a typekey, like "typekey.SystemPermission", or a class name, like
"java.lang.String". Names can have [] appended to them to create arrays, and multi-dimensional arrays
are supported.
If the type can be successfully resolved by the typeloader, it will be returned, otherwise it will
return null. The sole exception to this rule is the top-level TypeLoaderAccess, which will throw
a
ClassNotFoundException if none of its composite typeloaders can load the type.
There is a global lock in TypeLoaderAccess that is acquired when this method is called. Basically
one type at a time can be loaded from the system. This method is free to release that lock during this call.
This is needed to deal with reentrant type loaders. It is the responsibility of this method to make sure the
lock is reacquired before this method returns.
Type loader access will guarentee that no duplicate types are put into the type loader.