The factory architecture is based on a SCA approach. Each component is well defined and promotes an interface to ensure other components can access it. Implementation of each component is language independent and linking between components can be done very easily using the SCA container. For instance, components can be implemented as EJB3 Session Bean. This allows to have a great authentication framework provided by the Application Server but also other interesting stuff such as transaction management, clustering, etc...
Some components are internal to the factory and perform primitive operations such as creating security policies, checking access permission, throwing events, etc. Some higher level components such as membership service or browser service promotes external interfaces. Some of those "externally visible components" are dedicated to factory business logic. Other components promote external service provider interface while also making use of the factory business logic.
For instance, the S3 service promotes the Amazon S3 service interface but tackles advantage of the factory logic. When service need to access storage, the S3 "Abstract" service performs external calls to the real Amazon S3 service. But, before calling external service, some internal services are called in order to add the factory business logic to Amazon S3 service (such as factory security model and checking, factory global naming, factory indexation, factory event propagation, etc.).
The factory acts as a kind of framework between external provider services and promoted abstract services.
Note: Some of the abstract services are not linked to internal components for prettier viewing.
The factory defines two kind of objects : FactoryService and FactoryResource.
The FactoryResource is an abstract view for external piece of data. Each external piece of data can be seen by the factory as a resource. For example, a Forum can be a piece of data modeled as a FactoryResource. Depending on the granularity you have chosen to model your data, a FactoryResource can be a huge piece of data like a complete forum or a very small one like an Issue.
Using very small piece of data gives you the capacity to perform great composition of resources using the internal naming schema of the Factory.
The factory uses an internal naming scheme to bind external piece of data into internal named FactoryResources. This allows to give a unique path (/projects/project1/repository1) to an external resource. To be able to recover the external resource looking up is internal name, a FactoryResourceIdentifier contains the name of the FactoryService managing this resource, the type of this resource and his unique external id.
The Browser service allow you to crawl the naming tree in order to discover binded resources. Using the factory service, you should be able to load resource whatever type of resource it is. This allows you to perform generic operations on those resources, using internal factory components.