You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-dev@jackrabbit.apache.org by Chetan Mehrotra <ch...@gmail.com> on 2015/08/18 14:22:48 UTC

Recipe for using Oak in standalone environments

Hi,

Off late I have seen quite a few queries from people trying to use Oak
in non OSGi environment like embedding repository in a webapp deployed
on Tomcat or just in standalone application. Our current documented
way [1] is very limited and repository constructed in such a way does
not expose the full power of Oak stack and user also has to know many
internal setup details of Oak to get it working correctly.

Quite a bit of setup logic in Oak is now dependent on OSGi
configuration. Trying to setup Oak without using those would not
provide a stable and performant setup. Instead of that if we can have
a way to reuse all the OSGi based setup support and still enable users
to use Oak in non OSGi env then that would provide a more stable setup
approach.

Recipe
======

For past sometime I have been working on oak-pojosr module [2]. This
module can now stable and can be used to setup Oak with all the OSGi
support in a non OSGi world like webapp. For an end user the steps
required would be

1. Create a config file for enabling various parts of Oak

{
"org.apache.felix.jaas.Configuration.factory-LoginModuleImpl": {
    "jaas.controlFlag": "required",
    "jaas.classname":
"org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl",
    "jaas.ranking": 100
},
...,
"org.apache.jackrabbit.oak.jcr.osgi.RepositoryManager": {},
"org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService" : {
    "mongouri" : "mongodb://${mongodb.host}:${mongodb.port}",
    "db" : "${mongodb.name}"
}
}

2. Add dependency to oak-pojosr and thus include various transitive
dependencies like Felix Connect, SCR, ConfigAdmin etc

3. Construct a repository instance

import org.apache.jackrabbit.commons.JcrUtils;

Map<String,String> config = new HashMap<String, String>();
config.put("org.apache.jackrabbit.repository.home", "/path/to/repo");
config.put("org.apache.jackrabbit.oak.repository.configFile",
    "/path/to/oak-config.json");

Repository repository = JcrUtils.getRepository(config);

Thats all! This would construct a full stack Oak based on OSGi config
with all Lucene, Solr support usable.

Examples
========

WebApp
------------

I have adapted the existing Jackrabbit Webapp module to work with Oak
and be constructed based on oak-pojor [3]. You can check out the app
and just run

> mvn jetty:run

Access the webui at http://localhost:8080 and create a repository as
per UI. It currently has following features

1. Repository is configurable via a JSON file copies to 'oak' folder (default)

2. Felix WebConsole is integrated - Allows developer to view OSGi
state and config etc
    Check /osgi/system/console

3. Felix Script Console integrated to get programatic access to repository

4. All Oak MBean registered and can be used by user to perform
maintainence tasks

Spring Boot
----------------

Clay has been working a Oak based application [4] which uses Spring
Boot [7]. The fork of the same at [5] is now using pojosr to configure
a repository to be used in Spring [6]. In addition again Felix
WebConsole etc would also work

To try it out checkout the application and build it. Then run following command

> java -jar target/com.meta64.mobile-0.0.1-SNAPSHOT.jar --jcrHome=oak --jcrAdminPassword=password --aeskey=password --server.port=8990 --spring.config.location=classpath:/application.properties,classpath:/application-dev.properties

And then access the app at 8990 port

Proposal
=======

Do share your feedback around above proposed approach. In particular
following aspect

Q - Should we make oak-pojosr based setup as one of the
recommended/supported approach for configuring Oak in non OSGi env

Chetan Mehrotra
[1] http://jackrabbit.apache.org/oak/docs/construct.html
[2] https://github.com/apache/jackrabbit-oak/tree/trunk/oak-pojosr
[3] https://github.com/apache/jackrabbit-oak/tree/trunk/oak-examples/webapp
[4] https://github.com/Clay-Ferguson/meta64
[5] https://github.com/chetanmeh/meta64/tree/oak-pojosr
[6] https://github.com/chetanmeh/meta64/blob/oak-pojosr/src/main/java/com/meta64/mobile/repo/OakRepository.java#L218
[7] http://projects.spring.io/spring-boot/

Re: Recipe for using Oak in standalone environments

Posted by Torgeir Veimo <to...@gmail.com>.
Hi,

better documentation is always welcome.

For those using a spring environment, it would be nice if there was a
version of the oak-lucene module that used jar shading to avoid
leaking the embedded lucene 4.7 classes causing potential conflicts
with other lucene versions which might be required in a project.


