jackrabbit-oak-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dürig <mdue...@apache.org>
Subject Re: Repository construction
Date Fri, 19 Oct 2012 23:21:33 GMT

Hi Jukka,

Thanks for sharing this, good stuff! I think this write up would best go 
into another .md file in /doc. WDYT?

Michael

On 19.10.12 16:25, Jukka Zitting wrote:
> Hi,
>
> As you may have noticed from my work in OAK-352, we now have pretty
> clean and simple mechanism for constructing repositories with
> different combinations of pluggable components. Here's a quick guide
> on how to use this mechanism.
>
> The core class to use is called Oak and can be found in the
> org.apache.jackrabbit.oak package inside oak-core. It takes a
> MicroKernel instance and wraps it into a ContentRepository:
>
>      MicroKernel kernel = ...;
>      ContentRepository repository = new Oak(kernel).createContentRepository();
>
> For test purposes you can use the default constructor that
> automatically instantiates an in-memory MicroKernel for use with the
> repository. And if you're only using the test repository for a single
> ContentSession or just a singe Root, then you can shortcut the login
> steps by using either of the last two statements below:
>
>      ContentRepository repository = new Oak().createContentRepository();
>      ContentSession session = new Oak().createContentSession();
>      Root root = new Oak().createRoot();
>
> By default no pluggable components are associated with the created
> repository, so all login attempts will work and result in full write
> access. There's also no need to close the sessions or otherwise
> release acquired resources, as normal garbage collection will take
> care of everything.
>
> To add extra functionality like type validation or indexing support,
> use the with() method. The method takes all kinds of Oak plugins and
> adds them to the repository to be created. The method returns the Oak
> instance being used, so you can chain method calls like this:
>
>      ContentRepository repository = new Oak(kernel)
>          .with(new InitialContent())        // add initial content
>          .with(new DefaultTypeEditor())     // automatically set default types
>          .with(new NameValidatorProvider()) // allow only valid JCR names
>          .with(new SecurityProviderImpl())  // use the default security
>          .with(new PropertyIndexHook())     // simple indexing support
>          .with(new PropertyIndexProvider()) // search support for the indexes
>          .createContentRepository();
>
> As you can see, constructing a fully featured JCR repository like this
> will require quite a few plugins. To avoid having to specify them all
> whenever constructing a new repository, we also have a class called
> Jcr in the org.apache.jakcrabbit.oak.jcr package in oak-jcr. That
> class works much like the Oak class, but it constructs
> javax.jcr.Repository instances instead of ContentRepositories and
> automatically includes all the plugin components needed for proper JCR
> functionality.
>
>      MicroKernel kernel = ...;
>      Repository repository = new Jcr(kernel).createRepository();
>
> The Jcr class supports all the same with() methods as the Oak class
> does, so you can easily extend the constructed JCR repository with
> custom functionality if you like. For test purposes the Jcr class also
> has an empty default constructor that works like the one in the Oak
> class.
>
> Note that this mechanism is mostly intended for embedded use.
> Deployments in OSGi and other managed environments should use the
> native construction/configuration mechanism of the environment.
>
> BR,
>
> Jukka Zitting
>

Mime
View raw message