private final Subject getSubjectForRecovery(ManagedConnectionFactory mcf, Serializable xaresinfo) throws Exception {
        final boolean trace = TraceComponent.isAnyTracingEnabled();
        if (trace && tc.isEntryEnabled())
            Tr.entry(this, tc, "getSubjectForRecovery", recoveryAuthDataRef);

        String authDataID = null;
        if (recoveryAuthDataRef != null) {
            authDataID = (String) recoveryAuthDataRef.getProperty(ID);
            if (authDataID == null ||
                DEFAULT_PATTERN.matcher(authDataID).matches() ||
                DEFAULT_NESTED_PATTERN.matcher(authDataID).matches()) {
                authDataID = (String) recoveryAuthDataRef.getProperty("config.displayId");
            }
        }

        // If recoveryAuthDataRef isn't specified, then use the container managed auth alias, if there is one
        if (authDataID == null && xaresinfo != null) {
            @SuppressWarnings("unchecked")
            ArrayList<Byte> byteList = (ArrayList<Byte>) xaresinfo;
            byte[] bytes = new byte[byteList.size()];
            int i = 0;
            for (Byte b : byteList)
                bytes[i++] = b;
            ResourceInfo info = (ResourceInfo) ConnectorService.deserialize(bytes);
            if (info.getAuth() == ResourceInfo.AUTH_CONTAINER) {
                for (ResourceInfo.Property loginConfigProp : info.getLoginPropertyList())
                    if ("DefaultPrincipalMapping".equals(loginConfigProp.getName()))
                        authDataID = loginConfigProp.getValue();
                // If no auth-data in recovery info, then use the default container managed auth alias (if any)
                if (authDataID == null)
                    authDataID = getContainerAuthDataID();
            }

            if (trace && tc.isDebugEnabled())
                Tr.debug(this, tc, "container managed auth", authDataID);
        }

        Subject subject = null;
        if (authDataID != null) {
            AuthDataService authDataSvc = ((ConnectorServiceImpl) getConnectorService()).authDataServiceRef.getServiceWithException();
            Map<String, Object> loginData = Collections.singletonMap("com.ibm.mapping.authDataAlias", (Object) authDataID);
            subject = authDataSvc.getSubject(mcf, null, loginData);
        }

        if (trace && tc.isEntryEnabled())
            Tr.exit(this, tc, "getSubjectForRecovery", CommonFunction.toString(subject));
        return subject;
    }
private final Subject getSubjectForRecovery ( ManagedConnectionFactory mcf , Serializable xaresinfo ) throws Exception { final boolean trace = TraceComponent . isAnyTracingEnabled ( ) ; if ( trace && tc . isEntryEnabled ( ) ) Tr . entry ( this , tc , "getSubjectForRecovery" , recoveryAuthDataRef ) ; String authDataID = null ; if ( recoveryAuthDataRef != null ) { authDataID = ( String ) recoveryAuthDataRef . getProperty ( ID ) ; if ( authDataID == null || DEFAULT_PATTERN . matcher ( authDataID ) . matches ( ) || DEFAULT_NESTED_PATTERN . matcher ( authDataID ) . matches ( ) ) { authDataID = ( String ) recoveryAuthDataRef . getProperty ( "config.displayId" ) ; } } if ( authDataID == null && xaresinfo != null ) { @ SuppressWarnings ( "unchecked" ) ArrayList < Byte > byteList = ( ArrayList < Byte > ) xaresinfo ; byte [ ] bytes = new byte [ byteList . size ( ) ] ; int i = 0 ; for ( Byte b : byteList ) bytes [ i ++ ] = b ; ResourceInfo info = ( ResourceInfo ) ConnectorService . deserialize ( bytes ) ; if ( info . getAuth ( ) == ResourceInfo . AUTH_CONTAINER ) { for ( ResourceInfo . Property loginConfigProp : info . getLoginPropertyList ( ) ) if ( "DefaultPrincipalMapping" . equals ( loginConfigProp . getName ( ) ) ) authDataID = loginConfigProp . getValue ( ) ; if ( authDataID == null ) authDataID = getContainerAuthDataID ( ) ; } if ( trace && tc . isDebugEnabled ( ) ) Tr . debug ( this , tc , "container managed auth" , authDataID ) ; } Subject subject = null ; if ( authDataID != null ) { AuthDataService authDataSvc = ( ( ConnectorServiceImpl ) getConnectorService ( ) ) . authDataServiceRef . getServiceWithException ( ) ; Map < String , Object > loginData = Collections . singletonMap ( "com.ibm.mapping.authDataAlias" , ( Object ) authDataID ) ; subject = authDataSvc . getSubject ( mcf , null , loginData ) ; } if ( trace && tc . isEntryEnabled ( ) ) Tr . exit ( this , tc , "getSubjectForRecovery" , CommonFunction . toString ( subject ) ) ; return subject ; }
Obtain a subject to use for recovery.
Precondition: the invoker must have a read lock on this connection factory service instance.

@param mcf the managed connection factory
@param xaresinfo serialized ArrayList<Byte> for the CMConfigData
@return subject to use for recovery. Null if the default user/password of the connection factory should be used.
@throws Exception if an error occurs.