On 18 August 2015 at 22:22, Chetan Mehrotra <ch...@gmail.com> wrote:
> Hi,
>
> Off late I have seen quite a few queries from people trying to use Oak
> in non OSGi environment like embedding repository in a webapp deployed
> on Tomcat or just in standalone application. Our current documented
> way [1] is very limited and repository constructed in such a way does
> not expose the full power of Oak stack and user also has to know many
> internal setup details of Oak to get it working correctly.
>
> Quite a bit of setup logic in Oak is now dependent on OSGi
> configuration. Trying to setup Oak without using those would not
> provide a stable and performant setup. Instead of that if we can have
> a way to reuse all the OSGi based setup support and still enable users
> to use Oak in non OSGi env then that would provide a more stable setup
> approach.
>
> Recipe
> ======
>
> For past sometime I have been working on oak-pojosr module [2]. This
> module can now stable and can be used to setup Oak with all the OSGi
> support in a non OSGi world like webapp. For an end user the steps
> required would be
>
> 1. Create a config file for enabling various parts of Oak
>
> {
> "org.apache.felix.jaas.Configuration.factory-LoginModuleImpl": {
>     "jaas.controlFlag": "required",
>     "jaas.classname":
> "org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl",
>     "jaas.ranking": 100
> },
> ...,
> "org.apache.jackrabbit.oak.jcr.osgi.RepositoryManager": {},
> "org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService" : {
>     "mongouri" : "mongodb://${mongodb.host}:${mongodb.port}",
>     "db" : "${mongodb.name}"
> }
> }
>
> 2. Add dependency to oak-pojosr and thus include various transitive
> dependencies like Felix Connect, SCR, ConfigAdmin etc
>
> 3. Construct a repository instance
>
> import org.apache.jackrabbit.commons.JcrUtils;
>
> Map<String,String> config = new HashMap<String, String>();
> config.put("org.apache.jackrabbit.repository.home", "/path/to/repo");
> config.put("org.apache.jackrabbit.oak.repository.configFile",
>     "/path/to/oak-config.json");
>
> Repository repository = JcrUtils.getRepository(config);
>
> Thats all! This would construct a full stack Oak based on OSGi config
> with all Lucene, Solr support usable.
>
> Examples
> ========
>
> WebApp
> ------------
>
> I have adapted the existing Jackrabbit Webapp module to work with Oak
> and be constructed based on oak-pojor [3]. You can check out the app
> and just run
>
>> mvn jetty:run
>
> Access the webui at http://localhost:8080 and create a repository as
> per UI. It currently has following features
>
> 1. Repository is configurable via a JSON file copies to 'oak' folder (default)
>
> 2. Felix WebConsole is integrated - Allows developer to view OSGi
> state and config etc
>     Check /osgi/system/console
>
> 3. Felix Script Console integrated to get programatic access to repository
>
> 4. All Oak MBean registered and can be used by user to perform
> maintainence tasks
>
> Spring Boot
> ----------------
>
> Clay has been working a Oak based application [4] which uses Spring
> Boot [7]. The fork of the same at [5] is now using pojosr to configure
> a repository to be used in Spring [6]. In addition again Felix
> WebConsole etc would also work
>
> To try it out checkout the application and build it. Then run following command
>
>> java -jar target/com.meta64.mobile-0.0.1-SNAPSHOT.jar --jcrHome=oak --jcrAdminPassword=password --aeskey=password --server.port=8990 --spring.config.location=classpath:/application.properties,classpath:/application-dev.properties
>
> And then access the app at 8990 port
>
> Proposal
> =======
>
> Do share your feedback around above proposed approach. In particular
> following aspect
>
> Q - Should we make oak-pojosr based setup as one of the
> recommended/supported approach for configuring Oak in non OSGi env
>
> Chetan Mehrotra
> [1] http://jackrabbit.apache.org/oak/docs/construct.html
> [2] https://github.com/apache/jackrabbit-oak/tree/trunk/oak-pojosr
> [3] https://github.com/apache/jackrabbit-oak/tree/trunk/oak-examples/webapp
> [4] https://github.com/Clay-Ferguson/meta64
> [5] https://github.com/chetanmeh/meta64/tree/oak-pojosr
> [6] https://github.com/chetanmeh/meta64/blob/oak-pojosr/src/main/java/com/meta64/mobile/repo/OakRepository.java#L218
> [7] http://projects.spring.io/spring-boot/



-- 
-Tor

Re: Recipe for using Oak in standalone environments

Posted by Bertrand Delacretaz <bd...@apache.org>.
On Tue, Aug 18, 2015 at 2:22 PM, Chetan Mehrotra
<ch...@gmail.com> wrote:
> ...Q - Should we make oak-pojosr based setup as one of the
> recommended/supported approach for configuring Oak in non OSGi env...

>From the peanuts gallery, I like the idea.

However, I cannot find any docs on Felix Connect which is AFAIK where
pojosr lives now, it's not even listed at
http://felix.apache.org/downloads.cgi - I'll ask on the Felix dev
list.

-Bertrand