private boolean establishInitialTable(String appName, Collection<SecurityRole> secRoles) {
        // Create and add a new table if we don't have a cached copy
        if (resourceToAuthzInfoMap.putIfAbsent(appName, new AuthzInfo(appName, secRoles)) == null) {
            if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                Tr.debug(tc, "Created initial authorization tables for " + appName);
            }
            return true;
        }
        return false;
    }
private boolean establishInitialTable ( String appName , Collection < SecurityRole > secRoles ) { if ( resourceToAuthzInfoMap . putIfAbsent ( appName , new AuthzInfo ( appName , secRoles ) ) == null ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { Tr . debug ( tc , "Created initial authorization tables for " + appName ) ; } return true ; } return false ; }
Establishes the basic information that comprises an authorization table,
but all real work is deferred until later. This has some benefits:<p>
<ol>
<li>Faster application deployment</li>
<li>If the authorization table is not used, such as for SAF authorization,
we do not incur much cost to establish the table.</li>
</ol>
<p>
If a table already exists for the application name, issue an error. Two
applications with the same name is an error, and we should not be going
through appDeployed without having gone through appUndeployed.

@param appName
@param securityRoles
@return {@code true} if the (new) table was created, {@code false} if there was an existing table.