[ https://issues.apache.org/jira/browse/SLING-2624?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chetan Mehrotra updated SLING-2624: ----------------------------------- Attachment: org.apache.sling.jcr.jackrabbit.base-0.0.1-SNAPSHOT-src.tar.gz Just the source files for the base bundle > Improving Jackrabbit integration with OSGi Service Registry > ----------------------------------------------------------- > > Key: SLING-2624 > URL: https://issues.apache.org/jira/browse/SLING-2624 > Project: Sling > Issue Type: New Feature > Components: JCR > Reporter: Chetan Mehrotra > Attachments: > org.apache.sling.jcr.jackrabbit.base-0.0.1-SNAPSHOT-src.tar.gz, > SLING-2624-initial-proposal.diff, SLING-2624-svn-compat.diff > > > Current Sling integration with Jackrabbit (JR) allows for simpler access to > Repository services from other bundles via the OSGi Service Registry (SR). > However to make use of OSGi services within JR is tricky. Some integration is > done wrt security but for other areas one needs to use fragments. > To simplify such integration recently a new feature was added to JR > (JCR-3420) [1] which allows for registering a custom BeanFactory with JR. > This would allow usage of services from service registry within JR. Refer to > Mail thread [5] for relevant discussion > Feature Details > =============== > This feature builds up on the new module org.apache.sling.jcr.jackrabbit.base > proposed with SLING-2623. > OsgiBeanFactory > --------------- > This is an implementation for the JR BeanFactory extension and acts as a > bridge between OSGi and JR. It uses a custom BeanConfigVisitor to collect all > the dependency information i.e. details about services which need to be > pulled from SR. Then it uses a ServiceTracker to track avialability of all > such services. Once all the required dependencies are found it registers > itself with SR. > Once it is registered the SlingServerRepository can start > * Note - This feature has not much dependency on SLING-2623. Just that git > fork is based on the base of SLING-2623 > SlingServerRepository Integration > --------------------------------- > OsgiBeanFactory needs to know the repository configuration which would be > used to create the repository. Current fork impl uses one way to determine > the config (which would need to be revisited). Further SlingServerRepository > now has a reference for BeanFactory and would only be activated upon > registration of BeanFactory > Note - The current SlingServerRepository is configured as component factory > which would require a 1..1 mapping to BeanFactory. Such mapping is bit tricky > to achieve. However in most cases a Sling server has only one > SlingServerRepository. So the proposed approach *assumes* that there is a > single repository instance configured > Sample Usage > ============ > To demonstrate the use of such a feature I took the usecase of externalizing > the AuthorizableAction [2] in Sling env. So it should be possible to use an > OSGi service which implements the AuthorizableAction within JR. An > implementation of that is available at [4]. In the JR repository.xml we would > have an entry like show below > <AuthorizableAction > class="org.apache.jackrabbit.core.security.user.action.AuthorizableAction" /> > Then the OSGiBeanFactory would obtain the instance of AuthorizableAction from > Service Registry and provide that to JR. Now any bundle can register an > instance of AuthorizableAction with SR and it would be invoked for various > callbacks from JR UserManager!! > Note about patch > =============== > The patch builds up on the SLING-2623 fork. Once we have consensus upon the > approach I can extract relevant parts and propose a new patch > [1] https://issues.apache.org/jira/browse/JCR-3420 > [2] > http://jackrabbit.apache.org/api/2.4/org/apache/jackrabbit/core/security/user/action/AuthorizableAction.html > [3] https://github.com/chetanmeh/sling/compare/osgi-factory4 > [4] > https://github.com/chetanmeh/sling/compare/chetanmeh:jaas-osgi-adv...chetanmeh:osgi-factory4 > [5] http://markmail.org/thread/3nnkygzef5dvzxod -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira