The lifecycle of any Jackrabbit Content Repository starts with a call to one of the RepositoryFactory.create() methods passing optionally the source of a repository configuration file (which by convention is called config.xml) and the RepositoryFactoryHome, which points to a directory from which the Repository will continue reading further information for start-up and in many cases will store the actual data that is persisted in the repository and its workspaces.
Not supplying the RepositoryFactoryHome will default to the users home dir from the System property user.dir.
Not supplying the configuration file parameter will default to the value of Repository.factory.config System Property and if that is not set it will default to the config.xml in the RepositoryFactoryHome.
Calling the create() method will instantiate the RepositoryFactory singleton that will then, through the getRepository(String name) method, serve as the factory for Repository instances.
As per the config.xml a repository are started up with the respectively configured RepositoryStore, the RepositoryStore defines where the repository stores information that is visible for the entire Repository which includes things like the uuid of the root node, repository properties, the namespace registry, node type definitions or the version backing store in a file structure as follows.
The RepositoryStore normally points to a regular (i.e. local) file system but is abstracted through an abstract FileSystem that can be configured to point to a different FileSystem implementation, in case the above information should be stored in a different data container.
... to be continued ...