class JcrSessionFactory implements InitializingBean, DisposableBean, SessionFactory {

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.notNull(getRepository(), "repository is required");

        if (eventListeners != null && eventListeners.length > 0 && !JcrUtils.supportsObservation(getRepository()))
            throw new IllegalArgumentException("repository " + getRepositoryInfo() + " does NOT support Observation; remove Listener definitions");

        registerNamespaces();
        registerNodeTypes();

        // determine the session holder provider
        if (sessionHolderProviderManager == null) {
            if (LOG.isDebugEnabled())
                LOG.debug("no session holder provider manager set; using the default one");
            sessionHolderProvider = new GenericSessionHolderProvider();
        } else
            sessionHolderProvider = sessionHolderProviderManager.getSessionProvider(getRepository());
    }

    public  JcrSessionFactory(Repository repository, String workspaceName, Credentials credentials);
    public  JcrSessionFactory(Repository repository, String workspaceName, Credentials credentials, SessionHolderProviderManager sessionHolderProviderManager);
    public  JcrSessionFactory();

}