code: public static synchronized JaasSubject getJaasSubject() {
  	if (subject == null) {
  	    String className = System.getProperty("org.globus.jaas.provider");
  	    if (className == null) {
  		className = "org.globus.gsi.gssapi.jaas.GlobusSubject";
  	    }
  	    try {
  		Class clazz = Class.forName(className);
  		if (!JaasSubject.class.isAssignableFrom(clazz)) {
  		    throw new RuntimeException(i18n.getMessage("invalidJaasSubject",
                                                         className));
  		}
  		subject = (JaasSubject)clazz.newInstance();
  	    } catch (ClassNotFoundException e) {
  		throw new RuntimeException(i18n.getMessage("loadError", className) +
                                     e.getMessage());
  	    } catch (InstantiationException e) {
  		throw new RuntimeException(i18n.getMessage("instanError", className) +
                                     e.getMessage());
  	    } catch (IllegalAccessException e) {
  		throw new RuntimeException(i18n.getMessage("instanError", className), e);
  	    }
  	}
  	return subject;
      }
docs: Gets current implementation of the <code>JaasSubject</code> API.
  The method attempts to load a <code>JaasSubject</code> implementation
  by loading a class specified by the
  "<i>org.globus.jaas.provider</i>" system property. If the property
  is not set the default Globus implementation is loaded.