You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Ian Boston <ie...@tfd.co.uk> on 2013/04/01 04:27:20 UTC

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Hi Dishara,

You should not think about implementing the JCR API classes
(javax.jcr.*). You should think about implementing the Resource
API[1]. When you need to perform something that the ResourceAPI doesnt
support (say in a servlet), then you can use the
Resource.adapTo(Class<?> clazz) method to adapt the resource into a
class that supports that operation.

eg:
The properties of the resource are exposed via ResourceMetadata [2],
but lets say you want to find the underlying Cassandra object to copy
it and create a child.

So: CassandraResource implements Resource, which is what is returned
when the CassandraResourceProvider resolves a Resource. A client
should not bind to CassandraResource or mention it, since its almost
certainly an implementation and not an API. However, the Cassandra
bundle you have written also implements CassandraContent which has
CassandraContent.copy(String copyLocation) and
CassandraContent.createChild(String childName).

To get to this you would do CassandraResource.adaptTo(CassandraContent.class)
BTW, CassandraContent.class is an API exported by your bundle.

I hope that gives you an idea of how a CassandraResourceProvider and
associated implementation should work. If you havent already, and are
still interested you should read up on how Sling and OSGi works.
Trying the "Sling in 15 minutes"[3] is a good place to start. And then
reading everything you can about Declarative Services in OSGi. The 2
key things you are going to need to understand is how OSGi bundles
import and export packages and then how Declarative, declare services
that they depend on and declare services they implement, [4] is a
bunch of links.

HTH
Ian


1 http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
2 http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html

On 31 March 2013 21:58, Dishara Wijewardana <dd...@gmail.com> wrote:
> Hi Ian,
> Thank you very much for the explanation. Before replying to this mail, I
> revisited the facts you mentioned and try to comeup with a end to end big
> picture and what are the challenges that has to face when implementing this
> project.
>
> Read/write with Cassandra data seems is pretty straight forward with few
> lines of code using a client API. But the tricky part is to make a clean
> bridge between JCR wrapped sling resource API vs Cassendra column family
> data storage. So I took some time and went through the JCR spec and try to
> understand how it deals with resources (I assumed sling resource is
> directly based on JCR node concept). And got a good understanding of how
> JCR thinks on resource and how they deal with it.
>
> Because we need to think of the mapping between the sling wrapper interface
> for resources which is  org.apache.sling.api.resource.Resource (which is a
> JCR Node as I understand) and the Cassendra data layer. For instance
> Cassandra provider will return a sling resource and it should be enrich
> with the properties/attributes which helps the sling resource to keep its
> state like resource meta data, resource type (which should be the JCR node
> type),  and etc.
>
> And the provider should only return a resource which only has such very
> basic meta data. For instance, like  org.apache.sling.api.resource.Resource
> #getChild() #getChildren() we should not keep those in memory. We should
> return them on  the fly from Cassandra.
>
> I think we should write a separate Sling Cassandra Adapter layer and
> provider should talk to Cassandra through Cassandra Adapter. I hope this
> will make it more cleaner.
> Appreciate your valuable feedback. So that based on feedback I can provide
> a patch which will reflect the basic architecture and keep on patching with
> future additions.
>
>
> On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>
>> Hi and welcome,
>> Some comments inline below.
>>
>> On 29 March 2013 06:02, Dishara Wijewardana <dd...@gmail.com>
>> wrote:
>> > Hi all,
>> > I am Dishara Wijewardana, a student who is willing to take part in this
>> > GSoC 2013 .
>> >
>> > I have successfully completed GSoC 2012 in Apache Velocity and there I
>> have
>> > implemented JSR 223 support for Velocity. I found myself really
>> interested
>> > in this project since it covers very useful and interesting topics. So
>> > thought of getting in to this project idea and provide a good proposal
>> for
>> > this project.
>> >
>> > So I did some research around sling which might be useful for me to get
>> in
>> > to this project. I like sling as it sticks to community standards where
>> it
>> > uses a standard JCR2 repository to store resources which is a really good
>> > thing to have.
>> >
>> > I went through the information provided in the JIRA[1] and according to
>> > that at the end of this project what is expected to have implemented is a
>> > ResourceProvider for Sling which tunnels with a Cassandra (standalone
>> > one/cluster).
>>
>> yes, correct.
>>
>> >
>> > As far as I got to know, sling directly calls to Apache JackRabbit APIs
>> > (JCR APIs) to store resources. So I found a bit complicated this project
>> > idea in that sense. Because if we are to implement a Cassandra backend
>> for
>> > Sling (as per this proposal), and Sling storage is on top of JackRabbit,
>> > ideally what should happen is to make JackRabbit capable of using
>> Cassandra
>> > as its resource persistent layer, and configure it through Sling ? Please
>> > correct me If I am wrong.
>>
>> Your right.
>> The idea is this, Sling resolves paths into Resources
>> ie /content/mywebsite/page1.html is resolved to a Resource with a path
>> of   /content/mywebsite/page1  See [1]. Normally a JCR repository
>> takes ownership of everything under /, so all Resources are JCR
>> Resources.
>>
>> However, with a ResourceProvider its possible to "mount" a alternative
>> source of Resources at any location in the tree. eg:
>> If I create a ResourceProvider and configure it to respond to all
>> resource resolution operations at
>> /content/cassandra
>>
>> then
>> /content/cassandra/columnFamilyA/cassandraRowIDB
>>
>> will generate a Cassandra Resource instead of a JCR Resource.
>>
>> Initially the aim is to write a ResourceProvider that will allow
>> Readonly access to a Cassandra cluster (cluster of one is ok for
>> testing), but ultimately we would like to be able to write to that
>> cluster as well.
>>
>> Why Do it ?
>> Every storage platform has different characteristics, some are ideal
>> for extreem volume writes of throw away data, some are ideal for
>> extreem volume reads of precious audited transactrional data. Being
>> able to "mount" multiple stores in Sling enables Sling to integrate
>> data from all types of sources using best of breed address each use
>> case. (Thats the theory, anyway :))
>>
>
> +1 and this is a wonderful architecture interms of extensibility. Something
> even a repository vendor like Jackrabbit also would want to follow. Because
> they only have a JCR interfaced tree.
>
>
>>
>> I hope that makes things clearer.
>>
>> 1 http://sling.apache.org/site/resources.html
>>
>> >
>> > But if it is only to READ resources, this project is relatively less
>> > complex (not quite sure though ;-) ) since what is required is to have a
>> > JCR/Sling Resource compatible wrapper layer interface on top of Cassendra
>> > to read cassandra data.
>>
>> Initially, just read. Then read with access control. The read/write
>> with access control.
>>
>
> Read/Write complexity will be more or less the same as I feel.  But read
> write with access control is something we have to discuss separately.
> Does sling maintaining access control directly with jackrabbit's
> javax.jcr.security module ? Or any inhouse access control layer ?
>
>
>
>>
>> >
>> > Appreciate any feedback and guidance on how to proceed.
>>
>> If you havent already you need to checkout the information at:
>> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
>> * http://community.apache.org/gsoc.html
>>
>> especially the timeline and dates.
>>
>> There is no guarantee that Apache will be a GSoC organisation
>> (although its highly likely), and there are currently 129 project
>> proposals so there is no guarantee that you will get accepted as a
>> Student on this project, but the quality of your submission and your
>> enthusiasm will go a long way to making that happen.
>>
>> Good luck and I look forward to seeing you on these lists over the
>> summer. If you do make it through, I and everyone in this community
>> will try and make it fun and rewarding for you.
>>
>> Best Regards
>> Ian
>>
>>
>>
>> >
>> > [1] - https://issues.apache.org/jira/browse/SLING-2798
>> >
>> > --
>> > Thanks
>> > /Dishara
>>
>
>
>
> --
> Thanks
> /Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
Hi Dishara,
Congratulations, you achieved everything you set out to and showed a
real willingness to work with the Sling community, which for all those
that know the Apache way is possibly more important than rock star
coding. I am sure that others will build on what you have discovered
and created.

Should you find that you want to continue working on Sling with the
community in the coming months your contributions will be welcomed.

Finally, good luck in your continuing student life and if this year
was your final year, best of luck in your finals.

Best Regards
Ian

On 1 October 2013 04:25, Dishara Wijewardana <dd...@gmail.com> wrote:
> Hi Ian and all,
> Got to know that I have successfully passed the GSoC 2013 which was a my
> dream. Thank you all for helping me through all the time and making it true
> . I also uploaded the code to Google.
>
> Thanks again,
>
>
>
> On Thu, Apr 25, 2013 at 12:59 AM, Dishara Wijewardana <
> ddwijewardana@gmail.com> wrote:
>
>>
>>
>> On Wed, Apr 24, 2013 at 4:38 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>>
>>> On Wednesday, April 24, 2013, Dishara Wijewardana wrote:
>>>
>>> > On Tue, Apr 23, 2013 at 3:59 AM, Ian Boston <ieb@tfd.co.uk<javascript:;>>
>>> > wrote:
>>> >
>>> > > Hi Dishara,
>>> > > The diagram looks good and summarises how resource providers are
>>> > integrated
>>> > > into the resources resolver. Obviously there is a little more detail
>>> in
>>> > > reality, but its a good overview.
>>> > >
>>> > Thanks Ian for the feedback.
>>> > With that diagram I have just submitted my one and only GSoC 2013
>>> project
>>> > proposal to Google ;-).
>>>
>>>
>>> Good.
>>> Don't forget to state that this is your only GSoC 2013 submission in the
>>> proposal, and to declare if you will be doing anything other than your
>>> studies during the time period. Of importance are other part time jobs,
>>> studies and exams. Part time jobs are not allowed by GSoC which requires
>>> your full attention. Studies and exams clashing with the GSoC timescales
>>> are an unfortunate feature of the GSoC programme being based on the US
>>> academic year. I have worked with students who were also doing finals, and
>>> managed to achieve excellent project outcomes, (and an outstanding final
>>> degree result) but any conflicts need to be declared up front, so that the
>>> mentor and the student can plan around them. If your studies are active
>>> during GSoC then you should also let your academic staff know that you are
>>> taking part.
>>>
>>> If you could declare that information in the proposal, including if there
>>> are no conflicts, then they will strengthen your proposal.
>>>
>>> Hi Ian,
>> Completely agree. Really useful instructions. I have mentioned those facts
>> in the proposal and updated it.
>> Thank you.
>>
>>
>>
>>> Best regards
>>> Ian
>>>
>>>
>>>
>>>
>>> >
>>> > >
>>> > > Ian
>>> > >
>>> > > On Tuesday, April 23, 2013, Dishara Wijewardana wrote:
>>> > >
>>> > > > Hi Ian,
>>> > > > Here [1] I have attached the high level architecture diagram of the
>>> > > > cassandra back end implementation for Sling to the JIRA. Please let
>>> me
>>> > > know
>>> > > > if there is any concerns so that I can use this diagram to the
>>> > proposal.
>>> > > >
>>> > > > [1] -
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg
>>> > > >
>>> > > > On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:
>>> > > >
>>> > > > > Hi,
>>> > > > > The breakdown looks good, but I think you should aim to keep the
>>> > > > > implementation in Cassandra simple to start with and not
>>> > underestimate
>>> > > > how
>>> > > > > much time it may take to implement both read/write and access
>>> control
>>> > > on
>>> > > > > read/write.  No need to change the plan or be too specific at this
>>> > > stage.
>>> > > > >
>>> > > > > Best Regards
>>> > > > > Ian
>>> > > > >
>>> > > > >
>>> > > > > On 12 April 2013 23:24, Dishara Wijewardana <
>>> ddwijewardana@gmail.com
>>> > >
>>> > > > > wrote:
>>> > > > >
>>> > > > > > Hi Ian,
>>> > > > > > I am in the process of writing the proposal. So as you mentioned
>>> > > > earlier
>>> > > > > it
>>> > > > > > is better to split this in to 4 sub tasks and 2 before midterm
>>> and
>>> > 2
>>> > > > > after
>>> > > > > > mid term.
>>> > > > > >
>>> > > > > > So in summary I would like to add the subtasks that I feel.
>>> Please
>>> > > add
>>> > > > > > anything I am missing or anything required to have.
>>> > > > > >
>>> > > > > > Main tasks overview:
>>> > > > > > 1. Implementing a CassandraResourceProvider  to READ from
>>> > Cassandra.
>>> > > > > > Implementation Details [1]
>>> > > > > > 2. Test with one node Cassandra cluster end to end with the
>>> > > > > implementation
>>> > > > > > of #1.
>>> > > > > > 3. Enhance CassandraResourceProvider to READ with access control
>>> > > (with
>>> > > > > > latest security related APIs).
>>> > > > > > 4. Enhance CassandraResourceProvider(or may be a new interface
>>> for
>>> > > > > writing
>>> > > > > > i.e CassandraPopulator) to WRITE and WRITE with access control.
>>> > > > > >
>>> > > > > > Here as I feel, #1 and #2 completion will more weight and
>>> > relatively
>>> > > > more
>>> > > > > > time consuming than #3 and #4 (I am not aware of the complexity
>>> of
>>> > > > > > incoperating the access control to READ/WRITE).
>>> > > > > >
>>> > > > > > Appreciate your valuable feedback on this, whether this task
>>> > > breakdown
>>> > > > is
>>> > > > > > appropriate or not suits to the GSoC time line or anything more
>>> to
>>> > > > > > add/remove and etc ?
>>> > > > > >
>>> > > > > > [1] : Implementation Details:
>>> > > > > >
>>> > > > > > - Write a CassanrdaResourceProviderUtil  which is basically a
>>> > > cassendra
>>> > > > > > client which will facilitate all cassandra related operations
>>> > > required
>>> > > > by
>>> > > > > > other modules (CassandraResourceProvider and
>>> > > > CassandraResourceResolver).
>>> > > > > >
>>> > > > > > - Implementation of  CassandraResourceProvider
>>> > > > > >
>>> > > > > > - Implementation of CassandraResourceResolver
>>> > > > > >
>>> > > > > > - Implementation of CassandraResource
>>> > > > > >
>>> > > > > >
>>> > > > > > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk>
>>> wrote:
>>> > > > > >
>>> > > > > > > On 7 April 2013 14:07, Dishara Wijewardana <
>>> > > ddwijewardana@gmail.com>
>>> > > > > > > wrote:
>>> > > > > > >
>>> > > > > > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk>
>>> > > wrote:
>>> > > --
>>> > Thanks
>>> > /Dishara
>>> >
>>>
>>
>>
>>
>> --
>> Thanks
>> /Dishara
>>
>
>
>
> --
> Thanks
> /Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian and all,
Got to know that I have successfully passed the GSoC 2013 which was a my
dream. Thank you all for helping me through all the time and making it true
. I also uploaded the code to Google.

Thanks again,



On Thu, Apr 25, 2013 at 12:59 AM, Dishara Wijewardana <
ddwijewardana@gmail.com> wrote:

>
>
> On Wed, Apr 24, 2013 at 4:38 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>
>> On Wednesday, April 24, 2013, Dishara Wijewardana wrote:
>>
>> > On Tue, Apr 23, 2013 at 3:59 AM, Ian Boston <ieb@tfd.co.uk<javascript:;>>
>> > wrote:
>> >
>> > > Hi Dishara,
>> > > The diagram looks good and summarises how resource providers are
>> > integrated
>> > > into the resources resolver. Obviously there is a little more detail
>> in
>> > > reality, but its a good overview.
>> > >
>> > Thanks Ian for the feedback.
>> > With that diagram I have just submitted my one and only GSoC 2013
>> project
>> > proposal to Google ;-).
>>
>>
>> Good.
>> Don't forget to state that this is your only GSoC 2013 submission in the
>> proposal, and to declare if you will be doing anything other than your
>> studies during the time period. Of importance are other part time jobs,
>> studies and exams. Part time jobs are not allowed by GSoC which requires
>> your full attention. Studies and exams clashing with the GSoC timescales
>> are an unfortunate feature of the GSoC programme being based on the US
>> academic year. I have worked with students who were also doing finals, and
>> managed to achieve excellent project outcomes, (and an outstanding final
>> degree result) but any conflicts need to be declared up front, so that the
>> mentor and the student can plan around them. If your studies are active
>> during GSoC then you should also let your academic staff know that you are
>> taking part.
>>
>> If you could declare that information in the proposal, including if there
>> are no conflicts, then they will strengthen your proposal.
>>
>> Hi Ian,
> Completely agree. Really useful instructions. I have mentioned those facts
> in the proposal and updated it.
> Thank you.
>
>
>
>> Best regards
>> Ian
>>
>>
>>
>>
>> >
>> > >
>> > > Ian
>> > >
>> > > On Tuesday, April 23, 2013, Dishara Wijewardana wrote:
>> > >
>> > > > Hi Ian,
>> > > > Here [1] I have attached the high level architecture diagram of the
>> > > > cassandra back end implementation for Sling to the JIRA. Please let
>> me
>> > > know
>> > > > if there is any concerns so that I can use this diagram to the
>> > proposal.
>> > > >
>> > > > [1] -
>> > > >
>> > > >
>> > >
>> >
>> https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg
>> > > >
>> > > > On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:
>> > > >
>> > > > > Hi,
>> > > > > The breakdown looks good, but I think you should aim to keep the
>> > > > > implementation in Cassandra simple to start with and not
>> > underestimate
>> > > > how
>> > > > > much time it may take to implement both read/write and access
>> control
>> > > on
>> > > > > read/write.  No need to change the plan or be too specific at this
>> > > stage.
>> > > > >
>> > > > > Best Regards
>> > > > > Ian
>> > > > >
>> > > > >
>> > > > > On 12 April 2013 23:24, Dishara Wijewardana <
>> ddwijewardana@gmail.com
>> > >
>> > > > > wrote:
>> > > > >
>> > > > > > Hi Ian,
>> > > > > > I am in the process of writing the proposal. So as you mentioned
>> > > > earlier
>> > > > > it
>> > > > > > is better to split this in to 4 sub tasks and 2 before midterm
>> and
>> > 2
>> > > > > after
>> > > > > > mid term.
>> > > > > >
>> > > > > > So in summary I would like to add the subtasks that I feel.
>> Please
>> > > add
>> > > > > > anything I am missing or anything required to have.
>> > > > > >
>> > > > > > Main tasks overview:
>> > > > > > 1. Implementing a CassandraResourceProvider  to READ from
>> > Cassandra.
>> > > > > > Implementation Details [1]
>> > > > > > 2. Test with one node Cassandra cluster end to end with the
>> > > > > implementation
>> > > > > > of #1.
>> > > > > > 3. Enhance CassandraResourceProvider to READ with access control
>> > > (with
>> > > > > > latest security related APIs).
>> > > > > > 4. Enhance CassandraResourceProvider(or may be a new interface
>> for
>> > > > > writing
>> > > > > > i.e CassandraPopulator) to WRITE and WRITE with access control.
>> > > > > >
>> > > > > > Here as I feel, #1 and #2 completion will more weight and
>> > relatively
>> > > > more
>> > > > > > time consuming than #3 and #4 (I am not aware of the complexity
>> of
>> > > > > > incoperating the access control to READ/WRITE).
>> > > > > >
>> > > > > > Appreciate your valuable feedback on this, whether this task
>> > > breakdown
>> > > > is
>> > > > > > appropriate or not suits to the GSoC time line or anything more
>> to
>> > > > > > add/remove and etc ?
>> > > > > >
>> > > > > > [1] : Implementation Details:
>> > > > > >
>> > > > > > - Write a CassanrdaResourceProviderUtil  which is basically a
>> > > cassendra
>> > > > > > client which will facilitate all cassandra related operations
>> > > required
>> > > > by
>> > > > > > other modules (CassandraResourceProvider and
>> > > > CassandraResourceResolver).
>> > > > > >
>> > > > > > - Implementation of  CassandraResourceProvider
>> > > > > >
>> > > > > > - Implementation of CassandraResourceResolver
>> > > > > >
>> > > > > > - Implementation of CassandraResource
>> > > > > >
>> > > > > >
>> > > > > > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk>
>> wrote:
>> > > > > >
>> > > > > > > On 7 April 2013 14:07, Dishara Wijewardana <
>> > > ddwijewardana@gmail.com>
>> > > > > > > wrote:
>> > > > > > >
>> > > > > > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk>
>> > > wrote:
>> > > --
>> > Thanks
>> > /Dishara
>> >
>>
>
>
>
> --
> Thanks
> /Dishara
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
On Wed, Apr 24, 2013 at 4:38 AM, Ian Boston <ie...@tfd.co.uk> wrote:

> On Wednesday, April 24, 2013, Dishara Wijewardana wrote:
>
> > On Tue, Apr 23, 2013 at 3:59 AM, Ian Boston <ieb@tfd.co.uk<javascript:;>>
> > wrote:
> >
> > > Hi Dishara,
> > > The diagram looks good and summarises how resource providers are
> > integrated
> > > into the resources resolver. Obviously there is a little more detail in
> > > reality, but its a good overview.
> > >
> > Thanks Ian for the feedback.
> > With that diagram I have just submitted my one and only GSoC 2013 project
> > proposal to Google ;-).
>
>
> Good.
> Don't forget to state that this is your only GSoC 2013 submission in the
> proposal, and to declare if you will be doing anything other than your
> studies during the time period. Of importance are other part time jobs,
> studies and exams. Part time jobs are not allowed by GSoC which requires
> your full attention. Studies and exams clashing with the GSoC timescales
> are an unfortunate feature of the GSoC programme being based on the US
> academic year. I have worked with students who were also doing finals, and
> managed to achieve excellent project outcomes, (and an outstanding final
> degree result) but any conflicts need to be declared up front, so that the
> mentor and the student can plan around them. If your studies are active
> during GSoC then you should also let your academic staff know that you are
> taking part.
>
> If you could declare that information in the proposal, including if there
> are no conflicts, then they will strengthen your proposal.
>
> Hi Ian,
Completely agree. Really useful instructions. I have mentioned those facts
in the proposal and updated it.
Thank you.



> Best regards
> Ian
>
>
>
>
> >
> > >
> > > Ian
> > >
> > > On Tuesday, April 23, 2013, Dishara Wijewardana wrote:
> > >
> > > > Hi Ian,
> > > > Here [1] I have attached the high level architecture diagram of the
> > > > cassandra back end implementation for Sling to the JIRA. Please let
> me
> > > know
> > > > if there is any concerns so that I can use this diagram to the
> > proposal.
> > > >
> > > > [1] -
> > > >
> > > >
> > >
> >
> https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg
> > > >
> > > > On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > >
> > > > > Hi,
> > > > > The breakdown looks good, but I think you should aim to keep the
> > > > > implementation in Cassandra simple to start with and not
> > underestimate
> > > > how
> > > > > much time it may take to implement both read/write and access
> control
> > > on
> > > > > read/write.  No need to change the plan or be too specific at this
> > > stage.
> > > > >
> > > > > Best Regards
> > > > > Ian
> > > > >
> > > > >
> > > > > On 12 April 2013 23:24, Dishara Wijewardana <
> ddwijewardana@gmail.com
> > >
> > > > > wrote:
> > > > >
> > > > > > Hi Ian,
> > > > > > I am in the process of writing the proposal. So as you mentioned
> > > > earlier
> > > > > it
> > > > > > is better to split this in to 4 sub tasks and 2 before midterm
> and
> > 2
> > > > > after
> > > > > > mid term.
> > > > > >
> > > > > > So in summary I would like to add the subtasks that I feel.
> Please
> > > add
> > > > > > anything I am missing or anything required to have.
> > > > > >
> > > > > > Main tasks overview:
> > > > > > 1. Implementing a CassandraResourceProvider  to READ from
> > Cassandra.
> > > > > > Implementation Details [1]
> > > > > > 2. Test with one node Cassandra cluster end to end with the
> > > > > implementation
> > > > > > of #1.
> > > > > > 3. Enhance CassandraResourceProvider to READ with access control
> > > (with
> > > > > > latest security related APIs).
> > > > > > 4. Enhance CassandraResourceProvider(or may be a new interface
> for
> > > > > writing
> > > > > > i.e CassandraPopulator) to WRITE and WRITE with access control.
> > > > > >
> > > > > > Here as I feel, #1 and #2 completion will more weight and
> > relatively
> > > > more
> > > > > > time consuming than #3 and #4 (I am not aware of the complexity
> of
> > > > > > incoperating the access control to READ/WRITE).
> > > > > >
> > > > > > Appreciate your valuable feedback on this, whether this task
> > > breakdown
> > > > is
> > > > > > appropriate or not suits to the GSoC time line or anything more
> to
> > > > > > add/remove and etc ?
> > > > > >
> > > > > > [1] : Implementation Details:
> > > > > >
> > > > > > - Write a CassanrdaResourceProviderUtil  which is basically a
> > > cassendra
> > > > > > client which will facilitate all cassandra related operations
> > > required
> > > > by
> > > > > > other modules (CassandraResourceProvider and
> > > > CassandraResourceResolver).
> > > > > >
> > > > > > - Implementation of  CassandraResourceProvider
> > > > > >
> > > > > > - Implementation of CassandraResourceResolver
> > > > > >
> > > > > > - Implementation of CassandraResource
> > > > > >
> > > > > >
> > > > > > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk>
> wrote:
> > > > > >
> > > > > > > On 7 April 2013 14:07, Dishara Wijewardana <
> > > ddwijewardana@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk>
> > > wrote:
> > > --
> > Thanks
> > /Dishara
> >
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
On Wednesday, April 24, 2013, Dishara Wijewardana wrote:

> On Tue, Apr 23, 2013 at 3:59 AM, Ian Boston <ieb@tfd.co.uk <javascript:;>>
> wrote:
>
> > Hi Dishara,
> > The diagram looks good and summarises how resource providers are
> integrated
> > into the resources resolver. Obviously there is a little more detail in
> > reality, but its a good overview.
> >
> Thanks Ian for the feedback.
> With that diagram I have just submitted my one and only GSoC 2013 project
> proposal to Google ;-).


Good.
Don't forget to state that this is your only GSoC 2013 submission in the
proposal, and to declare if you will be doing anything other than your
studies during the time period. Of importance are other part time jobs,
studies and exams. Part time jobs are not allowed by GSoC which requires
your full attention. Studies and exams clashing with the GSoC timescales
are an unfortunate feature of the GSoC programme being based on the US
academic year. I have worked with students who were also doing finals, and
managed to achieve excellent project outcomes, (and an outstanding final
degree result) but any conflicts need to be declared up front, so that the
mentor and the student can plan around them. If your studies are active
during GSoC then you should also let your academic staff know that you are
taking part.

If you could declare that information in the proposal, including if there
are no conflicts, then they will strengthen your proposal.

Best regards
Ian




>
> >
> > Ian
> >
> > On Tuesday, April 23, 2013, Dishara Wijewardana wrote:
> >
> > > Hi Ian,
> > > Here [1] I have attached the high level architecture diagram of the
> > > cassandra back end implementation for Sling to the JIRA. Please let me
> > know
> > > if there is any concerns so that I can use this diagram to the
> proposal.
> > >
> > > [1] -
> > >
> > >
> >
> https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg
> > >
> > > On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > >
> > > > Hi,
> > > > The breakdown looks good, but I think you should aim to keep the
> > > > implementation in Cassandra simple to start with and not
> underestimate
> > > how
> > > > much time it may take to implement both read/write and access control
> > on
> > > > read/write.  No need to change the plan or be too specific at this
> > stage.
> > > >
> > > > Best Regards
> > > > Ian
> > > >
> > > >
> > > > On 12 April 2013 23:24, Dishara Wijewardana <ddwijewardana@gmail.com
> >
> > > > wrote:
> > > >
> > > > > Hi Ian,
> > > > > I am in the process of writing the proposal. So as you mentioned
> > > earlier
> > > > it
> > > > > is better to split this in to 4 sub tasks and 2 before midterm and
> 2
> > > > after
> > > > > mid term.
> > > > >
> > > > > So in summary I would like to add the subtasks that I feel. Please
> > add
> > > > > anything I am missing or anything required to have.
> > > > >
> > > > > Main tasks overview:
> > > > > 1. Implementing a CassandraResourceProvider  to READ from
> Cassandra.
> > > > > Implementation Details [1]
> > > > > 2. Test with one node Cassandra cluster end to end with the
> > > > implementation
> > > > > of #1.
> > > > > 3. Enhance CassandraResourceProvider to READ with access control
> > (with
> > > > > latest security related APIs).
> > > > > 4. Enhance CassandraResourceProvider(or may be a new interface for
> > > > writing
> > > > > i.e CassandraPopulator) to WRITE and WRITE with access control.
> > > > >
> > > > > Here as I feel, #1 and #2 completion will more weight and
> relatively
> > > more
> > > > > time consuming than #3 and #4 (I am not aware of the complexity of
> > > > > incoperating the access control to READ/WRITE).
> > > > >
> > > > > Appreciate your valuable feedback on this, whether this task
> > breakdown
> > > is
> > > > > appropriate or not suits to the GSoC time line or anything more to
> > > > > add/remove and etc ?
> > > > >
> > > > > [1] : Implementation Details:
> > > > >
> > > > > - Write a CassanrdaResourceProviderUtil  which is basically a
> > cassendra
> > > > > client which will facilitate all cassandra related operations
> > required
> > > by
> > > > > other modules (CassandraResourceProvider and
> > > CassandraResourceResolver).
> > > > >
> > > > > - Implementation of  CassandraResourceProvider
> > > > >
> > > > > - Implementation of CassandraResourceResolver
> > > > >
> > > > > - Implementation of CassandraResource
> > > > >
> > > > >
> > > > > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > > >
> > > > > > On 7 April 2013 14:07, Dishara Wijewardana <
> > ddwijewardana@gmail.com>
> > > > > > wrote:
> > > > > >
> > > > > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk>
> > wrote:
> > --
> Thanks
> /Dishara
>

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
On Tue, Apr 23, 2013 at 3:59 AM, Ian Boston <ie...@tfd.co.uk> wrote:

> Hi Dishara,
> The diagram looks good and summarises how resource providers are integrated
> into the resources resolver. Obviously there is a little more detail in
> reality, but its a good overview.
>
Thanks Ian for the feedback.
With that diagram I have just submitted my one and only GSoC 2013 project
proposal to Google ;-).

>
> Ian
>
> On Tuesday, April 23, 2013, Dishara Wijewardana wrote:
>
> > Hi Ian,
> > Here [1] I have attached the high level architecture diagram of the
> > cassandra back end implementation for Sling to the JIRA. Please let me
> know
> > if there is any concerns so that I can use this diagram to the proposal.
> >
> > [1] -
> >
> >
> https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg
> >
> > On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> > > Hi,
> > > The breakdown looks good, but I think you should aim to keep the
> > > implementation in Cassandra simple to start with and not underestimate
> > how
> > > much time it may take to implement both read/write and access control
> on
> > > read/write.  No need to change the plan or be too specific at this
> stage.
> > >
> > > Best Regards
> > > Ian
> > >
> > >
> > > On 12 April 2013 23:24, Dishara Wijewardana <dd...@gmail.com>
> > > wrote:
> > >
> > > > Hi Ian,
> > > > I am in the process of writing the proposal. So as you mentioned
> > earlier
> > > it
> > > > is better to split this in to 4 sub tasks and 2 before midterm and 2
> > > after
> > > > mid term.
> > > >
> > > > So in summary I would like to add the subtasks that I feel. Please
> add
> > > > anything I am missing or anything required to have.
> > > >
> > > > Main tasks overview:
> > > > 1. Implementing a CassandraResourceProvider  to READ from Cassandra.
> > > > Implementation Details [1]
> > > > 2. Test with one node Cassandra cluster end to end with the
> > > implementation
> > > > of #1.
> > > > 3. Enhance CassandraResourceProvider to READ with access control
> (with
> > > > latest security related APIs).
> > > > 4. Enhance CassandraResourceProvider(or may be a new interface for
> > > writing
> > > > i.e CassandraPopulator) to WRITE and WRITE with access control.
> > > >
> > > > Here as I feel, #1 and #2 completion will more weight and relatively
> > more
> > > > time consuming than #3 and #4 (I am not aware of the complexity of
> > > > incoperating the access control to READ/WRITE).
> > > >
> > > > Appreciate your valuable feedback on this, whether this task
> breakdown
> > is
> > > > appropriate or not suits to the GSoC time line or anything more to
> > > > add/remove and etc ?
> > > >
> > > > [1] : Implementation Details:
> > > >
> > > > - Write a CassanrdaResourceProviderUtil  which is basically a
> cassendra
> > > > client which will facilitate all cassandra related operations
> required
> > by
> > > > other modules (CassandraResourceProvider and
> > CassandraResourceResolver).
> > > >
> > > > - Implementation of  CassandraResourceProvider
> > > >
> > > > - Implementation of CassandraResourceResolver
> > > >
> > > > - Implementation of CassandraResource
> > > >
> > > >
> > > > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > >
> > > > > On 7 April 2013 14:07, Dishara Wijewardana <
> ddwijewardana@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk>
> wrote:
> > > > > >
> > > > > > > That sounds good.
> > > > > > > If you havent already it will be important to become familiar
> > with
> > > > OSGi
> > > > > > and
> > > > > > > Sling itself.
> > > > > > > Please dont do too much work before getting being accepted. I
> > > > > > > cant guarantee that you will be accepted since there are lots
> of
> > > > Apache
> > > > > > > projects, lots of submissions and a limited number of places
> > given
> > > to
> > > > > > > Apache.
> > > > > > >
> > > > > > Yes I agree with you. There are loads of projects from Apache
> each
> > > > year.
> > > > > > But if the proposal is solid where it's apparently attainable
> > within
> > > > the
> > > > > > timeline and if community willing to mentor the project with high
> > > > > priority,
> > > > > > I think there is a very good chance of getting accepted. But
> still
> > > > > > can't guarantee it 100%. I got what you meant ;-).
> > > > > >
> > > > >
> > > > >
> > > > > Good, we understand each other, and your analysis is correct.
> > > > > Just incase it hasn't been obvious, I am very willing to mentor
> this
> > > > > project, as are other members of the community for other projects.
> > > > > Ian
> > > > >
> > > > >
> > > > >
> > > > --
> > Thanks
> > /Dishara
> >
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
Hi Dishara,
The diagram looks good and summarises how resource providers are integrated
into the resources resolver. Obviously there is a little more detail in
reality, but its a good overview.

Ian

On Tuesday, April 23, 2013, Dishara Wijewardana wrote:

> Hi Ian,
> Here [1] I have attached the high level architecture diagram of the
> cassandra back end implementation for Sling to the JIRA. Please let me know
> if there is any concerns so that I can use this diagram to the proposal.
>
> [1] -
>
> https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg
>
> On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:
>
> > Hi,
> > The breakdown looks good, but I think you should aim to keep the
> > implementation in Cassandra simple to start with and not underestimate
> how
> > much time it may take to implement both read/write and access control on
> > read/write.  No need to change the plan or be too specific at this stage.
> >
> > Best Regards
> > Ian
> >
> >
> > On 12 April 2013 23:24, Dishara Wijewardana <dd...@gmail.com>
> > wrote:
> >
> > > Hi Ian,
> > > I am in the process of writing the proposal. So as you mentioned
> earlier
> > it
> > > is better to split this in to 4 sub tasks and 2 before midterm and 2
> > after
> > > mid term.
> > >
> > > So in summary I would like to add the subtasks that I feel. Please add
> > > anything I am missing or anything required to have.
> > >
> > > Main tasks overview:
> > > 1. Implementing a CassandraResourceProvider  to READ from Cassandra.
> > > Implementation Details [1]
> > > 2. Test with one node Cassandra cluster end to end with the
> > implementation
> > > of #1.
> > > 3. Enhance CassandraResourceProvider to READ with access control (with
> > > latest security related APIs).
> > > 4. Enhance CassandraResourceProvider(or may be a new interface for
> > writing
> > > i.e CassandraPopulator) to WRITE and WRITE with access control.
> > >
> > > Here as I feel, #1 and #2 completion will more weight and relatively
> more
> > > time consuming than #3 and #4 (I am not aware of the complexity of
> > > incoperating the access control to READ/WRITE).
> > >
> > > Appreciate your valuable feedback on this, whether this task breakdown
> is
> > > appropriate or not suits to the GSoC time line or anything more to
> > > add/remove and etc ?
> > >
> > > [1] : Implementation Details:
> > >
> > > - Write a CassanrdaResourceProviderUtil  which is basically a cassendra
> > > client which will facilitate all cassandra related operations required
> by
> > > other modules (CassandraResourceProvider and
> CassandraResourceResolver).
> > >
> > > - Implementation of  CassandraResourceProvider
> > >
> > > - Implementation of CassandraResourceResolver
> > >
> > > - Implementation of CassandraResource
> > >
> > >
> > > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > >
> > > > On 7 April 2013 14:07, Dishara Wijewardana <dd...@gmail.com>
> > > > wrote:
> > > >
> > > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > > >
> > > > > > That sounds good.
> > > > > > If you havent already it will be important to become familiar
> with
> > > OSGi
> > > > > and
> > > > > > Sling itself.
> > > > > > Please dont do too much work before getting being accepted. I
> > > > > > cant guarantee that you will be accepted since there are lots of
> > > Apache
> > > > > > projects, lots of submissions and a limited number of places
> given
> > to
> > > > > > Apache.
> > > > > >
> > > > > Yes I agree with you. There are loads of projects from Apache each
> > > year.
> > > > > But if the proposal is solid where it's apparently attainable
> within
> > > the
> > > > > timeline and if community willing to mentor the project with high
> > > > priority,
> > > > > I think there is a very good chance of getting accepted. But still
> > > > > can't guarantee it 100%. I got what you meant ;-).
> > > > >
> > > >
> > > >
> > > > Good, we understand each other, and your analysis is correct.
> > > > Just incase it hasn't been obvious, I am very willing to mentor this
> > > > project, as are other members of the community for other projects.
> > > > Ian
> > > >
> > > >
> > > >
> > > --
> Thanks
> /Dishara
>

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian,
Here [1] I have attached the high level architecture diagram of the
cassandra back end implementation for Sling to the JIRA. Please let me know
if there is any concerns so that I can use this diagram to the proposal.

[1] -
https://issues.apache.org/jira/secure/attachment/12579842/Sling%20Cassandra%20backend%20Architecture.jpg

On Sat, Apr 13, 2013 at 4:29 PM, Ian Boston <ie...@tfd.co.uk> wrote:

> Hi,
> The breakdown looks good, but I think you should aim to keep the
> implementation in Cassandra simple to start with and not underestimate how
> much time it may take to implement both read/write and access control on
> read/write.  No need to change the plan or be too specific at this stage.
>
> Best Regards
> Ian
>
>
> On 12 April 2013 23:24, Dishara Wijewardana <dd...@gmail.com>
> wrote:
>
> > Hi Ian,
> > I am in the process of writing the proposal. So as you mentioned earlier
> it
> > is better to split this in to 4 sub tasks and 2 before midterm and 2
> after
> > mid term.
> >
> > So in summary I would like to add the subtasks that I feel. Please add
> > anything I am missing or anything required to have.
> >
> > Main tasks overview:
> > 1. Implementing a CassandraResourceProvider  to READ from Cassandra.
> > Implementation Details [1]
> > 2. Test with one node Cassandra cluster end to end with the
> implementation
> > of #1.
> > 3. Enhance CassandraResourceProvider to READ with access control (with
> > latest security related APIs).
> > 4. Enhance CassandraResourceProvider(or may be a new interface for
> writing
> > i.e CassandraPopulator) to WRITE and WRITE with access control.
> >
> > Here as I feel, #1 and #2 completion will more weight and relatively more
> > time consuming than #3 and #4 (I am not aware of the complexity of
> > incoperating the access control to READ/WRITE).
> >
> > Appreciate your valuable feedback on this, whether this task breakdown is
> > appropriate or not suits to the GSoC time line or anything more to
> > add/remove and etc ?
> >
> > [1] : Implementation Details:
> >
> > - Write a CassanrdaResourceProviderUtil  which is basically a cassendra
> > client which will facilitate all cassandra related operations required by
> > other modules (CassandraResourceProvider and CassandraResourceResolver).
> >
> > - Implementation of  CassandraResourceProvider
> >
> > - Implementation of CassandraResourceResolver
> >
> > - Implementation of CassandraResource
> >
> >
> > On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> > > On 7 April 2013 14:07, Dishara Wijewardana <dd...@gmail.com>
> > > wrote:
> > >
> > > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > >
> > > > > That sounds good.
> > > > > If you havent already it will be important to become familiar with
> > OSGi
> > > > and
> > > > > Sling itself.
> > > > > Please dont do too much work before getting being accepted. I
> > > > > cant guarantee that you will be accepted since there are lots of
> > Apache
> > > > > projects, lots of submissions and a limited number of places given
> to
> > > > > Apache.
> > > > >
> > > > Yes I agree with you. There are loads of projects from Apache each
> > year.
> > > > But if the proposal is solid where it's apparently attainable within
> > the
> > > > timeline and if community willing to mentor the project with high
> > > priority,
> > > > I think there is a very good chance of getting accepted. But still
> > > > can't guarantee it 100%. I got what you meant ;-).
> > > >
> > >
> > >
> > > Good, we understand each other, and your analysis is correct.
> > > Just incase it hasn't been obvious, I am very willing to mentor this
> > > project, as are other members of the community for other projects.
> > > Ian
> > >
> > >
> > >
> > > >
> > > > Thanks for the feedback.
> > > >
> > > >
> > > >
> > > > > Have a great weekend.
> > > > > Ian
> > > > >
> > > > >
> > > > >
> > > > > On 7 April 2013 02:12, Dishara Wijewardana <
> ddwijewardana@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > Hi Ian
> > > > > > Than you for the quick response. I have started localhost
> Cassendra
> > > and
> > > > > > written some codes through hector API to create columns and etc.
> > And
> > > > > works
> > > > > > fine. I am still doing some more test codings to get familiar
> more
> > > with
> > > > > > Cassendra these days so that I can reuse those codes and write an
> > > > > > appropriate CassendraResourceProviderUtil class .Meanwhile I will
> > > > prepare
> > > > > > the project proposal.  Please let me know if you want something
> > > > more/else
> > > > > > to be done before hand that would be useful to this project.
> > > > > >
> > > > > > On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk>
> wrote:
> > > > > >
> > > > > > > Hi
> > > > > > > Hector looks good.
> > > > > > >
> > > > > > > Sling wont ship a Cassandra instance, for this project it will
> > > uses a
> > > > > > > Cassandra instance setup separately  Last time I spun up
> > Cassandra
> > > it
> > > > > for
> > > > > > > dev purposes it was just as easy as installing MySQL or
> > PostgreSQL,
> > > > so
> > > > > I
> > > > > > > think that fine.
> > > > > > >
> > > > > > +1.
> > > > > >
> > > > > > >
> > > > > > > If using Hector, I think it would be good to do everything in
> CQL
> > > and
> > > > > > keep
> > > > > > > it all very simple and transparent. Remember the aim of the
> > project
> > > > is
> > > > > to
> > > > > > > prove that the ResourceProvider API can support Cassandra as a
> > > > > repository
> > > > > > > store, and that API is complete and usable all the way through
> to
> > > the
> > > > > > > latest security related APIs that have just been developed.
> This
> > > > > project
> > > > > > is
> > > > > > > not an exercise in doing cool and complex things in Cassandra
> > > > > > > with automated ORM mapping that binds the code forever to one
> > > > Cassandra
> > > > > > > API.
> > > > > > >
> > > > > > >
> > > > > > Totally agree. So ideally in a users's perspective, when dealing
> > with
> > > > > sling
> > > > > > layer, there should not be any difference between the resources
> in
> > > > > >  /root/jackrabbit and /root/cassandra for example.
> > > > > >
> > > > > > Sound ok to you, or do you see problems ?
> > > > > > >
> > > > > >
> > > > > > Yes, no problems at all. Quite fine with the suggestions.
> > > > > >
> > > > > > > Ian
> > > > > > >
> > > > > > >
> > > > > > > On 6 April 2013 16:55, Dishara Wijewardana <
> > > ddwijewardana@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hi Ian,
> > > > > > > >
> > > > > > > > In Sling, are we going to ship native Cassandra instance with
> > the
> > > > > sling
> > > > > > > > binary pack? ( is there already a native cassandra server
> > > starting
> > > > at
> > > > > > > sling
> > > > > > > > server start up ?)
> > > > > > > > I am willing to use hector API to deal with Cassandra, as in
> > most
> > > > of
> > > > > > > >  occasions around . Please let me know if there is any
> concerns
> > > on
> > > > > that
> > > > > > > > aspect ?
> > > > > > > >
> > > > > > > >
> > > > > > > > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > > > > > > > ddwijewardana@gmail.com
> > > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi Ian,
> > > > > > > > >
> > > > > > > > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk>
> > > > wrote:
> > > > > > > > >
> > > > > > > > >> On 2 April 2013 07:55, Dishara Wijewardana <
> > > > > ddwijewardana@gmail.com
> > > > > > >
> > > > > > > > >> wrote:
> > > > > > > > >> > Hi Ian,
> > > > > > > > >> > Thanks for the explanation. Really helped me to get
> > several
> > > > > stuff
> > > > > > > > >> cleared.
> > > > > > > > >> >
> > > > > > > > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <
> ieb@tfd.co.uk
> > >
> > > > > wrote:
> > > > > > > > >> >
> > > > > > > > >> >> Hi Dishara,
> > > > > > > > >> >>
> > > > > > > > >> >> You should not think about implementing the JCR API
> > classes
> > > > > > > > >> >> (javax.jcr.*). You should think about implementing the
> > > > Resource
> > > > > > > > >> >> API[1]. When you need to perform something that the
> > > > ResourceAPI
> > > > > > > > doesnt
> > > > > > > > >> >> support (say in a servlet), then you can use the
> > > > > > > > >> >> Resource.adapTo(Class<?> clazz) method to adapt the
> > > resource
> > > > > > into a
> > > > > > > > >> >> class that supports that operation.
> > > > > > > > >> >>
> > > > > > > > >> >
> > > > > > > > >> > Interesting.!! . If I got you correctly "adapTo" concept
> > > used
> > > > to
> > > > > > > > achieve
> > > > > > > > >> > *kind of* dynamic multiple inheritance rather than
> > > extending a
> > > > > > heavy
> > > > > > > > >> > abstract class. if that is so, this is a wonderful idea
> > and
> > > I
> > > > > > really
> > > > > > > > >> like
> > > > > > > > >> > the concept.
> > > > > > > > >>
> > > > > > > > >> Calling it inheritance might be going too far as the class
> > > isn't
> > > > > > > > >> necessarily the same, but in essence, yes.
> > > > > > > > >>
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> >>
> > > > > > > > >> >> eg:
> > > > > > > > >> >> The properties of the resource are exposed via
> > > > ResourceMetadata
> > > > > > > [2],
> > > > > > > > >> >> but lets say you want to find the underlying Cassandra
> > > object
> > > > > to
> > > > > > > copy
> > > > > > > > >> >> it and create a child.
> > > > > > > > >> >>
> > > > > > > > >> >> So: CassandraResource implements Resource, which is
> what
> > is
> > > > > > > returned
> > > > > > > > >> >> when the CassandraResourceProvider resolves a
> Resource. A
> > > > > client
> > > > > > > > >> >> should not bind to CassandraResource or mention it,
> since
> > > its
> > > > > > > almost
> > > > > > > > >> >> certainly an implementation and not an API. However,
> the
> > > > > > Cassandra
> > > > > > > > >> >> bundle you have written also implements
> CassandraContent
> > > > which
> > > > > > has
> > > > > > > > >> >> CassandraContent.copy(String copyLocation) and
> > > > > > > > >> >> CassandraContent.createChild(String childName).
> > > > > > > > >> >
> > > > > > > > >> > To get to this you would do
> > > > > > > > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > > > > > > > >> >> BTW, CassandraContent.class is an API exported by your
> > > > bundle.
> > > > > > > > >> >>
> > > > > > > > >> >
> > > > > > > > >> > If I got you correctly,
> > > > > > > > >> >  after
> CassandraResource.adaptTo(CassandraContent.class) I
> > > > > should
> > > > > > be
> > > > > > > > >> able
> > > > > > > > >> > to call
> > > > > > > > >> > CassandraResource.copy(String copyLocation)
> > > > > > > > >> > and CassandraResource.createChild(String childName).
> > > > > > > > >> >
> > > > > > > > >> > Then I will have to write an "Adaptable" class to
> > > > > > > > >> > facilitate CassandraResource to deal with its
> > corresponding
> > > > > > > cassandra
> > > > > > > > >> > nodes.
> > > > > > > > >> > In that sense I feel the best way to approach to this
> > > project
> > > > > when
> > > > > > > > >> > implementing is an bottom-up approach. We start from the
> > > > > > "Adaptable"
> > > > > > > > >> class
> > > > > > > > >> > (given the fact that it should be expanded during
> > > > > implementation)
> > > > > > > and
> > > > > > > > >> then
> > > > > > > > >> > goes to the sling Resource wrapper layer which is
> > > > > > > > CassandraResourceImpl.
> > > > > > > > >>
> > > > > > > > >>
> > > > > > > > >> Resource extends Adaptable, so you dont get much choice
> > there,
> > > > > just
> > > > > > > > >> implement the resource.
> > > > > > > > >>
> > > > > > > > >> >
> > > > > > > > >> > What do you think ? And may I know the expected scope of
> > > this
> > > > > > > project
> > > > > > > > by
> > > > > > > > >> > the community (just a potential one, during the
> > > implementation
> > > > > we
> > > > > > > can
> > > > > > > > >> > expand it as time permits) .i.e
> > > > > > > > >> > READ,
> > > > > > > > >> > READ with access control
> > > > > > > > >> > READ/WRITE with access control and etc.
> > > > > > > > >> >
> > > > > > > > >>
> > > > > > > > >> Yes, thats the idea.
> > > > > > > > >> It would be nicer to have 4 iterations to fit the GSoC
> > > timeline
> > > > > and
> > > > > > do
> > > > > > > > >> 2 before half time, and 2 after. Perhaps the first half
> can
> > > also
> > > > > > > > >
> > > > > > > > > include spinning up Cassandra, getting client APIs working
> > and
> > > > > > getting
> > > > > > > > >> fully upto speed with that area of Sling.
> > > > > > > > >>
> > > > > > > > >
> > > > > > > > > +1 . Will make in to four iteration (generally 2 before
> > midterm
> > > > > and 2
> > > > > > > > > after mid term) and will include getting client API working
> > for
> > > > > > > Cassandra
> > > > > > > > > and related sling stuff as a part of first two iterations
> > > (which
> > > > > > means
> > > > > > > > > before mid term ). And to meet deadlines, should target
> more
> > to
> > > > be
> > > > > > > > > completed before mid term compared to the work scheduled
> > after
> > > > the
> > > > > > mid
> > > > > > > > > term. Will make it count in project proposal time line
> > > schedule.
> > > > > And
> > > > > > > > thank
> > > > > > > > > you for the aforementioned feedback so that I can provide a
> > > solid
> > > > > > > > proposal
> > > > > > > > > in this year as well.
> > > > > > > > > Will post as soon as when I got update. Meanwhile I will
> > build
> > > > > sling
> > > > > > > and
> > > > > > > > > getting familiar with the code base with the help of the
> > sling
> > > > > > > > > documentation.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >>
> > > > > > > > >>
> > > > > > > > >> Ian
> > > > > > > > >> >
> > > > > > > > >> >> I hope that gives you an idea of how a
> > > > > CassandraResourceProvider
> > > > > > > and
> > > > > > > > >> >> associated implementation should work. If you havent
> > > already,
> > > > > and
> > > > > > > are
> > > > > > > > >> >> still interested you should read up on how Sling and
> OSGi
> > > > > works.
> > > > > > > > >> >> Trying the "Sling in 15 minutes"[3] is a good place to
> > > start.
> > > > > And
> > > > > > > > then
> > > > > > > > >> >> reading everything you can about Declarative Services
> in
> > > > OSGi.
> > > > > > The
> > > > > > > 2
> > > > > > > > >> >> key things you are going to need to understand is how
> > OSGi
> > > > > > bundles
> > > > > > > > >> >> import and export packages and then how Declarative,
> > > declare
> > > > > > > services
> > > > > > > > >> >> that they depend on and declare services they
> implement,
> > > [4]
> > > > > is a
> > > > > > > > >> >> bunch of links.
> > > > > > > > >> >>
> > > > > > > > >> >
> > > > > > > > >> > Yes, I will go through the mentioned links. Specially
> like
> > > [3]
> > > > > > > which I
> > > > > > > > >> have
> > > > > > > > >> > not yet gone through. I also have some experience in
> using
> > > > OSGi
> > > > > > > > >> importing
> > > > > > > > >> > exporting packages and using maven scr plugin in classes
> > > with
> > > > > > "bind"
> > > > > > > > >> > "unbind" attributes to register and unregister OSGi
> > services
> > > > and
> > > > > > > etc.
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> >> HTH
> > > > > > > > >> >> Ian
> > > > > > > > >> >>
> > > > > > > > >> >>
> > > > > > > > >> >> 1
> > > > > > > > >> >>
> > > > > > > > >>
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > > > > > > > >> >> 2
> > > > > > > > >> >>
> > > > > > > > >>
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > > > > > > > >> >> 3
> > > > > http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > > > > > > > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf(chapter
> > > > > 112)
> > > > > > > > >> >>
> > > > > > > > >> >>
> > > > > > > > >>
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > > > > > > > >> >>
> > > > > > > > >> >>
> > > > > > > > >>
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > > > > > > > >> >>
> > > > > > > > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> > > > > > > ddwijewardana@gmail.com
> > > > > > > > >
> > > > > > > > >> >> wrote:
> > > > > > > > >> >> > Hi Ian,
> > > > > > > > >> >> > Thank you very much for the explanation. Before
> > replying
> > > to
> > > > > > this
> > > > > > > > >> mail, I
> > > > > > > > >> >> > revisited the facts you mentioned and try to comeup
> > with
> > > a
> > > > > end
> > > > > > to
> > > > > > > > >> end big
> > > > > > > > >> >> > picture and what are the challenges that has to face
> > when
> > > > > > > > >> implementing
> > > > > > > > >> >> this
> > > > > > > > >> >> > project.
> > > > > > > > >> >> >
> > > > > > > > >> >> > Read/write with Cassandra data seems is pretty
> straight
> > > > > forward
> > > > > > > > with
> > > > > > > > >> few
> > > > > > > > >> >> > lines of code using a client API. But the tricky part
> > is
> > > to
> > > > > > make
> > > > > > > a
> > > > > > > > >> clean
> > > > > > > > >> >> > bridge between JCR wrapped sling resource API vs
> > > Cassendra
> > > > > > column
> > > > > > > > >> family
> > > > > > > > >> >> > data storage. So I took some time and went through
> the
> > > JCR
> > > > > spec
> > > > > > > and
> > > > > > > > >> try
> > > > > > > > >> >> to
> > > > > > > > >> >> > understand how it deals with resources (I assumed
> sling
> > > > > > resource
> > > > > > > is
> > > > > > > > >> >> > directly based on JCR node concept). And got a good
> > > > > > understanding
> > > > > > > > of
> > > > > > > > >> how
> > > > > > > > >> >> > JCR thinks on resource and how they deal with it.
> > > > > > > > >> >> >
> > > > > > > > >> >> > Because we need to think of the mapping between the
> > sling
> > > > > > wrapper
> > > > > > > > >> >> interface
> > > > > > > > >> >> > for resources which is
> > > > >  org.apache.sling.api.resource.Resource
> > > > > > > > >> (which is
> > > > > > > > >> >> a
> > > > > > > > >> >> > JCR Node as I understand) and the Cassendra data
> layer.
> > > For
> > > > > > > > instance
> > > > > > > > >> >> > Cassandra provider will return a sling resource and
> it
> > > > should
> > > > > > be
> > > > > > > > >> enrich
> > > > > > > > >> >> > with the properties/attributes which helps the sling
> > > > resource
> > > > > > to
> > > > > > > > >> keep its
> > > > > > > > >> >> > state like resource meta data, resource type (which
> > > should
> > > > be
> > > > > > the
> > > > > > > > JCR
> > > > > > > > >> >> node
> > > > > > > > >> >> > type),  and etc.
> > > > > > > > >> >> >
> > > > > > > > >> >> > And the provider should only return a resource which
> > only
> > > > has
> > > > > > > such
> > > > > > > > >> very
> > > > > > > > >> >> > basic meta data. For instance, like
> > > > > > > > >> >>  org.apache.sling.api.resource.Resource
> > > > > > > > >> >> > #getChild() #getChildren() we should not keep those
> in
> > > > > memory.
> > > > > > We
> > > > > > > > >> should
> > > > > > > > >> >> > return them on  the fly from Cassandra.
> > > > > > > > >> >> >
> > > > > > > > >> >> > I think we should write a separate Sling Cassandra
> > > Adapter
> > > > > > layer
> > > > > > > > and
> > > > > > > > >> >> > provider should talk to Cassandra through Cassandra
> > > > Adapter.
> > > > > I
> > > > > > > hope
> > > > > > > > >> this
> > > > > > > > >> >> > will make it more cleaner.
> > > > > > > > >> >> > Appreciate your valuable feedback. So that based on
> > > > feedback
> > > > > I
> > > > > > > can
> > > > > > > > >> >> provide
> > > > > > > > >> >> > a patch which will reflect the basic architecture and
> > > keep
> > > > on
> > > > > > > > >> patching
> > > > > > > > >> >> with
> > > > > > > > >> >> > future additions.
> > > > > > > > >> >> >
> > > > > > > > >> >> >
> > > > > > > > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <
> > > ieb@tfd.co.uk
> > > > >
> > > > > > > wrote:
> > > > > > > > >> >> >
> > > > > > > > >> >> >> Hi and welcome,
> > > > > > > > >> >> >> Some comments inline below.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > > > > > > > >> ddwijewardana@gmail.com>
> > > > > > > > >> >> >> wrote:
> > > > > > > > >> >> >> > Hi all,
> > > > > > > > >> >> >> > I am Dishara Wijewardana, a student who is willing
> > to
> > > > take
> > > > > > > part
> > > > > > > > in
> > > > > > > > >> >> this
> > > > > > > > >> >> >> > GSoC 2013 .
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > I have successfully completed GSoC 2012 in Apache
> > > > Velocity
> > > > > > and
> > > > > > > > >> there I
> > > > > > > > >> >> >> have
> > > > > > > > >> >> >> > implemented JSR 223 support for Velocity. I found
> > > myself
> > > > > > > really
> > > > > > > > >> >> >> interested
> > > > > > > > >> >> >> > in this project since it covers very useful and
> > > > > interesting
> > > > > > > > >> topics. So
> > > > > > > > >> >> >> > thought of getting in to this project idea and
> > > provide a
> > > > > > good
> > > > > > > > >> proposal
> > > > > > > > >> >> >> for
> > > > > > > > >> >> >> > this project.
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > So I did some research around sling which might be
> > > > useful
> > > > > > for
> > > > > > > me
> > > > > > > > >> to
> > > > > > > > >> >> get
> > > > > > > > >> >> >> in
> > > > > > > > >> >> >> > to this project. I like sling as it sticks to
> > > community
> > > > > > > > standards
> > > > > > > > >> >> where
> > > > > > > > >> >> >> it
> > > > > > > > >> >> >> > uses a standard JCR2 repository to store resources
> > > which
> > > > > is
> > > > > > a
> > > > > > > > >> really
> > > > > > > > >> >> good
> > > > > > > > >> >> >> > thing to have.
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > I went through the information provided in the
> > JIRA[1]
> > > > and
> > > > > > > > >> according
> > > > > > > > >> >> to
> > > > > > > > >> >> >> > that at the end of this project what is expected
> to
> > > have
> > > > > > > > >> implemented
> > > > > > > > >> >> is a
> > > > > > > > >> >> >> > ResourceProvider for Sling which tunnels with a
> > > > Cassandra
> > > > > > > > >> (standalone
> > > > > > > > >> >> >> > one/cluster).
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> yes, correct.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > As far as I got to know, sling directly calls to
> > > Apache
> > > > > > > > JackRabbit
> > > > > > > > >> >> APIs
> > > > > > > > >> >> >> > (JCR APIs) to store resources. So I found a bit
> > > > > complicated
> > > > > > > this
> > > > > > > > >> >> project
> > > > > > > > >> >> >> > idea in that sense. Because if we are to
> implement a
> > > > > > Cassandra
> > > > > > > > >> backend
> > > > > > > > >> >> >> for
> > > > > > > > >> >> >> > Sling (as per this proposal), and Sling storage is
> > on
> > > > top
> > > > > of
> > > > > > > > >> >> JackRabbit,
> > > > > > > > >> >> >> > ideally what should happen is to make JackRabbit
> > > capable
> > > > > of
> > > > > > > > using
> > > > > > > > >> >> >> Cassandra
> > > > > > > > >> >> >> > as its resource persistent layer, and configure it
> > > > through
> > > > > > > > Sling ?
> > > > > > > > >> >> Please
> > > > > > > > >> >> >> > correct me If I am wrong.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> Your right.
> > > > > > > > >> >> >> The idea is this, Sling resolves paths into
> Resources
> > > > > > > > >> >> >> ie /content/mywebsite/page1.html is resolved to a
> > > Resource
> > > > > > with
> > > > > > > a
> > > > > > > > >> path
> > > > > > > > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a
> JCR
> > > > > > > repository
> > > > > > > > >> >> >> takes ownership of everything under /, so all
> > Resources
> > > > are
> > > > > > JCR
> > > > > > > > >> >> >> Resources.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> However, with a ResourceProvider its possible to
> > > "mount" a
> > > > > > > > >> alternative
> > > > > > > > >> >> >> source of Resources at any location in the tree. eg:
> > > > > > > > >> >> >> If I create a ResourceProvider and configure it to
> > > respond
> > > > > to
> > > > > > > all
> > > > > > > > >> >> >> resource resolution operations at
> > > > > > > > >> >> >> /content/cassandra
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> then
> > > > > > > > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> will generate a Cassandra Resource instead of a JCR
> > > > > Resource.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> Initially the aim is to write a ResourceProvider
> that
> > > will
> > > > > > allow
> > > > > > > > >> >> >> Readonly access to a Cassandra cluster (cluster of
> one
> > > is
> > > > ok
> > > > > > for
> > > > > > > > >> >> >> testing), but ultimately we would like to be able to
> > > write
> > > > > to
> > > > > > > that
> > > > > > > > >> >> >> cluster as well.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> Why Do it ?
> > > > > > > > >> >> >> Every storage platform has different
> characteristics,
> > > some
> > > > > are
> > > > > > > > ideal
> > > > > > > > >> >> >> for extreem volume writes of throw away data, some
> are
> > > > ideal
> > > > > > for
> > > > > > > > >> >> >> extreem volume reads of precious audited
> > transactrional
> > > > > data.
> > > > > > > > Being
> > > > > > > > >> >> >> able to "mount" multiple stores in Sling enables
> Sling
> > > to
> > > > > > > > integrate
> > > > > > > > >> >> >> data from all types of sources using best of breed
> > > address
> > > > > > each
> > > > > > > > use
> > > > > > > > >> >> >> case. (Thats the theory, anyway :))
> > > > > > > > >> >> >>
> > > > > > > > >> >> >
> > > > > > > > >> >> > +1 and this is a wonderful architecture interms of
> > > > > > extensibility.
> > > > > > > > >> >> Something
> > > > > > > > >> >> > even a repository vendor like Jackrabbit also would
> > want
> > > to
> > > > > > > follow.
> > > > > > > > >> >> Because
> > > > > > > > >> >> > they only have a JCR interfaced tree.
> > > > > > > > >> >> >
> > > > > > > > >> >> >
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> I hope that makes things clearer.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> 1 http://sling.apache.org/site/resources.html
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > But if it is only to READ resources, this project
> is
> > > > > > > relatively
> > > > > > > > >> less
> > > > > > > > >> >> >> > complex (not quite sure though ;-) ) since what is
> > > > > required
> > > > > > is
> > > > > > > > to
> > > > > > > > >> >> have a
> > > > > > > > >> >> >> > JCR/Sling Resource compatible wrapper layer
> > interface
> > > on
> > > > > top
> > > > > > > of
> > > > > > > > >> >> Cassendra
> > > > > > > > >> >> >> > to read cassandra data.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> Initially, just read. Then read with access control.
> > The
> > > > > > > > read/write
> > > > > > > > >> >> >> with access control.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >
> > > > > > > > >> >> > Read/Write complexity will be more or less the same
> as
> > I
> > > > > feel.
> > > > > > >  But
> > > > > > > > >> read
> > > > > > > > >> >> > write with access control is something we have to
> > discuss
> > > > > > > > separately.
> > > > > > > > >> >> > Does sling maintaining access control directly with
> > > > > > jackrabbit's
> > > > > > > > >> >> > javax.jcr.security module ? Or any inhouse access
> > control
> > > > > > layer ?
> > > > > > > > >> >> >
> > > > > > > > >> >> >
> > > > > > > > >> >> >
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > Appreciate any feedback and guidance on how to
> > > proceed.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> If you havent already you need to checkout the
> > > information
> > > > > at:
> > > > > > > > >> >> >> *
> > > > > http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > > > > > > > >> >> >> * http://community.apache.org/gsoc.html
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> especially the timeline and dates.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> There is no guarantee that Apache will be a GSoC
> > > > > organisation
> > > > > > > > >> >> >> (although its highly likely), and there are
> currently
> > > 129
> > > > > > > project
> > > > > > > > >> >> >> proposals so there is no guarantee that you will get
> > > > > accepted
> > > > > > > as a
> > > > > > > > >> >> >> Student on this project, but the quality of your
> > > > submission
> > > > > > and
> > > > > > > > your
> > > > > > > > >> >> >> enthusiasm will go a long way to making that happen.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> Good luck and I look forward to seeing you on these
> > > lists
> > > > > over
> > > > > > > the
> > > > > > > > >> >> >> summer. If you do make it through, I and everyone in
> > > this
> > > > > > > > community
> > > > > > > > >> >> >> will try and make it fun and rewarding for you.
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> Best Regards
> > > > > > > > >> >> >> Ian
> > > > > > > > >> >> >>
> > > > > > > > >> >> >>
> > > > > > > > >> >> >>
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > [1] -
> > > https://issues.apache.org/jira/browse/SLING-2798
> > > > > > > > >> >> >> >
> > > > > > > > >> >> >> > --
> > > > > > > > >> >> >> > Thanks
> > > > > > > > >> >> >> > /Dishara
> > > > > > > > >> >> >>
> > > > > > > > >> >> >
> > > > > > > > >> >> >
> > > > > > > > >> >> >
> > > > > > > > >> >> > --
> > > > > > > > >> >> > Thanks
> > > > > > > > >> >> > /Dishara
> > > > > > > > >> >>
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >> > --
> > > > > > > > >> > Thanks
> > > > > > > > >> > /Dishara
> > > > > > > > >>
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > Thanks
> > > > > > > > > /Dishara
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Thanks
> > > > > > > > /Dishara
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Thanks
> > > > > > /Dishara
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Thanks
> > > > /Dishara
> > > >
> > >
> >
> >
> >
> > --
> > Thanks
> > /Dishara
> >
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
Hi,
The breakdown looks good, but I think you should aim to keep the
implementation in Cassandra simple to start with and not underestimate how
much time it may take to implement both read/write and access control on
read/write.  No need to change the plan or be too specific at this stage.

Best Regards
Ian


On 12 April 2013 23:24, Dishara Wijewardana <dd...@gmail.com> wrote:

> Hi Ian,
> I am in the process of writing the proposal. So as you mentioned earlier it
> is better to split this in to 4 sub tasks and 2 before midterm and 2 after
> mid term.
>
> So in summary I would like to add the subtasks that I feel. Please add
> anything I am missing or anything required to have.
>
> Main tasks overview:
> 1. Implementing a CassandraResourceProvider  to READ from Cassandra.
> Implementation Details [1]
> 2. Test with one node Cassandra cluster end to end with the implementation
> of #1.
> 3. Enhance CassandraResourceProvider to READ with access control (with
> latest security related APIs).
> 4. Enhance CassandraResourceProvider(or may be a new interface for writing
> i.e CassandraPopulator) to WRITE and WRITE with access control.
>
> Here as I feel, #1 and #2 completion will more weight and relatively more
> time consuming than #3 and #4 (I am not aware of the complexity of
> incoperating the access control to READ/WRITE).
>
> Appreciate your valuable feedback on this, whether this task breakdown is
> appropriate or not suits to the GSoC time line or anything more to
> add/remove and etc ?
>
> [1] : Implementation Details:
>
> - Write a CassanrdaResourceProviderUtil  which is basically a cassendra
> client which will facilitate all cassandra related operations required by
> other modules (CassandraResourceProvider and CassandraResourceResolver).
>
> - Implementation of  CassandraResourceProvider
>
> - Implementation of CassandraResourceResolver
>
> - Implementation of CassandraResource
>
>
> On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk> wrote:
>
> > On 7 April 2013 14:07, Dishara Wijewardana <dd...@gmail.com>
> > wrote:
> >
> > > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > >
> > > > That sounds good.
> > > > If you havent already it will be important to become familiar with
> OSGi
> > > and
> > > > Sling itself.
> > > > Please dont do too much work before getting being accepted. I
> > > > cant guarantee that you will be accepted since there are lots of
> Apache
> > > > projects, lots of submissions and a limited number of places given to
> > > > Apache.
> > > >
> > > Yes I agree with you. There are loads of projects from Apache each
> year.
> > > But if the proposal is solid where it's apparently attainable within
> the
> > > timeline and if community willing to mentor the project with high
> > priority,
> > > I think there is a very good chance of getting accepted. But still
> > > can't guarantee it 100%. I got what you meant ;-).
> > >
> >
> >
> > Good, we understand each other, and your analysis is correct.
> > Just incase it hasn't been obvious, I am very willing to mentor this
> > project, as are other members of the community for other projects.
> > Ian
> >
> >
> >
> > >
> > > Thanks for the feedback.
> > >
> > >
> > >
> > > > Have a great weekend.
> > > > Ian
> > > >
> > > >
> > > >
> > > > On 7 April 2013 02:12, Dishara Wijewardana <dd...@gmail.com>
> > > > wrote:
> > > >
> > > > > Hi Ian
> > > > > Than you for the quick response. I have started localhost Cassendra
> > and
> > > > > written some codes through hector API to create columns and etc.
> And
> > > > works
> > > > > fine. I am still doing some more test codings to get familiar more
> > with
> > > > > Cassendra these days so that I can reuse those codes and write an
> > > > > appropriate CassendraResourceProviderUtil class .Meanwhile I will
> > > prepare
> > > > > the project proposal.  Please let me know if you want something
> > > more/else
> > > > > to be done before hand that would be useful to this project.
> > > > >
> > > > > On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > > >
> > > > > > Hi
> > > > > > Hector looks good.
> > > > > >
> > > > > > Sling wont ship a Cassandra instance, for this project it will
> > uses a
> > > > > > Cassandra instance setup separately  Last time I spun up
> Cassandra
> > it
> > > > for
> > > > > > dev purposes it was just as easy as installing MySQL or
> PostgreSQL,
> > > so
> > > > I
> > > > > > think that fine.
> > > > > >
> > > > > +1.
> > > > >
> > > > > >
> > > > > > If using Hector, I think it would be good to do everything in CQL
> > and
> > > > > keep
> > > > > > it all very simple and transparent. Remember the aim of the
> project
> > > is
> > > > to
> > > > > > prove that the ResourceProvider API can support Cassandra as a
> > > > repository
> > > > > > store, and that API is complete and usable all the way through to
> > the
> > > > > > latest security related APIs that have just been developed. This
> > > > project
> > > > > is
> > > > > > not an exercise in doing cool and complex things in Cassandra
> > > > > > with automated ORM mapping that binds the code forever to one
> > > Cassandra
> > > > > > API.
> > > > > >
> > > > > >
> > > > > Totally agree. So ideally in a users's perspective, when dealing
> with
> > > > sling
> > > > > layer, there should not be any difference between the resources in
> > > > >  /root/jackrabbit and /root/cassandra for example.
> > > > >
> > > > > Sound ok to you, or do you see problems ?
> > > > > >
> > > > >
> > > > > Yes, no problems at all. Quite fine with the suggestions.
> > > > >
> > > > > > Ian
> > > > > >
> > > > > >
> > > > > > On 6 April 2013 16:55, Dishara Wijewardana <
> > ddwijewardana@gmail.com>
> > > > > > wrote:
> > > > > >
> > > > > > > Hi Ian,
> > > > > > >
> > > > > > > In Sling, are we going to ship native Cassandra instance with
> the
> > > > sling
> > > > > > > binary pack? ( is there already a native cassandra server
> > starting
> > > at
> > > > > > sling
> > > > > > > server start up ?)
> > > > > > > I am willing to use hector API to deal with Cassandra, as in
> most
> > > of
> > > > > > >  occasions around . Please let me know if there is any concerns
> > on
> > > > that
> > > > > > > aspect ?
> > > > > > >
> > > > > > >
> > > > > > > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > > > > > > ddwijewardana@gmail.com
> > > > > > > > wrote:
> > > > > > >
> > > > > > > > Hi Ian,
> > > > > > > >
> > > > > > > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk>
> > > wrote:
> > > > > > > >
> > > > > > > >> On 2 April 2013 07:55, Dishara Wijewardana <
> > > > ddwijewardana@gmail.com
> > > > > >
> > > > > > > >> wrote:
> > > > > > > >> > Hi Ian,
> > > > > > > >> > Thanks for the explanation. Really helped me to get
> several
> > > > stuff
> > > > > > > >> cleared.
> > > > > > > >> >
> > > > > > > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ieb@tfd.co.uk
> >
> > > > wrote:
> > > > > > > >> >
> > > > > > > >> >> Hi Dishara,
> > > > > > > >> >>
> > > > > > > >> >> You should not think about implementing the JCR API
> classes
> > > > > > > >> >> (javax.jcr.*). You should think about implementing the
> > > Resource
> > > > > > > >> >> API[1]. When you need to perform something that the
> > > ResourceAPI
> > > > > > > doesnt
> > > > > > > >> >> support (say in a servlet), then you can use the
> > > > > > > >> >> Resource.adapTo(Class<?> clazz) method to adapt the
> > resource
> > > > > into a
> > > > > > > >> >> class that supports that operation.
> > > > > > > >> >>
> > > > > > > >> >
> > > > > > > >> > Interesting.!! . If I got you correctly "adapTo" concept
> > used
> > > to
> > > > > > > achieve
> > > > > > > >> > *kind of* dynamic multiple inheritance rather than
> > extending a
> > > > > heavy
> > > > > > > >> > abstract class. if that is so, this is a wonderful idea
> and
> > I
> > > > > really
> > > > > > > >> like
> > > > > > > >> > the concept.
> > > > > > > >>
> > > > > > > >> Calling it inheritance might be going too far as the class
> > isn't
> > > > > > > >> necessarily the same, but in essence, yes.
> > > > > > > >>
> > > > > > > >> >
> > > > > > > >> >
> > > > > > > >> >>
> > > > > > > >> >> eg:
> > > > > > > >> >> The properties of the resource are exposed via
> > > ResourceMetadata
> > > > > > [2],
> > > > > > > >> >> but lets say you want to find the underlying Cassandra
> > object
> > > > to
> > > > > > copy
> > > > > > > >> >> it and create a child.
> > > > > > > >> >>
> > > > > > > >> >> So: CassandraResource implements Resource, which is what
> is
> > > > > > returned
> > > > > > > >> >> when the CassandraResourceProvider resolves a Resource. A
> > > > client
> > > > > > > >> >> should not bind to CassandraResource or mention it, since
> > its
> > > > > > almost
> > > > > > > >> >> certainly an implementation and not an API. However, the
> > > > > Cassandra
> > > > > > > >> >> bundle you have written also implements CassandraContent
> > > which
> > > > > has
> > > > > > > >> >> CassandraContent.copy(String copyLocation) and
> > > > > > > >> >> CassandraContent.createChild(String childName).
> > > > > > > >> >
> > > > > > > >> > To get to this you would do
> > > > > > > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > > > > > > >> >> BTW, CassandraContent.class is an API exported by your
> > > bundle.
> > > > > > > >> >>
> > > > > > > >> >
> > > > > > > >> > If I got you correctly,
> > > > > > > >> >  after CassandraResource.adaptTo(CassandraContent.class) I
> > > > should
> > > > > be
> > > > > > > >> able
> > > > > > > >> > to call
> > > > > > > >> > CassandraResource.copy(String copyLocation)
> > > > > > > >> > and CassandraResource.createChild(String childName).
> > > > > > > >> >
> > > > > > > >> > Then I will have to write an "Adaptable" class to
> > > > > > > >> > facilitate CassandraResource to deal with its
> corresponding
> > > > > > cassandra
> > > > > > > >> > nodes.
> > > > > > > >> > In that sense I feel the best way to approach to this
> > project
> > > > when
> > > > > > > >> > implementing is an bottom-up approach. We start from the
> > > > > "Adaptable"
> > > > > > > >> class
> > > > > > > >> > (given the fact that it should be expanded during
> > > > implementation)
> > > > > > and
> > > > > > > >> then
> > > > > > > >> > goes to the sling Resource wrapper layer which is
> > > > > > > CassandraResourceImpl.
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> Resource extends Adaptable, so you dont get much choice
> there,
> > > > just
> > > > > > > >> implement the resource.
> > > > > > > >>
> > > > > > > >> >
> > > > > > > >> > What do you think ? And may I know the expected scope of
> > this
> > > > > > project
> > > > > > > by
> > > > > > > >> > the community (just a potential one, during the
> > implementation
> > > > we
> > > > > > can
> > > > > > > >> > expand it as time permits) .i.e
> > > > > > > >> > READ,
> > > > > > > >> > READ with access control
> > > > > > > >> > READ/WRITE with access control and etc.
> > > > > > > >> >
> > > > > > > >>
> > > > > > > >> Yes, thats the idea.
> > > > > > > >> It would be nicer to have 4 iterations to fit the GSoC
> > timeline
> > > > and
> > > > > do
> > > > > > > >> 2 before half time, and 2 after. Perhaps the first half can
> > also
> > > > > > > >
> > > > > > > > include spinning up Cassandra, getting client APIs working
> and
> > > > > getting
> > > > > > > >> fully upto speed with that area of Sling.
> > > > > > > >>
> > > > > > > >
> > > > > > > > +1 . Will make in to four iteration (generally 2 before
> midterm
> > > > and 2
> > > > > > > > after mid term) and will include getting client API working
> for
> > > > > > Cassandra
> > > > > > > > and related sling stuff as a part of first two iterations
> > (which
> > > > > means
> > > > > > > > before mid term ). And to meet deadlines, should target more
> to
> > > be
> > > > > > > > completed before mid term compared to the work scheduled
> after
> > > the
> > > > > mid
> > > > > > > > term. Will make it count in project proposal time line
> > schedule.
> > > > And
> > > > > > > thank
> > > > > > > > you for the aforementioned feedback so that I can provide a
> > solid
> > > > > > > proposal
> > > > > > > > in this year as well.
> > > > > > > > Will post as soon as when I got update. Meanwhile I will
> build
> > > > sling
> > > > > > and
> > > > > > > > getting familiar with the code base with the help of the
> sling
> > > > > > > > documentation.
> > > > > > > >
> > > > > > > >
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> Ian
> > > > > > > >> >
> > > > > > > >> >> I hope that gives you an idea of how a
> > > > CassandraResourceProvider
> > > > > > and
> > > > > > > >> >> associated implementation should work. If you havent
> > already,
> > > > and
> > > > > > are
> > > > > > > >> >> still interested you should read up on how Sling and OSGi
> > > > works.
> > > > > > > >> >> Trying the "Sling in 15 minutes"[3] is a good place to
> > start.
> > > > And
> > > > > > > then
> > > > > > > >> >> reading everything you can about Declarative Services in
> > > OSGi.
> > > > > The
> > > > > > 2
> > > > > > > >> >> key things you are going to need to understand is how
> OSGi
> > > > > bundles
> > > > > > > >> >> import and export packages and then how Declarative,
> > declare
> > > > > > services
> > > > > > > >> >> that they depend on and declare services they implement,
> > [4]
> > > > is a
> > > > > > > >> >> bunch of links.
> > > > > > > >> >>
> > > > > > > >> >
> > > > > > > >> > Yes, I will go through the mentioned links. Specially like
> > [3]
> > > > > > which I
> > > > > > > >> have
> > > > > > > >> > not yet gone through. I also have some experience in using
> > > OSGi
> > > > > > > >> importing
> > > > > > > >> > exporting packages and using maven scr plugin in classes
> > with
> > > > > "bind"
> > > > > > > >> > "unbind" attributes to register and unregister OSGi
> services
> > > and
> > > > > > etc.
> > > > > > > >> >
> > > > > > > >> >
> > > > > > > >> >> HTH
> > > > > > > >> >> Ian
> > > > > > > >> >>
> > > > > > > >> >>
> > > > > > > >> >> 1
> > > > > > > >> >>
> > > > > > > >>
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > > > > > > >> >> 2
> > > > > > > >> >>
> > > > > > > >>
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > > > > > > >> >> 3
> > > > http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > > > > > > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf (chapter
> > > > 112)
> > > > > > > >> >>
> > > > > > > >> >>
> > > > > > > >>
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > > > > > > >> >>
> > > > > > > >> >>
> > > > > > > >>
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > > > > > > >> >>
> > > > > > > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> > > > > > ddwijewardana@gmail.com
> > > > > > > >
> > > > > > > >> >> wrote:
> > > > > > > >> >> > Hi Ian,
> > > > > > > >> >> > Thank you very much for the explanation. Before
> replying
> > to
> > > > > this
> > > > > > > >> mail, I
> > > > > > > >> >> > revisited the facts you mentioned and try to comeup
> with
> > a
> > > > end
> > > > > to
> > > > > > > >> end big
> > > > > > > >> >> > picture and what are the challenges that has to face
> when
> > > > > > > >> implementing
> > > > > > > >> >> this
> > > > > > > >> >> > project.
> > > > > > > >> >> >
> > > > > > > >> >> > Read/write with Cassandra data seems is pretty straight
> > > > forward
> > > > > > > with
> > > > > > > >> few
> > > > > > > >> >> > lines of code using a client API. But the tricky part
> is
> > to
> > > > > make
> > > > > > a
> > > > > > > >> clean
> > > > > > > >> >> > bridge between JCR wrapped sling resource API vs
> > Cassendra
> > > > > column
> > > > > > > >> family
> > > > > > > >> >> > data storage. So I took some time and went through the
> > JCR
> > > > spec
> > > > > > and
> > > > > > > >> try
> > > > > > > >> >> to
> > > > > > > >> >> > understand how it deals with resources (I assumed sling
> > > > > resource
> > > > > > is
> > > > > > > >> >> > directly based on JCR node concept). And got a good
> > > > > understanding
> > > > > > > of
> > > > > > > >> how
> > > > > > > >> >> > JCR thinks on resource and how they deal with it.
> > > > > > > >> >> >
> > > > > > > >> >> > Because we need to think of the mapping between the
> sling
> > > > > wrapper
> > > > > > > >> >> interface
> > > > > > > >> >> > for resources which is
> > > >  org.apache.sling.api.resource.Resource
> > > > > > > >> (which is
> > > > > > > >> >> a
> > > > > > > >> >> > JCR Node as I understand) and the Cassendra data layer.
> > For
> > > > > > > instance
> > > > > > > >> >> > Cassandra provider will return a sling resource and it
> > > should
> > > > > be
> > > > > > > >> enrich
> > > > > > > >> >> > with the properties/attributes which helps the sling
> > > resource
> > > > > to
> > > > > > > >> keep its
> > > > > > > >> >> > state like resource meta data, resource type (which
> > should
> > > be
> > > > > the
> > > > > > > JCR
> > > > > > > >> >> node
> > > > > > > >> >> > type),  and etc.
> > > > > > > >> >> >
> > > > > > > >> >> > And the provider should only return a resource which
> only
> > > has
> > > > > > such
> > > > > > > >> very
> > > > > > > >> >> > basic meta data. For instance, like
> > > > > > > >> >>  org.apache.sling.api.resource.Resource
> > > > > > > >> >> > #getChild() #getChildren() we should not keep those in
> > > > memory.
> > > > > We
> > > > > > > >> should
> > > > > > > >> >> > return them on  the fly from Cassandra.
> > > > > > > >> >> >
> > > > > > > >> >> > I think we should write a separate Sling Cassandra
> > Adapter
> > > > > layer
> > > > > > > and
> > > > > > > >> >> > provider should talk to Cassandra through Cassandra
> > > Adapter.
> > > > I
> > > > > > hope
> > > > > > > >> this
> > > > > > > >> >> > will make it more cleaner.
> > > > > > > >> >> > Appreciate your valuable feedback. So that based on
> > > feedback
> > > > I
> > > > > > can
> > > > > > > >> >> provide
> > > > > > > >> >> > a patch which will reflect the basic architecture and
> > keep
> > > on
> > > > > > > >> patching
> > > > > > > >> >> with
> > > > > > > >> >> > future additions.
> > > > > > > >> >> >
> > > > > > > >> >> >
> > > > > > > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <
> > ieb@tfd.co.uk
> > > >
> > > > > > wrote:
> > > > > > > >> >> >
> > > > > > > >> >> >> Hi and welcome,
> > > > > > > >> >> >> Some comments inline below.
> > > > > > > >> >> >>
> > > > > > > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > > > > > > >> ddwijewardana@gmail.com>
> > > > > > > >> >> >> wrote:
> > > > > > > >> >> >> > Hi all,
> > > > > > > >> >> >> > I am Dishara Wijewardana, a student who is willing
> to
> > > take
> > > > > > part
> > > > > > > in
> > > > > > > >> >> this
> > > > > > > >> >> >> > GSoC 2013 .
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > I have successfully completed GSoC 2012 in Apache
> > > Velocity
> > > > > and
> > > > > > > >> there I
> > > > > > > >> >> >> have
> > > > > > > >> >> >> > implemented JSR 223 support for Velocity. I found
> > myself
> > > > > > really
> > > > > > > >> >> >> interested
> > > > > > > >> >> >> > in this project since it covers very useful and
> > > > interesting
> > > > > > > >> topics. So
> > > > > > > >> >> >> > thought of getting in to this project idea and
> > provide a
> > > > > good
> > > > > > > >> proposal
> > > > > > > >> >> >> for
> > > > > > > >> >> >> > this project.
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > So I did some research around sling which might be
> > > useful
> > > > > for
> > > > > > me
> > > > > > > >> to
> > > > > > > >> >> get
> > > > > > > >> >> >> in
> > > > > > > >> >> >> > to this project. I like sling as it sticks to
> > community
> > > > > > > standards
> > > > > > > >> >> where
> > > > > > > >> >> >> it
> > > > > > > >> >> >> > uses a standard JCR2 repository to store resources
> > which
> > > > is
> > > > > a
> > > > > > > >> really
> > > > > > > >> >> good
> > > > > > > >> >> >> > thing to have.
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > I went through the information provided in the
> JIRA[1]
> > > and
> > > > > > > >> according
> > > > > > > >> >> to
> > > > > > > >> >> >> > that at the end of this project what is expected to
> > have
> > > > > > > >> implemented
> > > > > > > >> >> is a
> > > > > > > >> >> >> > ResourceProvider for Sling which tunnels with a
> > > Cassandra
> > > > > > > >> (standalone
> > > > > > > >> >> >> > one/cluster).
> > > > > > > >> >> >>
> > > > > > > >> >> >> yes, correct.
> > > > > > > >> >> >>
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > As far as I got to know, sling directly calls to
> > Apache
> > > > > > > JackRabbit
> > > > > > > >> >> APIs
> > > > > > > >> >> >> > (JCR APIs) to store resources. So I found a bit
> > > > complicated
> > > > > > this
> > > > > > > >> >> project
> > > > > > > >> >> >> > idea in that sense. Because if we are to implement a
> > > > > Cassandra
> > > > > > > >> backend
> > > > > > > >> >> >> for
> > > > > > > >> >> >> > Sling (as per this proposal), and Sling storage is
> on
> > > top
> > > > of
> > > > > > > >> >> JackRabbit,
> > > > > > > >> >> >> > ideally what should happen is to make JackRabbit
> > capable
> > > > of
> > > > > > > using
> > > > > > > >> >> >> Cassandra
> > > > > > > >> >> >> > as its resource persistent layer, and configure it
> > > through
> > > > > > > Sling ?
> > > > > > > >> >> Please
> > > > > > > >> >> >> > correct me If I am wrong.
> > > > > > > >> >> >>
> > > > > > > >> >> >> Your right.
> > > > > > > >> >> >> The idea is this, Sling resolves paths into Resources
> > > > > > > >> >> >> ie /content/mywebsite/page1.html is resolved to a
> > Resource
> > > > > with
> > > > > > a
> > > > > > > >> path
> > > > > > > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR
> > > > > > repository
> > > > > > > >> >> >> takes ownership of everything under /, so all
> Resources
> > > are
> > > > > JCR
> > > > > > > >> >> >> Resources.
> > > > > > > >> >> >>
> > > > > > > >> >> >> However, with a ResourceProvider its possible to
> > "mount" a
> > > > > > > >> alternative
> > > > > > > >> >> >> source of Resources at any location in the tree. eg:
> > > > > > > >> >> >> If I create a ResourceProvider and configure it to
> > respond
> > > > to
> > > > > > all
> > > > > > > >> >> >> resource resolution operations at
> > > > > > > >> >> >> /content/cassandra
> > > > > > > >> >> >>
> > > > > > > >> >> >> then
> > > > > > > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > > > > > > >> >> >>
> > > > > > > >> >> >> will generate a Cassandra Resource instead of a JCR
> > > > Resource.
> > > > > > > >> >> >>
> > > > > > > >> >> >> Initially the aim is to write a ResourceProvider that
> > will
> > > > > allow
> > > > > > > >> >> >> Readonly access to a Cassandra cluster (cluster of one
> > is
> > > ok
> > > > > for
> > > > > > > >> >> >> testing), but ultimately we would like to be able to
> > write
> > > > to
> > > > > > that
> > > > > > > >> >> >> cluster as well.
> > > > > > > >> >> >>
> > > > > > > >> >> >> Why Do it ?
> > > > > > > >> >> >> Every storage platform has different characteristics,
> > some
> > > > are
> > > > > > > ideal
> > > > > > > >> >> >> for extreem volume writes of throw away data, some are
> > > ideal
> > > > > for
> > > > > > > >> >> >> extreem volume reads of precious audited
> transactrional
> > > > data.
> > > > > > > Being
> > > > > > > >> >> >> able to "mount" multiple stores in Sling enables Sling
> > to
> > > > > > > integrate
> > > > > > > >> >> >> data from all types of sources using best of breed
> > address
> > > > > each
> > > > > > > use
> > > > > > > >> >> >> case. (Thats the theory, anyway :))
> > > > > > > >> >> >>
> > > > > > > >> >> >
> > > > > > > >> >> > +1 and this is a wonderful architecture interms of
> > > > > extensibility.
> > > > > > > >> >> Something
> > > > > > > >> >> > even a repository vendor like Jackrabbit also would
> want
> > to
> > > > > > follow.
> > > > > > > >> >> Because
> > > > > > > >> >> > they only have a JCR interfaced tree.
> > > > > > > >> >> >
> > > > > > > >> >> >
> > > > > > > >> >> >>
> > > > > > > >> >> >> I hope that makes things clearer.
> > > > > > > >> >> >>
> > > > > > > >> >> >> 1 http://sling.apache.org/site/resources.html
> > > > > > > >> >> >>
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > But if it is only to READ resources, this project is
> > > > > > relatively
> > > > > > > >> less
> > > > > > > >> >> >> > complex (not quite sure though ;-) ) since what is
> > > > required
> > > > > is
> > > > > > > to
> > > > > > > >> >> have a
> > > > > > > >> >> >> > JCR/Sling Resource compatible wrapper layer
> interface
> > on
> > > > top
> > > > > > of
> > > > > > > >> >> Cassendra
> > > > > > > >> >> >> > to read cassandra data.
> > > > > > > >> >> >>
> > > > > > > >> >> >> Initially, just read. Then read with access control.
> The
> > > > > > > read/write
> > > > > > > >> >> >> with access control.
> > > > > > > >> >> >>
> > > > > > > >> >> >
> > > > > > > >> >> > Read/Write complexity will be more or less the same as
> I
> > > > feel.
> > > > > >  But
> > > > > > > >> read
> > > > > > > >> >> > write with access control is something we have to
> discuss
> > > > > > > separately.
> > > > > > > >> >> > Does sling maintaining access control directly with
> > > > > jackrabbit's
> > > > > > > >> >> > javax.jcr.security module ? Or any inhouse access
> control
> > > > > layer ?
> > > > > > > >> >> >
> > > > > > > >> >> >
> > > > > > > >> >> >
> > > > > > > >> >> >>
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > Appreciate any feedback and guidance on how to
> > proceed.
> > > > > > > >> >> >>
> > > > > > > >> >> >> If you havent already you need to checkout the
> > information
> > > > at:
> > > > > > > >> >> >> *
> > > > http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > > > > > > >> >> >> * http://community.apache.org/gsoc.html
> > > > > > > >> >> >>
> > > > > > > >> >> >> especially the timeline and dates.
> > > > > > > >> >> >>
> > > > > > > >> >> >> There is no guarantee that Apache will be a GSoC
> > > > organisation
> > > > > > > >> >> >> (although its highly likely), and there are currently
> > 129
> > > > > > project
> > > > > > > >> >> >> proposals so there is no guarantee that you will get
> > > > accepted
> > > > > > as a
> > > > > > > >> >> >> Student on this project, but the quality of your
> > > submission
> > > > > and
> > > > > > > your
> > > > > > > >> >> >> enthusiasm will go a long way to making that happen.
> > > > > > > >> >> >>
> > > > > > > >> >> >> Good luck and I look forward to seeing you on these
> > lists
> > > > over
> > > > > > the
> > > > > > > >> >> >> summer. If you do make it through, I and everyone in
> > this
> > > > > > > community
> > > > > > > >> >> >> will try and make it fun and rewarding for you.
> > > > > > > >> >> >>
> > > > > > > >> >> >> Best Regards
> > > > > > > >> >> >> Ian
> > > > > > > >> >> >>
> > > > > > > >> >> >>
> > > > > > > >> >> >>
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > [1] -
> > https://issues.apache.org/jira/browse/SLING-2798
> > > > > > > >> >> >> >
> > > > > > > >> >> >> > --
> > > > > > > >> >> >> > Thanks
> > > > > > > >> >> >> > /Dishara
> > > > > > > >> >> >>
> > > > > > > >> >> >
> > > > > > > >> >> >
> > > > > > > >> >> >
> > > > > > > >> >> > --
> > > > > > > >> >> > Thanks
> > > > > > > >> >> > /Dishara
> > > > > > > >> >>
> > > > > > > >> >
> > > > > > > >> >
> > > > > > > >> >
> > > > > > > >> > --
> > > > > > > >> > Thanks
> > > > > > > >> > /Dishara
> > > > > > > >>
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Thanks
> > > > > > > > /Dishara
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Thanks
> > > > > > > /Dishara
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Thanks
> > > > > /Dishara
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Thanks
> > > /Dishara
> > >
> >
>
>
>
> --
> Thanks
> /Dishara
>

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian,
I am in the process of writing the proposal. So as you mentioned earlier it
is better to split this in to 4 sub tasks and 2 before midterm and 2 after
mid term.

So in summary I would like to add the subtasks that I feel. Please add
anything I am missing or anything required to have.

Main tasks overview:
1. Implementing a CassandraResourceProvider  to READ from Cassandra.
Implementation Details [1]
2. Test with one node Cassandra cluster end to end with the implementation
of #1.
3. Enhance CassandraResourceProvider to READ with access control (with
latest security related APIs).
4. Enhance CassandraResourceProvider(or may be a new interface for writing
i.e CassandraPopulator) to WRITE and WRITE with access control.

Here as I feel, #1 and #2 completion will more weight and relatively more
time consuming than #3 and #4 (I am not aware of the complexity of
incoperating the access control to READ/WRITE).

Appreciate your valuable feedback on this, whether this task breakdown is
appropriate or not suits to the GSoC time line or anything more to
add/remove and etc ?

[1] : Implementation Details:

- Write a CassanrdaResourceProviderUtil  which is basically a cassendra
client which will facilitate all cassandra related operations required by
other modules (CassandraResourceProvider and CassandraResourceResolver).

- Implementation of  CassandraResourceProvider

- Implementation of CassandraResourceResolver

- Implementation of CassandraResource


On Sun, Apr 7, 2013 at 3:27 PM, Ian Boston <ie...@tfd.co.uk> wrote:

> On 7 April 2013 14:07, Dishara Wijewardana <dd...@gmail.com>
> wrote:
>
> > On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> > > That sounds good.
> > > If you havent already it will be important to become familiar with OSGi
> > and
> > > Sling itself.
> > > Please dont do too much work before getting being accepted. I
> > > cant guarantee that you will be accepted since there are lots of Apache
> > > projects, lots of submissions and a limited number of places given to
> > > Apache.
> > >
> > Yes I agree with you. There are loads of projects from Apache each year.
> > But if the proposal is solid where it's apparently attainable within the
> > timeline and if community willing to mentor the project with high
> priority,
> > I think there is a very good chance of getting accepted. But still
> > can't guarantee it 100%. I got what you meant ;-).
> >
>
>
> Good, we understand each other, and your analysis is correct.
> Just incase it hasn't been obvious, I am very willing to mentor this
> project, as are other members of the community for other projects.
> Ian
>
>
>
> >
> > Thanks for the feedback.
> >
> >
> >
> > > Have a great weekend.
> > > Ian
> > >
> > >
> > >
> > > On 7 April 2013 02:12, Dishara Wijewardana <dd...@gmail.com>
> > > wrote:
> > >
> > > > Hi Ian
> > > > Than you for the quick response. I have started localhost Cassendra
> and
> > > > written some codes through hector API to create columns and etc. And
> > > works
> > > > fine. I am still doing some more test codings to get familiar more
> with
> > > > Cassendra these days so that I can reuse those codes and write an
> > > > appropriate CassendraResourceProviderUtil class .Meanwhile I will
> > prepare
> > > > the project proposal.  Please let me know if you want something
> > more/else
> > > > to be done before hand that would be useful to this project.
> > > >
> > > > On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > >
> > > > > Hi
> > > > > Hector looks good.
> > > > >
> > > > > Sling wont ship a Cassandra instance, for this project it will
> uses a
> > > > > Cassandra instance setup separately  Last time I spun up Cassandra
> it
> > > for
> > > > > dev purposes it was just as easy as installing MySQL or PostgreSQL,
> > so
> > > I
> > > > > think that fine.
> > > > >
> > > > +1.
> > > >
> > > > >
> > > > > If using Hector, I think it would be good to do everything in CQL
> and
> > > > keep
> > > > > it all very simple and transparent. Remember the aim of the project
> > is
> > > to
> > > > > prove that the ResourceProvider API can support Cassandra as a
> > > repository
> > > > > store, and that API is complete and usable all the way through to
> the
> > > > > latest security related APIs that have just been developed. This
> > > project
> > > > is
> > > > > not an exercise in doing cool and complex things in Cassandra
> > > > > with automated ORM mapping that binds the code forever to one
> > Cassandra
> > > > > API.
> > > > >
> > > > >
> > > > Totally agree. So ideally in a users's perspective, when dealing with
> > > sling
> > > > layer, there should not be any difference between the resources in
> > > >  /root/jackrabbit and /root/cassandra for example.
> > > >
> > > > Sound ok to you, or do you see problems ?
> > > > >
> > > >
> > > > Yes, no problems at all. Quite fine with the suggestions.
> > > >
> > > > > Ian
> > > > >
> > > > >
> > > > > On 6 April 2013 16:55, Dishara Wijewardana <
> ddwijewardana@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > Hi Ian,
> > > > > >
> > > > > > In Sling, are we going to ship native Cassandra instance with the
> > > sling
> > > > > > binary pack? ( is there already a native cassandra server
> starting
> > at
> > > > > sling
> > > > > > server start up ?)
> > > > > > I am willing to use hector API to deal with Cassandra, as in most
> > of
> > > > > >  occasions around . Please let me know if there is any concerns
> on
> > > that
> > > > > > aspect ?
> > > > > >
> > > > > >
> > > > > > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > > > > > ddwijewardana@gmail.com
> > > > > > > wrote:
> > > > > >
> > > > > > > Hi Ian,
> > > > > > >
> > > > > > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk>
> > wrote:
> > > > > > >
> > > > > > >> On 2 April 2013 07:55, Dishara Wijewardana <
> > > ddwijewardana@gmail.com
> > > > >
> > > > > > >> wrote:
> > > > > > >> > Hi Ian,
> > > > > > >> > Thanks for the explanation. Really helped me to get several
> > > stuff
> > > > > > >> cleared.
> > > > > > >> >
> > > > > > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk>
> > > wrote:
> > > > > > >> >
> > > > > > >> >> Hi Dishara,
> > > > > > >> >>
> > > > > > >> >> You should not think about implementing the JCR API classes
> > > > > > >> >> (javax.jcr.*). You should think about implementing the
> > Resource
> > > > > > >> >> API[1]. When you need to perform something that the
> > ResourceAPI
> > > > > > doesnt
> > > > > > >> >> support (say in a servlet), then you can use the
> > > > > > >> >> Resource.adapTo(Class<?> clazz) method to adapt the
> resource
> > > > into a
> > > > > > >> >> class that supports that operation.
> > > > > > >> >>
> > > > > > >> >
> > > > > > >> > Interesting.!! . If I got you correctly "adapTo" concept
> used
> > to
> > > > > > achieve
> > > > > > >> > *kind of* dynamic multiple inheritance rather than
> extending a
> > > > heavy
> > > > > > >> > abstract class. if that is so, this is a wonderful idea and
> I
> > > > really
> > > > > > >> like
> > > > > > >> > the concept.
> > > > > > >>
> > > > > > >> Calling it inheritance might be going too far as the class
> isn't
> > > > > > >> necessarily the same, but in essence, yes.
> > > > > > >>
> > > > > > >> >
> > > > > > >> >
> > > > > > >> >>
> > > > > > >> >> eg:
> > > > > > >> >> The properties of the resource are exposed via
> > ResourceMetadata
> > > > > [2],
> > > > > > >> >> but lets say you want to find the underlying Cassandra
> object
> > > to
> > > > > copy
> > > > > > >> >> it and create a child.
> > > > > > >> >>
> > > > > > >> >> So: CassandraResource implements Resource, which is what is
> > > > > returned
> > > > > > >> >> when the CassandraResourceProvider resolves a Resource. A
> > > client
> > > > > > >> >> should not bind to CassandraResource or mention it, since
> its
> > > > > almost
> > > > > > >> >> certainly an implementation and not an API. However, the
> > > > Cassandra
> > > > > > >> >> bundle you have written also implements CassandraContent
> > which
> > > > has
> > > > > > >> >> CassandraContent.copy(String copyLocation) and
> > > > > > >> >> CassandraContent.createChild(String childName).
> > > > > > >> >
> > > > > > >> > To get to this you would do
> > > > > > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > > > > > >> >> BTW, CassandraContent.class is an API exported by your
> > bundle.
> > > > > > >> >>
> > > > > > >> >
> > > > > > >> > If I got you correctly,
> > > > > > >> >  after CassandraResource.adaptTo(CassandraContent.class) I
> > > should
> > > > be
> > > > > > >> able
> > > > > > >> > to call
> > > > > > >> > CassandraResource.copy(String copyLocation)
> > > > > > >> > and CassandraResource.createChild(String childName).
> > > > > > >> >
> > > > > > >> > Then I will have to write an "Adaptable" class to
> > > > > > >> > facilitate CassandraResource to deal with its corresponding
> > > > > cassandra
> > > > > > >> > nodes.
> > > > > > >> > In that sense I feel the best way to approach to this
> project
> > > when
> > > > > > >> > implementing is an bottom-up approach. We start from the
> > > > "Adaptable"
> > > > > > >> class
> > > > > > >> > (given the fact that it should be expanded during
> > > implementation)
> > > > > and
> > > > > > >> then
> > > > > > >> > goes to the sling Resource wrapper layer which is
> > > > > > CassandraResourceImpl.
> > > > > > >>
> > > > > > >>
> > > > > > >> Resource extends Adaptable, so you dont get much choice there,
> > > just
> > > > > > >> implement the resource.
> > > > > > >>
> > > > > > >> >
> > > > > > >> > What do you think ? And may I know the expected scope of
> this
> > > > > project
> > > > > > by
> > > > > > >> > the community (just a potential one, during the
> implementation
> > > we
> > > > > can
> > > > > > >> > expand it as time permits) .i.e
> > > > > > >> > READ,
> > > > > > >> > READ with access control
> > > > > > >> > READ/WRITE with access control and etc.
> > > > > > >> >
> > > > > > >>
> > > > > > >> Yes, thats the idea.
> > > > > > >> It would be nicer to have 4 iterations to fit the GSoC
> timeline
> > > and
> > > > do
> > > > > > >> 2 before half time, and 2 after. Perhaps the first half can
> also
> > > > > > >
> > > > > > > include spinning up Cassandra, getting client APIs working and
> > > > getting
> > > > > > >> fully upto speed with that area of Sling.
> > > > > > >>
> > > > > > >
> > > > > > > +1 . Will make in to four iteration (generally 2 before midterm
> > > and 2
> > > > > > > after mid term) and will include getting client API working for
> > > > > Cassandra
> > > > > > > and related sling stuff as a part of first two iterations
> (which
> > > > means
> > > > > > > before mid term ). And to meet deadlines, should target more to
> > be
> > > > > > > completed before mid term compared to the work scheduled after
> > the
> > > > mid
> > > > > > > term. Will make it count in project proposal time line
> schedule.
> > > And
> > > > > > thank
> > > > > > > you for the aforementioned feedback so that I can provide a
> solid
> > > > > > proposal
> > > > > > > in this year as well.
> > > > > > > Will post as soon as when I got update. Meanwhile I will build
> > > sling
> > > > > and
> > > > > > > getting familiar with the code base with the help of the sling
> > > > > > > documentation.
> > > > > > >
> > > > > > >
> > > > > > >>
> > > > > > >>
> > > > > > >> Ian
> > > > > > >> >
> > > > > > >> >> I hope that gives you an idea of how a
> > > CassandraResourceProvider
> > > > > and
> > > > > > >> >> associated implementation should work. If you havent
> already,
> > > and
> > > > > are
> > > > > > >> >> still interested you should read up on how Sling and OSGi
> > > works.
> > > > > > >> >> Trying the "Sling in 15 minutes"[3] is a good place to
> start.
> > > And
> > > > > > then
> > > > > > >> >> reading everything you can about Declarative Services in
> > OSGi.
> > > > The
> > > > > 2
> > > > > > >> >> key things you are going to need to understand is how OSGi
> > > > bundles
> > > > > > >> >> import and export packages and then how Declarative,
> declare
> > > > > services
> > > > > > >> >> that they depend on and declare services they implement,
> [4]
> > > is a
> > > > > > >> >> bunch of links.
> > > > > > >> >>
> > > > > > >> >
> > > > > > >> > Yes, I will go through the mentioned links. Specially like
> [3]
> > > > > which I
> > > > > > >> have
> > > > > > >> > not yet gone through. I also have some experience in using
> > OSGi
> > > > > > >> importing
> > > > > > >> > exporting packages and using maven scr plugin in classes
> with
> > > > "bind"
> > > > > > >> > "unbind" attributes to register and unregister OSGi services
> > and
> > > > > etc.
> > > > > > >> >
> > > > > > >> >
> > > > > > >> >> HTH
> > > > > > >> >> Ian
> > > > > > >> >>
> > > > > > >> >>
> > > > > > >> >> 1
> > > > > > >> >>
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > > > > > >> >> 2
> > > > > > >> >>
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > > > > > >> >> 3
> > > http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > > > > > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter
> > > 112)
> > > > > > >> >>
> > > > > > >> >>
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > > > > > >> >>
> > > > > > >> >>
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > > > > > >> >>
> > > > > > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> > > > > ddwijewardana@gmail.com
> > > > > > >
> > > > > > >> >> wrote:
> > > > > > >> >> > Hi Ian,
> > > > > > >> >> > Thank you very much for the explanation. Before replying
> to
> > > > this
> > > > > > >> mail, I
> > > > > > >> >> > revisited the facts you mentioned and try to comeup with
> a
> > > end
> > > > to
> > > > > > >> end big
> > > > > > >> >> > picture and what are the challenges that has to face when
> > > > > > >> implementing
> > > > > > >> >> this
> > > > > > >> >> > project.
> > > > > > >> >> >
> > > > > > >> >> > Read/write with Cassandra data seems is pretty straight
> > > forward
> > > > > > with
> > > > > > >> few
> > > > > > >> >> > lines of code using a client API. But the tricky part is
> to
> > > > make
> > > > > a
> > > > > > >> clean
> > > > > > >> >> > bridge between JCR wrapped sling resource API vs
> Cassendra
> > > > column
> > > > > > >> family
> > > > > > >> >> > data storage. So I took some time and went through the
> JCR
> > > spec
> > > > > and
> > > > > > >> try
> > > > > > >> >> to
> > > > > > >> >> > understand how it deals with resources (I assumed sling
> > > > resource
> > > > > is
> > > > > > >> >> > directly based on JCR node concept). And got a good
> > > > understanding
> > > > > > of
> > > > > > >> how
> > > > > > >> >> > JCR thinks on resource and how they deal with it.
> > > > > > >> >> >
> > > > > > >> >> > Because we need to think of the mapping between the sling
> > > > wrapper
> > > > > > >> >> interface
> > > > > > >> >> > for resources which is
> > >  org.apache.sling.api.resource.Resource
> > > > > > >> (which is
> > > > > > >> >> a
> > > > > > >> >> > JCR Node as I understand) and the Cassendra data layer.
> For
> > > > > > instance
> > > > > > >> >> > Cassandra provider will return a sling resource and it
> > should
> > > > be
> > > > > > >> enrich
> > > > > > >> >> > with the properties/attributes which helps the sling
> > resource
> > > > to
> > > > > > >> keep its
> > > > > > >> >> > state like resource meta data, resource type (which
> should
> > be
> > > > the
> > > > > > JCR
> > > > > > >> >> node
> > > > > > >> >> > type),  and etc.
> > > > > > >> >> >
> > > > > > >> >> > And the provider should only return a resource which only
> > has
> > > > > such
> > > > > > >> very
> > > > > > >> >> > basic meta data. For instance, like
> > > > > > >> >>  org.apache.sling.api.resource.Resource
> > > > > > >> >> > #getChild() #getChildren() we should not keep those in
> > > memory.
> > > > We
> > > > > > >> should
> > > > > > >> >> > return them on  the fly from Cassandra.
> > > > > > >> >> >
> > > > > > >> >> > I think we should write a separate Sling Cassandra
> Adapter
> > > > layer
> > > > > > and
> > > > > > >> >> > provider should talk to Cassandra through Cassandra
> > Adapter.
> > > I
> > > > > hope
> > > > > > >> this
> > > > > > >> >> > will make it more cleaner.
> > > > > > >> >> > Appreciate your valuable feedback. So that based on
> > feedback
> > > I
> > > > > can
> > > > > > >> >> provide
> > > > > > >> >> > a patch which will reflect the basic architecture and
> keep
> > on
> > > > > > >> patching
> > > > > > >> >> with
> > > > > > >> >> > future additions.
> > > > > > >> >> >
> > > > > > >> >> >
> > > > > > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <
> ieb@tfd.co.uk
> > >
> > > > > wrote:
> > > > > > >> >> >
> > > > > > >> >> >> Hi and welcome,
> > > > > > >> >> >> Some comments inline below.
> > > > > > >> >> >>
> > > > > > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > > > > > >> ddwijewardana@gmail.com>
> > > > > > >> >> >> wrote:
> > > > > > >> >> >> > Hi all,
> > > > > > >> >> >> > I am Dishara Wijewardana, a student who is willing to
> > take
> > > > > part
> > > > > > in
> > > > > > >> >> this
> > > > > > >> >> >> > GSoC 2013 .
> > > > > > >> >> >> >
> > > > > > >> >> >> > I have successfully completed GSoC 2012 in Apache
> > Velocity
> > > > and
> > > > > > >> there I
> > > > > > >> >> >> have
> > > > > > >> >> >> > implemented JSR 223 support for Velocity. I found
> myself
> > > > > really
> > > > > > >> >> >> interested
> > > > > > >> >> >> > in this project since it covers very useful and
> > > interesting
> > > > > > >> topics. So
> > > > > > >> >> >> > thought of getting in to this project idea and
> provide a
> > > > good
> > > > > > >> proposal
> > > > > > >> >> >> for
> > > > > > >> >> >> > this project.
> > > > > > >> >> >> >
> > > > > > >> >> >> > So I did some research around sling which might be
> > useful
> > > > for
> > > > > me
> > > > > > >> to
> > > > > > >> >> get
> > > > > > >> >> >> in
> > > > > > >> >> >> > to this project. I like sling as it sticks to
> community
> > > > > > standards
> > > > > > >> >> where
> > > > > > >> >> >> it
> > > > > > >> >> >> > uses a standard JCR2 repository to store resources
> which
> > > is
> > > > a
> > > > > > >> really
> > > > > > >> >> good
> > > > > > >> >> >> > thing to have.
> > > > > > >> >> >> >
> > > > > > >> >> >> > I went through the information provided in the JIRA[1]
> > and
> > > > > > >> according
> > > > > > >> >> to
> > > > > > >> >> >> > that at the end of this project what is expected to
> have
> > > > > > >> implemented
> > > > > > >> >> is a
> > > > > > >> >> >> > ResourceProvider for Sling which tunnels with a
> > Cassandra
> > > > > > >> (standalone
> > > > > > >> >> >> > one/cluster).
> > > > > > >> >> >>
> > > > > > >> >> >> yes, correct.
> > > > > > >> >> >>
> > > > > > >> >> >> >
> > > > > > >> >> >> > As far as I got to know, sling directly calls to
> Apache
> > > > > > JackRabbit
> > > > > > >> >> APIs
> > > > > > >> >> >> > (JCR APIs) to store resources. So I found a bit
> > > complicated
> > > > > this
> > > > > > >> >> project
> > > > > > >> >> >> > idea in that sense. Because if we are to implement a
> > > > Cassandra
> > > > > > >> backend
> > > > > > >> >> >> for
> > > > > > >> >> >> > Sling (as per this proposal), and Sling storage is on
> > top
> > > of
> > > > > > >> >> JackRabbit,
> > > > > > >> >> >> > ideally what should happen is to make JackRabbit
> capable
> > > of
> > > > > > using
> > > > > > >> >> >> Cassandra
> > > > > > >> >> >> > as its resource persistent layer, and configure it
> > through
> > > > > > Sling ?
> > > > > > >> >> Please
> > > > > > >> >> >> > correct me If I am wrong.
> > > > > > >> >> >>
> > > > > > >> >> >> Your right.
> > > > > > >> >> >> The idea is this, Sling resolves paths into Resources
> > > > > > >> >> >> ie /content/mywebsite/page1.html is resolved to a
> Resource
> > > > with
> > > > > a
> > > > > > >> path
> > > > > > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR
> > > > > repository
> > > > > > >> >> >> takes ownership of everything under /, so all Resources
> > are
> > > > JCR
> > > > > > >> >> >> Resources.
> > > > > > >> >> >>
> > > > > > >> >> >> However, with a ResourceProvider its possible to
> "mount" a
> > > > > > >> alternative
> > > > > > >> >> >> source of Resources at any location in the tree. eg:
> > > > > > >> >> >> If I create a ResourceProvider and configure it to
> respond
> > > to
> > > > > all
> > > > > > >> >> >> resource resolution operations at
> > > > > > >> >> >> /content/cassandra
> > > > > > >> >> >>
> > > > > > >> >> >> then
> > > > > > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > > > > > >> >> >>
> > > > > > >> >> >> will generate a Cassandra Resource instead of a JCR
> > > Resource.
> > > > > > >> >> >>
> > > > > > >> >> >> Initially the aim is to write a ResourceProvider that
> will
> > > > allow
> > > > > > >> >> >> Readonly access to a Cassandra cluster (cluster of one
> is
> > ok
> > > > for
> > > > > > >> >> >> testing), but ultimately we would like to be able to
> write
> > > to
> > > > > that
> > > > > > >> >> >> cluster as well.
> > > > > > >> >> >>
> > > > > > >> >> >> Why Do it ?
> > > > > > >> >> >> Every storage platform has different characteristics,
> some
> > > are
> > > > > > ideal
> > > > > > >> >> >> for extreem volume writes of throw away data, some are
> > ideal
> > > > for
> > > > > > >> >> >> extreem volume reads of precious audited transactrional
> > > data.
> > > > > > Being
> > > > > > >> >> >> able to "mount" multiple stores in Sling enables Sling
> to
> > > > > > integrate
> > > > > > >> >> >> data from all types of sources using best of breed
> address
> > > > each
> > > > > > use
> > > > > > >> >> >> case. (Thats the theory, anyway :))
> > > > > > >> >> >>
> > > > > > >> >> >
> > > > > > >> >> > +1 and this is a wonderful architecture interms of
> > > > extensibility.
> > > > > > >> >> Something
> > > > > > >> >> > even a repository vendor like Jackrabbit also would want
> to
> > > > > follow.
> > > > > > >> >> Because
> > > > > > >> >> > they only have a JCR interfaced tree.
> > > > > > >> >> >
> > > > > > >> >> >
> > > > > > >> >> >>
> > > > > > >> >> >> I hope that makes things clearer.
> > > > > > >> >> >>
> > > > > > >> >> >> 1 http://sling.apache.org/site/resources.html
> > > > > > >> >> >>
> > > > > > >> >> >> >
> > > > > > >> >> >> > But if it is only to READ resources, this project is
> > > > > relatively
> > > > > > >> less
> > > > > > >> >> >> > complex (not quite sure though ;-) ) since what is
> > > required
> > > > is
> > > > > > to
> > > > > > >> >> have a
> > > > > > >> >> >> > JCR/Sling Resource compatible wrapper layer interface
> on
> > > top
> > > > > of
> > > > > > >> >> Cassendra
> > > > > > >> >> >> > to read cassandra data.
> > > > > > >> >> >>
> > > > > > >> >> >> Initially, just read. Then read with access control. The
> > > > > > read/write
> > > > > > >> >> >> with access control.
> > > > > > >> >> >>
> > > > > > >> >> >
> > > > > > >> >> > Read/Write complexity will be more or less the same as I
> > > feel.
> > > > >  But
> > > > > > >> read
> > > > > > >> >> > write with access control is something we have to discuss
> > > > > > separately.
> > > > > > >> >> > Does sling maintaining access control directly with
> > > > jackrabbit's
> > > > > > >> >> > javax.jcr.security module ? Or any inhouse access control
> > > > layer ?
> > > > > > >> >> >
> > > > > > >> >> >
> > > > > > >> >> >
> > > > > > >> >> >>
> > > > > > >> >> >> >
> > > > > > >> >> >> > Appreciate any feedback and guidance on how to
> proceed.
> > > > > > >> >> >>
> > > > > > >> >> >> If you havent already you need to checkout the
> information
> > > at:
> > > > > > >> >> >> *
> > > http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > > > > > >> >> >> * http://community.apache.org/gsoc.html
> > > > > > >> >> >>
> > > > > > >> >> >> especially the timeline and dates.
> > > > > > >> >> >>
> > > > > > >> >> >> There is no guarantee that Apache will be a GSoC
> > > organisation
> > > > > > >> >> >> (although its highly likely), and there are currently
> 129
> > > > > project
> > > > > > >> >> >> proposals so there is no guarantee that you will get
> > > accepted
> > > > > as a
> > > > > > >> >> >> Student on this project, but the quality of your
> > submission
> > > > and
> > > > > > your
> > > > > > >> >> >> enthusiasm will go a long way to making that happen.
> > > > > > >> >> >>
> > > > > > >> >> >> Good luck and I look forward to seeing you on these
> lists
> > > over
> > > > > the
> > > > > > >> >> >> summer. If you do make it through, I and everyone in
> this
> > > > > > community
> > > > > > >> >> >> will try and make it fun and rewarding for you.
> > > > > > >> >> >>
> > > > > > >> >> >> Best Regards
> > > > > > >> >> >> Ian
> > > > > > >> >> >>
> > > > > > >> >> >>
> > > > > > >> >> >>
> > > > > > >> >> >> >
> > > > > > >> >> >> > [1] -
> https://issues.apache.org/jira/browse/SLING-2798
> > > > > > >> >> >> >
> > > > > > >> >> >> > --
> > > > > > >> >> >> > Thanks
> > > > > > >> >> >> > /Dishara
> > > > > > >> >> >>
> > > > > > >> >> >
> > > > > > >> >> >
> > > > > > >> >> >
> > > > > > >> >> > --
> > > > > > >> >> > Thanks
> > > > > > >> >> > /Dishara
> > > > > > >> >>
> > > > > > >> >
> > > > > > >> >
> > > > > > >> >
> > > > > > >> > --
> > > > > > >> > Thanks
> > > > > > >> > /Dishara
> > > > > > >>
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Thanks
> > > > > > > /Dishara
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Thanks
> > > > > > /Dishara
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Thanks
> > > > /Dishara
> > > >
> > >
> >
> >
> >
> > --
> > Thanks
> > /Dishara
> >
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
On 7 April 2013 14:07, Dishara Wijewardana <dd...@gmail.com> wrote:

> On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>
> > That sounds good.
> > If you havent already it will be important to become familiar with OSGi
> and
> > Sling itself.
> > Please dont do too much work before getting being accepted. I
> > cant guarantee that you will be accepted since there are lots of Apache
> > projects, lots of submissions and a limited number of places given to
> > Apache.
> >
> Yes I agree with you. There are loads of projects from Apache each year.
> But if the proposal is solid where it's apparently attainable within the
> timeline and if community willing to mentor the project with high priority,
> I think there is a very good chance of getting accepted. But still
> can't guarantee it 100%. I got what you meant ;-).
>


Good, we understand each other, and your analysis is correct.
Just incase it hasn't been obvious, I am very willing to mentor this
project, as are other members of the community for other projects.
Ian



>
> Thanks for the feedback.
>
>
>
> > Have a great weekend.
> > Ian
> >
> >
> >
> > On 7 April 2013 02:12, Dishara Wijewardana <dd...@gmail.com>
> > wrote:
> >
> > > Hi Ian
> > > Than you for the quick response. I have started localhost Cassendra and
> > > written some codes through hector API to create columns and etc. And
> > works
> > > fine. I am still doing some more test codings to get familiar more with
> > > Cassendra these days so that I can reuse those codes and write an
> > > appropriate CassendraResourceProviderUtil class .Meanwhile I will
> prepare
> > > the project proposal.  Please let me know if you want something
> more/else
> > > to be done before hand that would be useful to this project.
> > >
> > > On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> > >
> > > > Hi
> > > > Hector looks good.
> > > >
> > > > Sling wont ship a Cassandra instance, for this project it will uses a
> > > > Cassandra instance setup separately  Last time I spun up Cassandra it
> > for
> > > > dev purposes it was just as easy as installing MySQL or PostgreSQL,
> so
> > I
> > > > think that fine.
> > > >
> > > +1.
> > >
> > > >
> > > > If using Hector, I think it would be good to do everything in CQL and
> > > keep
> > > > it all very simple and transparent. Remember the aim of the project
> is
> > to
> > > > prove that the ResourceProvider API can support Cassandra as a
> > repository
> > > > store, and that API is complete and usable all the way through to the
> > > > latest security related APIs that have just been developed. This
> > project
> > > is
> > > > not an exercise in doing cool and complex things in Cassandra
> > > > with automated ORM mapping that binds the code forever to one
> Cassandra
> > > > API.
> > > >
> > > >
> > > Totally agree. So ideally in a users's perspective, when dealing with
> > sling
> > > layer, there should not be any difference between the resources in
> > >  /root/jackrabbit and /root/cassandra for example.
> > >
> > > Sound ok to you, or do you see problems ?
> > > >
> > >
> > > Yes, no problems at all. Quite fine with the suggestions.
> > >
> > > > Ian
> > > >
> > > >
> > > > On 6 April 2013 16:55, Dishara Wijewardana <dd...@gmail.com>
> > > > wrote:
> > > >
> > > > > Hi Ian,
> > > > >
> > > > > In Sling, are we going to ship native Cassandra instance with the
> > sling
> > > > > binary pack? ( is there already a native cassandra server starting
> at
> > > > sling
> > > > > server start up ?)
> > > > > I am willing to use hector API to deal with Cassandra, as in most
> of
> > > > >  occasions around . Please let me know if there is any concerns on
> > that
> > > > > aspect ?
> > > > >
> > > > >
> > > > > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > > > > ddwijewardana@gmail.com
> > > > > > wrote:
> > > > >
> > > > > > Hi Ian,
> > > > > >
> > > > > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk>
> wrote:
> > > > > >
> > > > > >> On 2 April 2013 07:55, Dishara Wijewardana <
> > ddwijewardana@gmail.com
> > > >
> > > > > >> wrote:
> > > > > >> > Hi Ian,
> > > > > >> > Thanks for the explanation. Really helped me to get several
> > stuff
> > > > > >> cleared.
> > > > > >> >
> > > > > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk>
> > wrote:
> > > > > >> >
> > > > > >> >> Hi Dishara,
> > > > > >> >>
> > > > > >> >> You should not think about implementing the JCR API classes
> > > > > >> >> (javax.jcr.*). You should think about implementing the
> Resource
> > > > > >> >> API[1]. When you need to perform something that the
> ResourceAPI
> > > > > doesnt
> > > > > >> >> support (say in a servlet), then you can use the
> > > > > >> >> Resource.adapTo(Class<?> clazz) method to adapt the resource
> > > into a
> > > > > >> >> class that supports that operation.
> > > > > >> >>
> > > > > >> >
> > > > > >> > Interesting.!! . If I got you correctly "adapTo" concept used
> to
> > > > > achieve
> > > > > >> > *kind of* dynamic multiple inheritance rather than extending a
> > > heavy
> > > > > >> > abstract class. if that is so, this is a wonderful idea and I
> > > really
> > > > > >> like
> > > > > >> > the concept.
> > > > > >>
> > > > > >> Calling it inheritance might be going too far as the class isn't
> > > > > >> necessarily the same, but in essence, yes.
> > > > > >>
> > > > > >> >
> > > > > >> >
> > > > > >> >>
> > > > > >> >> eg:
> > > > > >> >> The properties of the resource are exposed via
> ResourceMetadata
> > > > [2],
> > > > > >> >> but lets say you want to find the underlying Cassandra object
> > to
> > > > copy
> > > > > >> >> it and create a child.
> > > > > >> >>
> > > > > >> >> So: CassandraResource implements Resource, which is what is
> > > > returned
> > > > > >> >> when the CassandraResourceProvider resolves a Resource. A
> > client
> > > > > >> >> should not bind to CassandraResource or mention it, since its
> > > > almost
> > > > > >> >> certainly an implementation and not an API. However, the
> > > Cassandra
> > > > > >> >> bundle you have written also implements CassandraContent
> which
> > > has
> > > > > >> >> CassandraContent.copy(String copyLocation) and
> > > > > >> >> CassandraContent.createChild(String childName).
> > > > > >> >
> > > > > >> > To get to this you would do
> > > > > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > > > > >> >> BTW, CassandraContent.class is an API exported by your
> bundle.
> > > > > >> >>
> > > > > >> >
> > > > > >> > If I got you correctly,
> > > > > >> >  after CassandraResource.adaptTo(CassandraContent.class) I
> > should
> > > be
> > > > > >> able
> > > > > >> > to call
> > > > > >> > CassandraResource.copy(String copyLocation)
> > > > > >> > and CassandraResource.createChild(String childName).
> > > > > >> >
> > > > > >> > Then I will have to write an "Adaptable" class to
> > > > > >> > facilitate CassandraResource to deal with its corresponding
> > > > cassandra
> > > > > >> > nodes.
> > > > > >> > In that sense I feel the best way to approach to this project
> > when
> > > > > >> > implementing is an bottom-up approach. We start from the
> > > "Adaptable"
> > > > > >> class
> > > > > >> > (given the fact that it should be expanded during
> > implementation)
> > > > and
> > > > > >> then
> > > > > >> > goes to the sling Resource wrapper layer which is
> > > > > CassandraResourceImpl.
> > > > > >>
> > > > > >>
> > > > > >> Resource extends Adaptable, so you dont get much choice there,
> > just
> > > > > >> implement the resource.
> > > > > >>
> > > > > >> >
> > > > > >> > What do you think ? And may I know the expected scope of this
> > > > project
> > > > > by
> > > > > >> > the community (just a potential one, during the implementation
> > we
> > > > can
> > > > > >> > expand it as time permits) .i.e
> > > > > >> > READ,
> > > > > >> > READ with access control
> > > > > >> > READ/WRITE with access control and etc.
> > > > > >> >
> > > > > >>
> > > > > >> Yes, thats the idea.
> > > > > >> It would be nicer to have 4 iterations to fit the GSoC timeline
> > and
> > > do
> > > > > >> 2 before half time, and 2 after. Perhaps the first half can also
> > > > > >
> > > > > > include spinning up Cassandra, getting client APIs working and
> > > getting
> > > > > >> fully upto speed with that area of Sling.
> > > > > >>
> > > > > >
> > > > > > +1 . Will make in to four iteration (generally 2 before midterm
> > and 2
> > > > > > after mid term) and will include getting client API working for
> > > > Cassandra
> > > > > > and related sling stuff as a part of first two iterations (which
> > > means
> > > > > > before mid term ). And to meet deadlines, should target more to
> be
> > > > > > completed before mid term compared to the work scheduled after
> the
> > > mid
> > > > > > term. Will make it count in project proposal time line schedule.
> > And
> > > > > thank
> > > > > > you for the aforementioned feedback so that I can provide a solid
> > > > > proposal
> > > > > > in this year as well.
> > > > > > Will post as soon as when I got update. Meanwhile I will build
> > sling
> > > > and
> > > > > > getting familiar with the code base with the help of the sling
> > > > > > documentation.
> > > > > >
> > > > > >
> > > > > >>
> > > > > >>
> > > > > >> Ian
> > > > > >> >
> > > > > >> >> I hope that gives you an idea of how a
> > CassandraResourceProvider
> > > > and
> > > > > >> >> associated implementation should work. If you havent already,
> > and
> > > > are
> > > > > >> >> still interested you should read up on how Sling and OSGi
> > works.
> > > > > >> >> Trying the "Sling in 15 minutes"[3] is a good place to start.
> > And
> > > > > then
> > > > > >> >> reading everything you can about Declarative Services in
> OSGi.
> > > The
> > > > 2
> > > > > >> >> key things you are going to need to understand is how OSGi
> > > bundles
> > > > > >> >> import and export packages and then how Declarative, declare
> > > > services
> > > > > >> >> that they depend on and declare services they implement, [4]
> > is a
> > > > > >> >> bunch of links.
> > > > > >> >>
> > > > > >> >
> > > > > >> > Yes, I will go through the mentioned links. Specially like [3]
> > > > which I
> > > > > >> have
> > > > > >> > not yet gone through. I also have some experience in using
> OSGi
> > > > > >> importing
> > > > > >> > exporting packages and using maven scr plugin in classes with
> > > "bind"
> > > > > >> > "unbind" attributes to register and unregister OSGi services
> and
> > > > etc.
> > > > > >> >
> > > > > >> >
> > > > > >> >> HTH
> > > > > >> >> Ian
> > > > > >> >>
> > > > > >> >>
> > > > > >> >> 1
> > > > > >> >>
> > > > > >>
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > > > > >> >> 2
> > > > > >> >>
> > > > > >>
> > > > >
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > > > > >> >> 3
> > http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > > > > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter
> > 112)
> > > > > >> >>
> > > > > >> >>
> > > > > >>
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > > > > >> >>
> > > > > >> >>
> > > > > >>
> > > > >
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > > > > >> >>
> > > > > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> > > > ddwijewardana@gmail.com
> > > > > >
> > > > > >> >> wrote:
> > > > > >> >> > Hi Ian,
> > > > > >> >> > Thank you very much for the explanation. Before replying to
> > > this
> > > > > >> mail, I
> > > > > >> >> > revisited the facts you mentioned and try to comeup with a
> > end
> > > to
> > > > > >> end big
> > > > > >> >> > picture and what are the challenges that has to face when
> > > > > >> implementing
> > > > > >> >> this
> > > > > >> >> > project.
> > > > > >> >> >
> > > > > >> >> > Read/write with Cassandra data seems is pretty straight
> > forward
> > > > > with
> > > > > >> few
> > > > > >> >> > lines of code using a client API. But the tricky part is to
> > > make
> > > > a
> > > > > >> clean
> > > > > >> >> > bridge between JCR wrapped sling resource API vs Cassendra
> > > column
> > > > > >> family
> > > > > >> >> > data storage. So I took some time and went through the JCR
> > spec
> > > > and
> > > > > >> try
> > > > > >> >> to
> > > > > >> >> > understand how it deals with resources (I assumed sling
> > > resource
> > > > is
> > > > > >> >> > directly based on JCR node concept). And got a good
> > > understanding
> > > > > of
> > > > > >> how
> > > > > >> >> > JCR thinks on resource and how they deal with it.
> > > > > >> >> >
> > > > > >> >> > Because we need to think of the mapping between the sling
> > > wrapper
> > > > > >> >> interface
> > > > > >> >> > for resources which is
> >  org.apache.sling.api.resource.Resource
> > > > > >> (which is
> > > > > >> >> a
> > > > > >> >> > JCR Node as I understand) and the Cassendra data layer. For
> > > > > instance
> > > > > >> >> > Cassandra provider will return a sling resource and it
> should
> > > be
> > > > > >> enrich
> > > > > >> >> > with the properties/attributes which helps the sling
> resource
> > > to
> > > > > >> keep its
> > > > > >> >> > state like resource meta data, resource type (which should
> be
> > > the
> > > > > JCR
> > > > > >> >> node
> > > > > >> >> > type),  and etc.
> > > > > >> >> >
> > > > > >> >> > And the provider should only return a resource which only
> has
> > > > such
> > > > > >> very
> > > > > >> >> > basic meta data. For instance, like
> > > > > >> >>  org.apache.sling.api.resource.Resource
> > > > > >> >> > #getChild() #getChildren() we should not keep those in
> > memory.
> > > We
> > > > > >> should
> > > > > >> >> > return them on  the fly from Cassandra.
> > > > > >> >> >
> > > > > >> >> > I think we should write a separate Sling Cassandra Adapter
> > > layer
> > > > > and
> > > > > >> >> > provider should talk to Cassandra through Cassandra
> Adapter.
> > I
> > > > hope
> > > > > >> this
> > > > > >> >> > will make it more cleaner.
> > > > > >> >> > Appreciate your valuable feedback. So that based on
> feedback
> > I
> > > > can
> > > > > >> >> provide
> > > > > >> >> > a patch which will reflect the basic architecture and keep
> on
> > > > > >> patching
> > > > > >> >> with
> > > > > >> >> > future additions.
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ieb@tfd.co.uk
> >
> > > > wrote:
> > > > > >> >> >
> > > > > >> >> >> Hi and welcome,
> > > > > >> >> >> Some comments inline below.
> > > > > >> >> >>
> > > > > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > > > > >> ddwijewardana@gmail.com>
> > > > > >> >> >> wrote:
> > > > > >> >> >> > Hi all,
> > > > > >> >> >> > I am Dishara Wijewardana, a student who is willing to
> take
> > > > part
> > > > > in
> > > > > >> >> this
> > > > > >> >> >> > GSoC 2013 .
> > > > > >> >> >> >
> > > > > >> >> >> > I have successfully completed GSoC 2012 in Apache
> Velocity
> > > and
> > > > > >> there I
> > > > > >> >> >> have
> > > > > >> >> >> > implemented JSR 223 support for Velocity. I found myself
> > > > really
> > > > > >> >> >> interested
> > > > > >> >> >> > in this project since it covers very useful and
> > interesting
> > > > > >> topics. So
> > > > > >> >> >> > thought of getting in to this project idea and provide a
> > > good
> > > > > >> proposal
> > > > > >> >> >> for
> > > > > >> >> >> > this project.
> > > > > >> >> >> >
> > > > > >> >> >> > So I did some research around sling which might be
> useful
> > > for
> > > > me
> > > > > >> to
> > > > > >> >> get
> > > > > >> >> >> in
> > > > > >> >> >> > to this project. I like sling as it sticks to community
> > > > > standards
> > > > > >> >> where
> > > > > >> >> >> it
> > > > > >> >> >> > uses a standard JCR2 repository to store resources which
> > is
> > > a
> > > > > >> really
> > > > > >> >> good
> > > > > >> >> >> > thing to have.
> > > > > >> >> >> >
> > > > > >> >> >> > I went through the information provided in the JIRA[1]
> and
> > > > > >> according
> > > > > >> >> to
> > > > > >> >> >> > that at the end of this project what is expected to have
> > > > > >> implemented
> > > > > >> >> is a
> > > > > >> >> >> > ResourceProvider for Sling which tunnels with a
> Cassandra
> > > > > >> (standalone
> > > > > >> >> >> > one/cluster).
> > > > > >> >> >>
> > > > > >> >> >> yes, correct.
> > > > > >> >> >>
> > > > > >> >> >> >
> > > > > >> >> >> > As far as I got to know, sling directly calls to Apache
> > > > > JackRabbit
> > > > > >> >> APIs
> > > > > >> >> >> > (JCR APIs) to store resources. So I found a bit
> > complicated
> > > > this
> > > > > >> >> project
> > > > > >> >> >> > idea in that sense. Because if we are to implement a
> > > Cassandra
> > > > > >> backend
> > > > > >> >> >> for
> > > > > >> >> >> > Sling (as per this proposal), and Sling storage is on
> top
> > of
> > > > > >> >> JackRabbit,
> > > > > >> >> >> > ideally what should happen is to make JackRabbit capable
> > of
> > > > > using
> > > > > >> >> >> Cassandra
> > > > > >> >> >> > as its resource persistent layer, and configure it
> through
> > > > > Sling ?
> > > > > >> >> Please
> > > > > >> >> >> > correct me If I am wrong.
> > > > > >> >> >>
> > > > > >> >> >> Your right.
> > > > > >> >> >> The idea is this, Sling resolves paths into Resources
> > > > > >> >> >> ie /content/mywebsite/page1.html is resolved to a Resource
> > > with
> > > > a
> > > > > >> path
> > > > > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR
> > > > repository
> > > > > >> >> >> takes ownership of everything under /, so all Resources
> are
> > > JCR
> > > > > >> >> >> Resources.
> > > > > >> >> >>
> > > > > >> >> >> However, with a ResourceProvider its possible to "mount" a
> > > > > >> alternative
> > > > > >> >> >> source of Resources at any location in the tree. eg:
> > > > > >> >> >> If I create a ResourceProvider and configure it to respond
> > to
> > > > all
> > > > > >> >> >> resource resolution operations at
> > > > > >> >> >> /content/cassandra
> > > > > >> >> >>
> > > > > >> >> >> then
> > > > > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > > > > >> >> >>
> > > > > >> >> >> will generate a Cassandra Resource instead of a JCR
> > Resource.
> > > > > >> >> >>
> > > > > >> >> >> Initially the aim is to write a ResourceProvider that will
> > > allow
> > > > > >> >> >> Readonly access to a Cassandra cluster (cluster of one is
> ok
> > > for
> > > > > >> >> >> testing), but ultimately we would like to be able to write
> > to
> > > > that
> > > > > >> >> >> cluster as well.
> > > > > >> >> >>
> > > > > >> >> >> Why Do it ?
> > > > > >> >> >> Every storage platform has different characteristics, some
> > are
> > > > > ideal
> > > > > >> >> >> for extreem volume writes of throw away data, some are
> ideal
> > > for
> > > > > >> >> >> extreem volume reads of precious audited transactrional
> > data.
> > > > > Being
> > > > > >> >> >> able to "mount" multiple stores in Sling enables Sling to
> > > > > integrate
> > > > > >> >> >> data from all types of sources using best of breed address
> > > each
> > > > > use
> > > > > >> >> >> case. (Thats the theory, anyway :))
> > > > > >> >> >>
> > > > > >> >> >
> > > > > >> >> > +1 and this is a wonderful architecture interms of
> > > extensibility.
> > > > > >> >> Something
> > > > > >> >> > even a repository vendor like Jackrabbit also would want to
> > > > follow.
> > > > > >> >> Because
> > > > > >> >> > they only have a JCR interfaced tree.
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> >>
> > > > > >> >> >> I hope that makes things clearer.
> > > > > >> >> >>
> > > > > >> >> >> 1 http://sling.apache.org/site/resources.html
> > > > > >> >> >>
> > > > > >> >> >> >
> > > > > >> >> >> > But if it is only to READ resources, this project is
> > > > relatively
> > > > > >> less
> > > > > >> >> >> > complex (not quite sure though ;-) ) since what is
> > required
> > > is
> > > > > to
> > > > > >> >> have a
> > > > > >> >> >> > JCR/Sling Resource compatible wrapper layer interface on
> > top
> > > > of
> > > > > >> >> Cassendra
> > > > > >> >> >> > to read cassandra data.
> > > > > >> >> >>
> > > > > >> >> >> Initially, just read. Then read with access control. The
> > > > > read/write
> > > > > >> >> >> with access control.
> > > > > >> >> >>
> > > > > >> >> >
> > > > > >> >> > Read/Write complexity will be more or less the same as I
> > feel.
> > > >  But
> > > > > >> read
> > > > > >> >> > write with access control is something we have to discuss
> > > > > separately.
> > > > > >> >> > Does sling maintaining access control directly with
> > > jackrabbit's
> > > > > >> >> > javax.jcr.security module ? Or any inhouse access control
> > > layer ?
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> >>
> > > > > >> >> >> >
> > > > > >> >> >> > Appreciate any feedback and guidance on how to proceed.
> > > > > >> >> >>
> > > > > >> >> >> If you havent already you need to checkout the information
> > at:
> > > > > >> >> >> *
> > http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > > > > >> >> >> * http://community.apache.org/gsoc.html
> > > > > >> >> >>
> > > > > >> >> >> especially the timeline and dates.
> > > > > >> >> >>
> > > > > >> >> >> There is no guarantee that Apache will be a GSoC
> > organisation
> > > > > >> >> >> (although its highly likely), and there are currently 129
> > > > project
> > > > > >> >> >> proposals so there is no guarantee that you will get
> > accepted
> > > > as a
> > > > > >> >> >> Student on this project, but the quality of your
> submission
> > > and
> > > > > your
> > > > > >> >> >> enthusiasm will go a long way to making that happen.
> > > > > >> >> >>
> > > > > >> >> >> Good luck and I look forward to seeing you on these lists
> > over
> > > > the
> > > > > >> >> >> summer. If you do make it through, I and everyone in this
> > > > > community
> > > > > >> >> >> will try and make it fun and rewarding for you.
> > > > > >> >> >>
> > > > > >> >> >> Best Regards
> > > > > >> >> >> Ian
> > > > > >> >> >>
> > > > > >> >> >>
> > > > > >> >> >>
> > > > > >> >> >> >
> > > > > >> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> > > > > >> >> >> >
> > > > > >> >> >> > --
> > > > > >> >> >> > Thanks
> > > > > >> >> >> > /Dishara
> > > > > >> >> >>
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> > --
> > > > > >> >> > Thanks
> > > > > >> >> > /Dishara
> > > > > >> >>
> > > > > >> >
> > > > > >> >
> > > > > >> >
> > > > > >> > --
> > > > > >> > Thanks
> > > > > >> > /Dishara
> > > > > >>
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Thanks
> > > > > > /Dishara
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Thanks
> > > > > /Dishara
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Thanks
> > > /Dishara
> > >
> >
>
>
>
> --
> Thanks
> /Dishara
>

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
On Sun, Apr 7, 2013 at 3:00 AM, Ian Boston <ie...@tfd.co.uk> wrote:

> That sounds good.
> If you havent already it will be important to become familiar with OSGi and
> Sling itself.
> Please dont do too much work before getting being accepted. I
> cant guarantee that you will be accepted since there are lots of Apache
> projects, lots of submissions and a limited number of places given to
> Apache.
>
Yes I agree with you. There are loads of projects from Apache each year.
But if the proposal is solid where it's apparently attainable within the
timeline and if community willing to mentor the project with high priority,
I think there is a very good chance of getting accepted. But still
can't guarantee it 100%. I got what you meant ;-).

Thanks for the feedback.



> Have a great weekend.
> Ian
>
>
>
> On 7 April 2013 02:12, Dishara Wijewardana <dd...@gmail.com>
> wrote:
>
> > Hi Ian
> > Than you for the quick response. I have started localhost Cassendra and
> > written some codes through hector API to create columns and etc. And
> works
> > fine. I am still doing some more test codings to get familiar more with
> > Cassendra these days so that I can reuse those codes and write an
> > appropriate CassendraResourceProviderUtil class .Meanwhile I will prepare
> > the project proposal.  Please let me know if you want something more/else
> > to be done before hand that would be useful to this project.
> >
> > On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> > > Hi
> > > Hector looks good.
> > >
> > > Sling wont ship a Cassandra instance, for this project it will uses a
> > > Cassandra instance setup separately  Last time I spun up Cassandra it
> for
> > > dev purposes it was just as easy as installing MySQL or PostgreSQL, so
> I
> > > think that fine.
> > >
> > +1.
> >
> > >
> > > If using Hector, I think it would be good to do everything in CQL and
> > keep
> > > it all very simple and transparent. Remember the aim of the project is
> to
> > > prove that the ResourceProvider API can support Cassandra as a
> repository
> > > store, and that API is complete and usable all the way through to the
> > > latest security related APIs that have just been developed. This
> project
> > is
> > > not an exercise in doing cool and complex things in Cassandra
> > > with automated ORM mapping that binds the code forever to one Cassandra
> > > API.
> > >
> > >
> > Totally agree. So ideally in a users's perspective, when dealing with
> sling
> > layer, there should not be any difference between the resources in
> >  /root/jackrabbit and /root/cassandra for example.
> >
> > Sound ok to you, or do you see problems ?
> > >
> >
> > Yes, no problems at all. Quite fine with the suggestions.
> >
> > > Ian
> > >
> > >
> > > On 6 April 2013 16:55, Dishara Wijewardana <dd...@gmail.com>
> > > wrote:
> > >
> > > > Hi Ian,
> > > >
> > > > In Sling, are we going to ship native Cassandra instance with the
> sling
> > > > binary pack? ( is there already a native cassandra server starting at
> > > sling
> > > > server start up ?)
> > > > I am willing to use hector API to deal with Cassandra, as in most of
> > > >  occasions around . Please let me know if there is any concerns on
> that
> > > > aspect ?
> > > >
> > > >
> > > > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > > > ddwijewardana@gmail.com
> > > > > wrote:
> > > >
> > > > > Hi Ian,
> > > > >
> > > > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > > >
> > > > >> On 2 April 2013 07:55, Dishara Wijewardana <
> ddwijewardana@gmail.com
> > >
> > > > >> wrote:
> > > > >> > Hi Ian,
> > > > >> > Thanks for the explanation. Really helped me to get several
> stuff
> > > > >> cleared.
> > > > >> >
> > > > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk>
> wrote:
> > > > >> >
> > > > >> >> Hi Dishara,
> > > > >> >>
> > > > >> >> You should not think about implementing the JCR API classes
> > > > >> >> (javax.jcr.*). You should think about implementing the Resource
> > > > >> >> API[1]. When you need to perform something that the ResourceAPI
> > > > doesnt
> > > > >> >> support (say in a servlet), then you can use the
> > > > >> >> Resource.adapTo(Class<?> clazz) method to adapt the resource
> > into a
> > > > >> >> class that supports that operation.
> > > > >> >>
> > > > >> >
> > > > >> > Interesting.!! . If I got you correctly "adapTo" concept used to
> > > > achieve
> > > > >> > *kind of* dynamic multiple inheritance rather than extending a
> > heavy
> > > > >> > abstract class. if that is so, this is a wonderful idea and I
> > really
> > > > >> like
> > > > >> > the concept.
> > > > >>
> > > > >> Calling it inheritance might be going too far as the class isn't
> > > > >> necessarily the same, but in essence, yes.
> > > > >>
> > > > >> >
> > > > >> >
> > > > >> >>
> > > > >> >> eg:
> > > > >> >> The properties of the resource are exposed via ResourceMetadata
> > > [2],
> > > > >> >> but lets say you want to find the underlying Cassandra object
> to
> > > copy
> > > > >> >> it and create a child.
> > > > >> >>
> > > > >> >> So: CassandraResource implements Resource, which is what is
> > > returned
> > > > >> >> when the CassandraResourceProvider resolves a Resource. A
> client
> > > > >> >> should not bind to CassandraResource or mention it, since its
> > > almost
> > > > >> >> certainly an implementation and not an API. However, the
> > Cassandra
> > > > >> >> bundle you have written also implements CassandraContent which
> > has
> > > > >> >> CassandraContent.copy(String copyLocation) and
> > > > >> >> CassandraContent.createChild(String childName).
> > > > >> >
> > > > >> > To get to this you would do
> > > > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > > > >> >> BTW, CassandraContent.class is an API exported by your bundle.
> > > > >> >>
> > > > >> >
> > > > >> > If I got you correctly,
> > > > >> >  after CassandraResource.adaptTo(CassandraContent.class) I
> should
> > be
> > > > >> able
> > > > >> > to call
> > > > >> > CassandraResource.copy(String copyLocation)
> > > > >> > and CassandraResource.createChild(String childName).
> > > > >> >
> > > > >> > Then I will have to write an "Adaptable" class to
> > > > >> > facilitate CassandraResource to deal with its corresponding
> > > cassandra
> > > > >> > nodes.
> > > > >> > In that sense I feel the best way to approach to this project
> when
> > > > >> > implementing is an bottom-up approach. We start from the
> > "Adaptable"
> > > > >> class
> > > > >> > (given the fact that it should be expanded during
> implementation)
> > > and
> > > > >> then
> > > > >> > goes to the sling Resource wrapper layer which is
> > > > CassandraResourceImpl.
> > > > >>
> > > > >>
> > > > >> Resource extends Adaptable, so you dont get much choice there,
> just
> > > > >> implement the resource.
> > > > >>
> > > > >> >
> > > > >> > What do you think ? And may I know the expected scope of this
> > > project
> > > > by
> > > > >> > the community (just a potential one, during the implementation
> we
> > > can
> > > > >> > expand it as time permits) .i.e
> > > > >> > READ,
> > > > >> > READ with access control
> > > > >> > READ/WRITE with access control and etc.
> > > > >> >
> > > > >>
> > > > >> Yes, thats the idea.
> > > > >> It would be nicer to have 4 iterations to fit the GSoC timeline
> and
> > do
> > > > >> 2 before half time, and 2 after. Perhaps the first half can also
> > > > >
> > > > > include spinning up Cassandra, getting client APIs working and
> > getting
> > > > >> fully upto speed with that area of Sling.
> > > > >>
> > > > >
> > > > > +1 . Will make in to four iteration (generally 2 before midterm
> and 2
> > > > > after mid term) and will include getting client API working for
> > > Cassandra
> > > > > and related sling stuff as a part of first two iterations (which
> > means
> > > > > before mid term ). And to meet deadlines, should target more to be
> > > > > completed before mid term compared to the work scheduled after the
> > mid
> > > > > term. Will make it count in project proposal time line schedule.
> And
> > > > thank
> > > > > you for the aforementioned feedback so that I can provide a solid
> > > > proposal
> > > > > in this year as well.
> > > > > Will post as soon as when I got update. Meanwhile I will build
> sling
> > > and
> > > > > getting familiar with the code base with the help of the sling
> > > > > documentation.
> > > > >
> > > > >
> > > > >>
> > > > >>
> > > > >> Ian
> > > > >> >
> > > > >> >> I hope that gives you an idea of how a
> CassandraResourceProvider
> > > and
> > > > >> >> associated implementation should work. If you havent already,
> and
> > > are
> > > > >> >> still interested you should read up on how Sling and OSGi
> works.
> > > > >> >> Trying the "Sling in 15 minutes"[3] is a good place to start.
> And
> > > > then
> > > > >> >> reading everything you can about Declarative Services in OSGi.
> > The
> > > 2
> > > > >> >> key things you are going to need to understand is how OSGi
> > bundles
> > > > >> >> import and export packages and then how Declarative, declare
> > > services
> > > > >> >> that they depend on and declare services they implement, [4]
> is a
> > > > >> >> bunch of links.
> > > > >> >>
> > > > >> >
> > > > >> > Yes, I will go through the mentioned links. Specially like [3]
> > > which I
> > > > >> have
> > > > >> > not yet gone through. I also have some experience in using OSGi
> > > > >> importing
> > > > >> > exporting packages and using maven scr plugin in classes with
> > "bind"
> > > > >> > "unbind" attributes to register and unregister OSGi services and
> > > etc.
> > > > >> >
> > > > >> >
> > > > >> >> HTH
> > > > >> >> Ian
> > > > >> >>
> > > > >> >>
> > > > >> >> 1
> > > > >> >>
> > > > >>
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > > > >> >> 2
> > > > >> >>
> > > > >>
> > > >
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > > > >> >> 3
> http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > > > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter
> 112)
> > > > >> >>
> > > > >> >>
> > > > >>
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > > > >> >>
> > > > >> >>
> > > > >>
> > > >
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > > > >> >>
> > > > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> > > ddwijewardana@gmail.com
> > > > >
> > > > >> >> wrote:
> > > > >> >> > Hi Ian,
> > > > >> >> > Thank you very much for the explanation. Before replying to
> > this
> > > > >> mail, I
> > > > >> >> > revisited the facts you mentioned and try to comeup with a
> end
> > to
> > > > >> end big
> > > > >> >> > picture and what are the challenges that has to face when
> > > > >> implementing
> > > > >> >> this
> > > > >> >> > project.
> > > > >> >> >
> > > > >> >> > Read/write with Cassandra data seems is pretty straight
> forward
> > > > with
> > > > >> few
> > > > >> >> > lines of code using a client API. But the tricky part is to
> > make
> > > a
> > > > >> clean
> > > > >> >> > bridge between JCR wrapped sling resource API vs Cassendra
> > column
> > > > >> family
> > > > >> >> > data storage. So I took some time and went through the JCR
> spec
> > > and
> > > > >> try
> > > > >> >> to
> > > > >> >> > understand how it deals with resources (I assumed sling
> > resource
> > > is
> > > > >> >> > directly based on JCR node concept). And got a good
> > understanding
> > > > of
> > > > >> how
> > > > >> >> > JCR thinks on resource and how they deal with it.
> > > > >> >> >
> > > > >> >> > Because we need to think of the mapping between the sling
> > wrapper
> > > > >> >> interface
> > > > >> >> > for resources which is
>  org.apache.sling.api.resource.Resource
> > > > >> (which is
> > > > >> >> a
> > > > >> >> > JCR Node as I understand) and the Cassendra data layer. For
> > > > instance
> > > > >> >> > Cassandra provider will return a sling resource and it should
> > be
> > > > >> enrich
> > > > >> >> > with the properties/attributes which helps the sling resource
> > to
> > > > >> keep its
> > > > >> >> > state like resource meta data, resource type (which should be
> > the
> > > > JCR
> > > > >> >> node
> > > > >> >> > type),  and etc.
> > > > >> >> >
> > > > >> >> > And the provider should only return a resource which only has
> > > such
> > > > >> very
> > > > >> >> > basic meta data. For instance, like
> > > > >> >>  org.apache.sling.api.resource.Resource
> > > > >> >> > #getChild() #getChildren() we should not keep those in
> memory.
> > We
> > > > >> should
> > > > >> >> > return them on  the fly from Cassandra.
> > > > >> >> >
> > > > >> >> > I think we should write a separate Sling Cassandra Adapter
> > layer
> > > > and
> > > > >> >> > provider should talk to Cassandra through Cassandra Adapter.
> I
> > > hope
> > > > >> this
> > > > >> >> > will make it more cleaner.
> > > > >> >> > Appreciate your valuable feedback. So that based on feedback
> I
> > > can
> > > > >> >> provide
> > > > >> >> > a patch which will reflect the basic architecture and keep on
> > > > >> patching
> > > > >> >> with
> > > > >> >> > future additions.
> > > > >> >> >
> > > > >> >> >
> > > > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk>
> > > wrote:
> > > > >> >> >
> > > > >> >> >> Hi and welcome,
> > > > >> >> >> Some comments inline below.
> > > > >> >> >>
> > > > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > > > >> ddwijewardana@gmail.com>
> > > > >> >> >> wrote:
> > > > >> >> >> > Hi all,
> > > > >> >> >> > I am Dishara Wijewardana, a student who is willing to take
> > > part
> > > > in
> > > > >> >> this
> > > > >> >> >> > GSoC 2013 .
> > > > >> >> >> >
> > > > >> >> >> > I have successfully completed GSoC 2012 in Apache Velocity
> > and
> > > > >> there I
> > > > >> >> >> have
> > > > >> >> >> > implemented JSR 223 support for Velocity. I found myself
> > > really
> > > > >> >> >> interested
> > > > >> >> >> > in this project since it covers very useful and
> interesting
> > > > >> topics. So
> > > > >> >> >> > thought of getting in to this project idea and provide a
> > good
> > > > >> proposal
> > > > >> >> >> for
> > > > >> >> >> > this project.
> > > > >> >> >> >
> > > > >> >> >> > So I did some research around sling which might be useful
> > for
> > > me
> > > > >> to
> > > > >> >> get
> > > > >> >> >> in
> > > > >> >> >> > to this project. I like sling as it sticks to community
> > > > standards
> > > > >> >> where
> > > > >> >> >> it
> > > > >> >> >> > uses a standard JCR2 repository to store resources which
> is
> > a
> > > > >> really
> > > > >> >> good
> > > > >> >> >> > thing to have.
> > > > >> >> >> >
> > > > >> >> >> > I went through the information provided in the JIRA[1] and
> > > > >> according
> > > > >> >> to
> > > > >> >> >> > that at the end of this project what is expected to have
> > > > >> implemented
> > > > >> >> is a
> > > > >> >> >> > ResourceProvider for Sling which tunnels with a Cassandra
> > > > >> (standalone
> > > > >> >> >> > one/cluster).
> > > > >> >> >>
> > > > >> >> >> yes, correct.
> > > > >> >> >>
> > > > >> >> >> >
> > > > >> >> >> > As far as I got to know, sling directly calls to Apache
> > > > JackRabbit
> > > > >> >> APIs
> > > > >> >> >> > (JCR APIs) to store resources. So I found a bit
> complicated
> > > this
> > > > >> >> project
> > > > >> >> >> > idea in that sense. Because if we are to implement a
> > Cassandra
> > > > >> backend
> > > > >> >> >> for
> > > > >> >> >> > Sling (as per this proposal), and Sling storage is on top
> of
> > > > >> >> JackRabbit,
> > > > >> >> >> > ideally what should happen is to make JackRabbit capable
> of
> > > > using
> > > > >> >> >> Cassandra
> > > > >> >> >> > as its resource persistent layer, and configure it through
> > > > Sling ?
> > > > >> >> Please
> > > > >> >> >> > correct me If I am wrong.
> > > > >> >> >>
> > > > >> >> >> Your right.
> > > > >> >> >> The idea is this, Sling resolves paths into Resources
> > > > >> >> >> ie /content/mywebsite/page1.html is resolved to a Resource
> > with
> > > a
> > > > >> path
> > > > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR
> > > repository
> > > > >> >> >> takes ownership of everything under /, so all Resources are
> > JCR
> > > > >> >> >> Resources.
> > > > >> >> >>
> > > > >> >> >> However, with a ResourceProvider its possible to "mount" a
> > > > >> alternative
> > > > >> >> >> source of Resources at any location in the tree. eg:
> > > > >> >> >> If I create a ResourceProvider and configure it to respond
> to
> > > all
> > > > >> >> >> resource resolution operations at
> > > > >> >> >> /content/cassandra
> > > > >> >> >>
> > > > >> >> >> then
> > > > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > > > >> >> >>
> > > > >> >> >> will generate a Cassandra Resource instead of a JCR
> Resource.
> > > > >> >> >>
> > > > >> >> >> Initially the aim is to write a ResourceProvider that will
> > allow
> > > > >> >> >> Readonly access to a Cassandra cluster (cluster of one is ok
> > for
> > > > >> >> >> testing), but ultimately we would like to be able to write
> to
> > > that
> > > > >> >> >> cluster as well.
> > > > >> >> >>
> > > > >> >> >> Why Do it ?
> > > > >> >> >> Every storage platform has different characteristics, some
> are
> > > > ideal
> > > > >> >> >> for extreem volume writes of throw away data, some are ideal
> > for
> > > > >> >> >> extreem volume reads of precious audited transactrional
> data.
> > > > Being
> > > > >> >> >> able to "mount" multiple stores in Sling enables Sling to
> > > > integrate
> > > > >> >> >> data from all types of sources using best of breed address
> > each
> > > > use
> > > > >> >> >> case. (Thats the theory, anyway :))
> > > > >> >> >>
> > > > >> >> >
> > > > >> >> > +1 and this is a wonderful architecture interms of
> > extensibility.
> > > > >> >> Something
> > > > >> >> > even a repository vendor like Jackrabbit also would want to
> > > follow.
> > > > >> >> Because
> > > > >> >> > they only have a JCR interfaced tree.
> > > > >> >> >
> > > > >> >> >
> > > > >> >> >>
> > > > >> >> >> I hope that makes things clearer.
> > > > >> >> >>
> > > > >> >> >> 1 http://sling.apache.org/site/resources.html
> > > > >> >> >>
> > > > >> >> >> >
> > > > >> >> >> > But if it is only to READ resources, this project is
> > > relatively
> > > > >> less
> > > > >> >> >> > complex (not quite sure though ;-) ) since what is
> required
> > is
> > > > to
> > > > >> >> have a
> > > > >> >> >> > JCR/Sling Resource compatible wrapper layer interface on
> top
> > > of
> > > > >> >> Cassendra
> > > > >> >> >> > to read cassandra data.
> > > > >> >> >>
> > > > >> >> >> Initially, just read. Then read with access control. The
> > > > read/write
> > > > >> >> >> with access control.
> > > > >> >> >>
> > > > >> >> >
> > > > >> >> > Read/Write complexity will be more or less the same as I
> feel.
> > >  But
> > > > >> read
> > > > >> >> > write with access control is something we have to discuss
> > > > separately.
> > > > >> >> > Does sling maintaining access control directly with
> > jackrabbit's
> > > > >> >> > javax.jcr.security module ? Or any inhouse access control
> > layer ?
> > > > >> >> >
> > > > >> >> >
> > > > >> >> >
> > > > >> >> >>
> > > > >> >> >> >
> > > > >> >> >> > Appreciate any feedback and guidance on how to proceed.
> > > > >> >> >>
> > > > >> >> >> If you havent already you need to checkout the information
> at:
> > > > >> >> >> *
> http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > > > >> >> >> * http://community.apache.org/gsoc.html
> > > > >> >> >>
> > > > >> >> >> especially the timeline and dates.
> > > > >> >> >>
> > > > >> >> >> There is no guarantee that Apache will be a GSoC
> organisation
> > > > >> >> >> (although its highly likely), and there are currently 129
> > > project
> > > > >> >> >> proposals so there is no guarantee that you will get
> accepted
> > > as a
> > > > >> >> >> Student on this project, but the quality of your submission
> > and
> > > > your
> > > > >> >> >> enthusiasm will go a long way to making that happen.
> > > > >> >> >>
> > > > >> >> >> Good luck and I look forward to seeing you on these lists
> over
> > > the
> > > > >> >> >> summer. If you do make it through, I and everyone in this
> > > > community
> > > > >> >> >> will try and make it fun and rewarding for you.
> > > > >> >> >>
> > > > >> >> >> Best Regards
> > > > >> >> >> Ian
> > > > >> >> >>
> > > > >> >> >>
> > > > >> >> >>
> > > > >> >> >> >
> > > > >> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> > > > >> >> >> >
> > > > >> >> >> > --
> > > > >> >> >> > Thanks
> > > > >> >> >> > /Dishara
> > > > >> >> >>
> > > > >> >> >
> > > > >> >> >
> > > > >> >> >
> > > > >> >> > --
> > > > >> >> > Thanks
> > > > >> >> > /Dishara
> > > > >> >>
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> > --
> > > > >> > Thanks
> > > > >> > /Dishara
> > > > >>
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Thanks
> > > > > /Dishara
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Thanks
> > > > /Dishara
> > > >
> > >
> >
> >
> >
> > --
> > Thanks
> > /Dishara
> >
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
That sounds good.
If you havent already it will be important to become familiar with OSGi and
Sling itself.
Please dont do too much work before getting being accepted. I
cant guarantee that you will be accepted since there are lots of Apache
projects, lots of submissions and a limited number of places given to
Apache.

Have a great weekend.
Ian



On 7 April 2013 02:12, Dishara Wijewardana <dd...@gmail.com> wrote:

> Hi Ian
> Than you for the quick response. I have started localhost Cassendra and
> written some codes through hector API to create columns and etc. And works
> fine. I am still doing some more test codings to get familiar more with
> Cassendra these days so that I can reuse those codes and write an
> appropriate CassendraResourceProviderUtil class .Meanwhile I will prepare
> the project proposal.  Please let me know if you want something more/else
> to be done before hand that would be useful to this project.
>
> On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk> wrote:
>
> > Hi
> > Hector looks good.
> >
> > Sling wont ship a Cassandra instance, for this project it will uses a
> > Cassandra instance setup separately  Last time I spun up Cassandra it for
> > dev purposes it was just as easy as installing MySQL or PostgreSQL, so I
> > think that fine.
> >
> +1.
>
> >
> > If using Hector, I think it would be good to do everything in CQL and
> keep
> > it all very simple and transparent. Remember the aim of the project is to
> > prove that the ResourceProvider API can support Cassandra as a repository
> > store, and that API is complete and usable all the way through to the
> > latest security related APIs that have just been developed. This project
> is
> > not an exercise in doing cool and complex things in Cassandra
> > with automated ORM mapping that binds the code forever to one Cassandra
> > API.
> >
> >
> Totally agree. So ideally in a users's perspective, when dealing with sling
> layer, there should not be any difference between the resources in
>  /root/jackrabbit and /root/cassandra for example.
>
> Sound ok to you, or do you see problems ?
> >
>
> Yes, no problems at all. Quite fine with the suggestions.
>
> > Ian
> >
> >
> > On 6 April 2013 16:55, Dishara Wijewardana <dd...@gmail.com>
> > wrote:
> >
> > > Hi Ian,
> > >
> > > In Sling, are we going to ship native Cassandra instance with the sling
> > > binary pack? ( is there already a native cassandra server starting at
> > sling
> > > server start up ?)
> > > I am willing to use hector API to deal with Cassandra, as in most of
> > >  occasions around . Please let me know if there is any concerns on that
> > > aspect ?
> > >
> > >
> > > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > > ddwijewardana@gmail.com
> > > > wrote:
> > >
> > > > Hi Ian,
> > > >
> > > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > >
> > > >> On 2 April 2013 07:55, Dishara Wijewardana <ddwijewardana@gmail.com
> >
> > > >> wrote:
> > > >> > Hi Ian,
> > > >> > Thanks for the explanation. Really helped me to get several stuff
> > > >> cleared.
> > > >> >
> > > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > > >> >
> > > >> >> Hi Dishara,
> > > >> >>
> > > >> >> You should not think about implementing the JCR API classes
> > > >> >> (javax.jcr.*). You should think about implementing the Resource
> > > >> >> API[1]. When you need to perform something that the ResourceAPI
> > > doesnt
> > > >> >> support (say in a servlet), then you can use the
> > > >> >> Resource.adapTo(Class<?> clazz) method to adapt the resource
> into a
> > > >> >> class that supports that operation.
> > > >> >>
> > > >> >
> > > >> > Interesting.!! . If I got you correctly "adapTo" concept used to
> > > achieve
> > > >> > *kind of* dynamic multiple inheritance rather than extending a
> heavy
> > > >> > abstract class. if that is so, this is a wonderful idea and I
> really
> > > >> like
> > > >> > the concept.
> > > >>
> > > >> Calling it inheritance might be going too far as the class isn't
> > > >> necessarily the same, but in essence, yes.
> > > >>
> > > >> >
> > > >> >
> > > >> >>
> > > >> >> eg:
> > > >> >> The properties of the resource are exposed via ResourceMetadata
> > [2],
> > > >> >> but lets say you want to find the underlying Cassandra object to
> > copy
> > > >> >> it and create a child.
> > > >> >>
> > > >> >> So: CassandraResource implements Resource, which is what is
> > returned
> > > >> >> when the CassandraResourceProvider resolves a Resource. A client
> > > >> >> should not bind to CassandraResource or mention it, since its
> > almost
> > > >> >> certainly an implementation and not an API. However, the
> Cassandra
> > > >> >> bundle you have written also implements CassandraContent which
> has
> > > >> >> CassandraContent.copy(String copyLocation) and
> > > >> >> CassandraContent.createChild(String childName).
> > > >> >
> > > >> > To get to this you would do
> > > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > > >> >> BTW, CassandraContent.class is an API exported by your bundle.
> > > >> >>
> > > >> >
> > > >> > If I got you correctly,
> > > >> >  after CassandraResource.adaptTo(CassandraContent.class) I should
> be
> > > >> able
> > > >> > to call
> > > >> > CassandraResource.copy(String copyLocation)
> > > >> > and CassandraResource.createChild(String childName).
> > > >> >
> > > >> > Then I will have to write an "Adaptable" class to
> > > >> > facilitate CassandraResource to deal with its corresponding
> > cassandra
> > > >> > nodes.
> > > >> > In that sense I feel the best way to approach to this project when
> > > >> > implementing is an bottom-up approach. We start from the
> "Adaptable"
> > > >> class
> > > >> > (given the fact that it should be expanded during implementation)
> > and
> > > >> then
> > > >> > goes to the sling Resource wrapper layer which is
> > > CassandraResourceImpl.
> > > >>
> > > >>
> > > >> Resource extends Adaptable, so you dont get much choice there, just
> > > >> implement the resource.
> > > >>
> > > >> >
> > > >> > What do you think ? And may I know the expected scope of this
> > project
> > > by
> > > >> > the community (just a potential one, during the implementation we
> > can
> > > >> > expand it as time permits) .i.e
> > > >> > READ,
> > > >> > READ with access control
> > > >> > READ/WRITE with access control and etc.
> > > >> >
> > > >>
> > > >> Yes, thats the idea.
> > > >> It would be nicer to have 4 iterations to fit the GSoC timeline and
> do
> > > >> 2 before half time, and 2 after. Perhaps the first half can also
> > > >
> > > > include spinning up Cassandra, getting client APIs working and
> getting
> > > >> fully upto speed with that area of Sling.
> > > >>
> > > >
> > > > +1 . Will make in to four iteration (generally 2 before midterm and 2
> > > > after mid term) and will include getting client API working for
> > Cassandra
> > > > and related sling stuff as a part of first two iterations (which
> means
> > > > before mid term ). And to meet deadlines, should target more to be
> > > > completed before mid term compared to the work scheduled after the
> mid
> > > > term. Will make it count in project proposal time line schedule. And
> > > thank
> > > > you for the aforementioned feedback so that I can provide a solid
> > > proposal
> > > > in this year as well.
> > > > Will post as soon as when I got update. Meanwhile I will build sling
> > and
> > > > getting familiar with the code base with the help of the sling
> > > > documentation.
> > > >
> > > >
> > > >>
> > > >>
> > > >> Ian
> > > >> >
> > > >> >> I hope that gives you an idea of how a CassandraResourceProvider
> > and
> > > >> >> associated implementation should work. If you havent already, and
> > are
> > > >> >> still interested you should read up on how Sling and OSGi works.
> > > >> >> Trying the "Sling in 15 minutes"[3] is a good place to start. And
> > > then
> > > >> >> reading everything you can about Declarative Services in OSGi.
> The
> > 2
> > > >> >> key things you are going to need to understand is how OSGi
> bundles
> > > >> >> import and export packages and then how Declarative, declare
> > services
> > > >> >> that they depend on and declare services they implement, [4] is a
> > > >> >> bunch of links.
> > > >> >>
> > > >> >
> > > >> > Yes, I will go through the mentioned links. Specially like [3]
> > which I
> > > >> have
> > > >> > not yet gone through. I also have some experience in using OSGi
> > > >> importing
> > > >> > exporting packages and using maven scr plugin in classes with
> "bind"
> > > >> > "unbind" attributes to register and unregister OSGi services and
> > etc.
> > > >> >
> > > >> >
> > > >> >> HTH
> > > >> >> Ian
> > > >> >>
> > > >> >>
> > > >> >> 1
> > > >> >>
> > > >>
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > > >> >> 2
> > > >> >>
> > > >>
> > >
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > > >> >> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
> > > >> >>
> > > >> >>
> > > >>
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > > >> >>
> > > >> >>
> > > >>
> > >
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > > >> >>
> > > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> > ddwijewardana@gmail.com
> > > >
> > > >> >> wrote:
> > > >> >> > Hi Ian,
> > > >> >> > Thank you very much for the explanation. Before replying to
> this
> > > >> mail, I
> > > >> >> > revisited the facts you mentioned and try to comeup with a end
> to
> > > >> end big
> > > >> >> > picture and what are the challenges that has to face when
> > > >> implementing
> > > >> >> this
> > > >> >> > project.
> > > >> >> >
> > > >> >> > Read/write with Cassandra data seems is pretty straight forward
> > > with
> > > >> few
> > > >> >> > lines of code using a client API. But the tricky part is to
> make
> > a
> > > >> clean
> > > >> >> > bridge between JCR wrapped sling resource API vs Cassendra
> column
> > > >> family
> > > >> >> > data storage. So I took some time and went through the JCR spec
> > and
> > > >> try
> > > >> >> to
> > > >> >> > understand how it deals with resources (I assumed sling
> resource
> > is
> > > >> >> > directly based on JCR node concept). And got a good
> understanding
> > > of
> > > >> how
> > > >> >> > JCR thinks on resource and how they deal with it.
> > > >> >> >
> > > >> >> > Because we need to think of the mapping between the sling
> wrapper
> > > >> >> interface
> > > >> >> > for resources which is  org.apache.sling.api.resource.Resource
> > > >> (which is
> > > >> >> a
> > > >> >> > JCR Node as I understand) and the Cassendra data layer. For
> > > instance
> > > >> >> > Cassandra provider will return a sling resource and it should
> be
> > > >> enrich
> > > >> >> > with the properties/attributes which helps the sling resource
> to
> > > >> keep its
> > > >> >> > state like resource meta data, resource type (which should be
> the
> > > JCR
> > > >> >> node
> > > >> >> > type),  and etc.
> > > >> >> >
> > > >> >> > And the provider should only return a resource which only has
> > such
> > > >> very
> > > >> >> > basic meta data. For instance, like
> > > >> >>  org.apache.sling.api.resource.Resource
> > > >> >> > #getChild() #getChildren() we should not keep those in memory.
> We
> > > >> should
> > > >> >> > return them on  the fly from Cassandra.
> > > >> >> >
> > > >> >> > I think we should write a separate Sling Cassandra Adapter
> layer
> > > and
> > > >> >> > provider should talk to Cassandra through Cassandra Adapter. I
> > hope
> > > >> this
> > > >> >> > will make it more cleaner.
> > > >> >> > Appreciate your valuable feedback. So that based on feedback I
> > can
> > > >> >> provide
> > > >> >> > a patch which will reflect the basic architecture and keep on
> > > >> patching
> > > >> >> with
> > > >> >> > future additions.
> > > >> >> >
> > > >> >> >
> > > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk>
> > wrote:
> > > >> >> >
> > > >> >> >> Hi and welcome,
> > > >> >> >> Some comments inline below.
> > > >> >> >>
> > > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > > >> ddwijewardana@gmail.com>
> > > >> >> >> wrote:
> > > >> >> >> > Hi all,
> > > >> >> >> > I am Dishara Wijewardana, a student who is willing to take
> > part
> > > in
> > > >> >> this
> > > >> >> >> > GSoC 2013 .
> > > >> >> >> >
> > > >> >> >> > I have successfully completed GSoC 2012 in Apache Velocity
> and
> > > >> there I
> > > >> >> >> have
> > > >> >> >> > implemented JSR 223 support for Velocity. I found myself
> > really
> > > >> >> >> interested
> > > >> >> >> > in this project since it covers very useful and interesting
> > > >> topics. So
> > > >> >> >> > thought of getting in to this project idea and provide a
> good
> > > >> proposal
> > > >> >> >> for
> > > >> >> >> > this project.
> > > >> >> >> >
> > > >> >> >> > So I did some research around sling which might be useful
> for
> > me
> > > >> to
> > > >> >> get
> > > >> >> >> in
> > > >> >> >> > to this project. I like sling as it sticks to community
> > > standards
> > > >> >> where
> > > >> >> >> it
> > > >> >> >> > uses a standard JCR2 repository to store resources which is
> a
> > > >> really
> > > >> >> good
> > > >> >> >> > thing to have.
> > > >> >> >> >
> > > >> >> >> > I went through the information provided in the JIRA[1] and
> > > >> according
> > > >> >> to
> > > >> >> >> > that at the end of this project what is expected to have
> > > >> implemented
> > > >> >> is a
> > > >> >> >> > ResourceProvider for Sling which tunnels with a Cassandra
> > > >> (standalone
> > > >> >> >> > one/cluster).
> > > >> >> >>
> > > >> >> >> yes, correct.
> > > >> >> >>
> > > >> >> >> >
> > > >> >> >> > As far as I got to know, sling directly calls to Apache
> > > JackRabbit
> > > >> >> APIs
> > > >> >> >> > (JCR APIs) to store resources. So I found a bit complicated
> > this
> > > >> >> project
> > > >> >> >> > idea in that sense. Because if we are to implement a
> Cassandra
> > > >> backend
> > > >> >> >> for
> > > >> >> >> > Sling (as per this proposal), and Sling storage is on top of
> > > >> >> JackRabbit,
> > > >> >> >> > ideally what should happen is to make JackRabbit capable of
> > > using
> > > >> >> >> Cassandra
> > > >> >> >> > as its resource persistent layer, and configure it through
> > > Sling ?
> > > >> >> Please
> > > >> >> >> > correct me If I am wrong.
> > > >> >> >>
> > > >> >> >> Your right.
> > > >> >> >> The idea is this, Sling resolves paths into Resources
> > > >> >> >> ie /content/mywebsite/page1.html is resolved to a Resource
> with
> > a
> > > >> path
> > > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR
> > repository
> > > >> >> >> takes ownership of everything under /, so all Resources are
> JCR
> > > >> >> >> Resources.
> > > >> >> >>
> > > >> >> >> However, with a ResourceProvider its possible to "mount" a
> > > >> alternative
> > > >> >> >> source of Resources at any location in the tree. eg:
> > > >> >> >> If I create a ResourceProvider and configure it to respond to
> > all
> > > >> >> >> resource resolution operations at
> > > >> >> >> /content/cassandra
> > > >> >> >>
> > > >> >> >> then
> > > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > > >> >> >>
> > > >> >> >> will generate a Cassandra Resource instead of a JCR Resource.
> > > >> >> >>
> > > >> >> >> Initially the aim is to write a ResourceProvider that will
> allow
> > > >> >> >> Readonly access to a Cassandra cluster (cluster of one is ok
> for
> > > >> >> >> testing), but ultimately we would like to be able to write to
> > that
> > > >> >> >> cluster as well.
> > > >> >> >>
> > > >> >> >> Why Do it ?
> > > >> >> >> Every storage platform has different characteristics, some are
> > > ideal
> > > >> >> >> for extreem volume writes of throw away data, some are ideal
> for
> > > >> >> >> extreem volume reads of precious audited transactrional data.
> > > Being
> > > >> >> >> able to "mount" multiple stores in Sling enables Sling to
> > > integrate
> > > >> >> >> data from all types of sources using best of breed address
> each
> > > use
> > > >> >> >> case. (Thats the theory, anyway :))
> > > >> >> >>
> > > >> >> >
> > > >> >> > +1 and this is a wonderful architecture interms of
> extensibility.
> > > >> >> Something
> > > >> >> > even a repository vendor like Jackrabbit also would want to
> > follow.
> > > >> >> Because
> > > >> >> > they only have a JCR interfaced tree.
> > > >> >> >
> > > >> >> >
> > > >> >> >>
> > > >> >> >> I hope that makes things clearer.
> > > >> >> >>
> > > >> >> >> 1 http://sling.apache.org/site/resources.html
> > > >> >> >>
> > > >> >> >> >
> > > >> >> >> > But if it is only to READ resources, this project is
> > relatively
> > > >> less
> > > >> >> >> > complex (not quite sure though ;-) ) since what is required
> is
> > > to
> > > >> >> have a
> > > >> >> >> > JCR/Sling Resource compatible wrapper layer interface on top
> > of
> > > >> >> Cassendra
> > > >> >> >> > to read cassandra data.
> > > >> >> >>
> > > >> >> >> Initially, just read. Then read with access control. The
> > > read/write
> > > >> >> >> with access control.
> > > >> >> >>
> > > >> >> >
> > > >> >> > Read/Write complexity will be more or less the same as I feel.
> >  But
> > > >> read
> > > >> >> > write with access control is something we have to discuss
> > > separately.
> > > >> >> > Does sling maintaining access control directly with
> jackrabbit's
> > > >> >> > javax.jcr.security module ? Or any inhouse access control
> layer ?
> > > >> >> >
> > > >> >> >
> > > >> >> >
> > > >> >> >>
> > > >> >> >> >
> > > >> >> >> > Appreciate any feedback and guidance on how to proceed.
> > > >> >> >>
> > > >> >> >> If you havent already you need to checkout the information at:
> > > >> >> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > > >> >> >> * http://community.apache.org/gsoc.html
> > > >> >> >>
> > > >> >> >> especially the timeline and dates.
> > > >> >> >>
> > > >> >> >> There is no guarantee that Apache will be a GSoC organisation
> > > >> >> >> (although its highly likely), and there are currently 129
> > project
> > > >> >> >> proposals so there is no guarantee that you will get accepted
> > as a
> > > >> >> >> Student on this project, but the quality of your submission
> and
> > > your
> > > >> >> >> enthusiasm will go a long way to making that happen.
> > > >> >> >>
> > > >> >> >> Good luck and I look forward to seeing you on these lists over
> > the
> > > >> >> >> summer. If you do make it through, I and everyone in this
> > > community
> > > >> >> >> will try and make it fun and rewarding for you.
> > > >> >> >>
> > > >> >> >> Best Regards
> > > >> >> >> Ian
> > > >> >> >>
> > > >> >> >>
> > > >> >> >>
> > > >> >> >> >
> > > >> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> > > >> >> >> >
> > > >> >> >> > --
> > > >> >> >> > Thanks
> > > >> >> >> > /Dishara
> > > >> >> >>
> > > >> >> >
> > > >> >> >
> > > >> >> >
> > > >> >> > --
> > > >> >> > Thanks
> > > >> >> > /Dishara
> > > >> >>
> > > >> >
> > > >> >
> > > >> >
> > > >> > --
> > > >> > Thanks
> > > >> > /Dishara
> > > >>
> > > >
> > > >
> > > >
> > > > --
> > > > Thanks
> > > > /Dishara
> > > >
> > >
> > >
> > >
> > > --
> > > Thanks
> > > /Dishara
> > >
> >
>
>
>
> --
> Thanks
> /Dishara
>

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian
Than you for the quick response. I have started localhost Cassendra and
written some codes through hector API to create columns and etc. And works
fine. I am still doing some more test codings to get familiar more with
Cassendra these days so that I can reuse those codes and write an
appropriate CassendraResourceProviderUtil class .Meanwhile I will prepare
the project proposal.  Please let me know if you want something more/else
to be done before hand that would be useful to this project.

On Sat, Apr 6, 2013 at 12:45 PM, Ian Boston <ie...@tfd.co.uk> wrote:

> Hi
> Hector looks good.
>
> Sling wont ship a Cassandra instance, for this project it will uses a
> Cassandra instance setup separately  Last time I spun up Cassandra it for
> dev purposes it was just as easy as installing MySQL or PostgreSQL, so I
> think that fine.
>
+1.

>
> If using Hector, I think it would be good to do everything in CQL and keep
> it all very simple and transparent. Remember the aim of the project is to
> prove that the ResourceProvider API can support Cassandra as a repository
> store, and that API is complete and usable all the way through to the
> latest security related APIs that have just been developed. This project is
> not an exercise in doing cool and complex things in Cassandra
> with automated ORM mapping that binds the code forever to one Cassandra
> API.
>
>
Totally agree. So ideally in a users's perspective, when dealing with sling
layer, there should not be any difference between the resources in
 /root/jackrabbit and /root/cassandra for example.

Sound ok to you, or do you see problems ?
>

Yes, no problems at all. Quite fine with the suggestions.

> Ian
>
>
> On 6 April 2013 16:55, Dishara Wijewardana <dd...@gmail.com>
> wrote:
>
> > Hi Ian,
> >
> > In Sling, are we going to ship native Cassandra instance with the sling
> > binary pack? ( is there already a native cassandra server starting at
> sling
> > server start up ?)
> > I am willing to use hector API to deal with Cassandra, as in most of
> >  occasions around . Please let me know if there is any concerns on that
> > aspect ?
> >
> >
> > On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> > ddwijewardana@gmail.com
> > > wrote:
> >
> > > Hi Ian,
> > >
> > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > >
> > >> On 2 April 2013 07:55, Dishara Wijewardana <dd...@gmail.com>
> > >> wrote:
> > >> > Hi Ian,
> > >> > Thanks for the explanation. Really helped me to get several stuff
> > >> cleared.
> > >> >
> > >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> > >> >
> > >> >> Hi Dishara,
> > >> >>
> > >> >> You should not think about implementing the JCR API classes
> > >> >> (javax.jcr.*). You should think about implementing the Resource
> > >> >> API[1]. When you need to perform something that the ResourceAPI
> > doesnt
> > >> >> support (say in a servlet), then you can use the
> > >> >> Resource.adapTo(Class<?> clazz) method to adapt the resource into a
> > >> >> class that supports that operation.
> > >> >>
> > >> >
> > >> > Interesting.!! . If I got you correctly "adapTo" concept used to
> > achieve
> > >> > *kind of* dynamic multiple inheritance rather than extending a heavy
> > >> > abstract class. if that is so, this is a wonderful idea and I really
> > >> like
> > >> > the concept.
> > >>
> > >> Calling it inheritance might be going too far as the class isn't
> > >> necessarily the same, but in essence, yes.
> > >>
> > >> >
> > >> >
> > >> >>
> > >> >> eg:
> > >> >> The properties of the resource are exposed via ResourceMetadata
> [2],
> > >> >> but lets say you want to find the underlying Cassandra object to
> copy
> > >> >> it and create a child.
> > >> >>
> > >> >> So: CassandraResource implements Resource, which is what is
> returned
> > >> >> when the CassandraResourceProvider resolves a Resource. A client
> > >> >> should not bind to CassandraResource or mention it, since its
> almost
> > >> >> certainly an implementation and not an API. However, the Cassandra
> > >> >> bundle you have written also implements CassandraContent which has
> > >> >> CassandraContent.copy(String copyLocation) and
> > >> >> CassandraContent.createChild(String childName).
> > >> >
> > >> > To get to this you would do
> > >> >> CassandraResource.adaptTo(CassandraContent.class)
> > >> >> BTW, CassandraContent.class is an API exported by your bundle.
> > >> >>
> > >> >
> > >> > If I got you correctly,
> > >> >  after CassandraResource.adaptTo(CassandraContent.class) I should be
> > >> able
> > >> > to call
> > >> > CassandraResource.copy(String copyLocation)
> > >> > and CassandraResource.createChild(String childName).
> > >> >
> > >> > Then I will have to write an "Adaptable" class to
> > >> > facilitate CassandraResource to deal with its corresponding
> cassandra
> > >> > nodes.
> > >> > In that sense I feel the best way to approach to this project when
> > >> > implementing is an bottom-up approach. We start from the "Adaptable"
> > >> class
> > >> > (given the fact that it should be expanded during implementation)
> and
> > >> then
> > >> > goes to the sling Resource wrapper layer which is
> > CassandraResourceImpl.
> > >>
> > >>
> > >> Resource extends Adaptable, so you dont get much choice there, just
> > >> implement the resource.
> > >>
> > >> >
> > >> > What do you think ? And may I know the expected scope of this
> project
> > by
> > >> > the community (just a potential one, during the implementation we
> can
> > >> > expand it as time permits) .i.e
> > >> > READ,
> > >> > READ with access control
> > >> > READ/WRITE with access control and etc.
> > >> >
> > >>
> > >> Yes, thats the idea.
> > >> It would be nicer to have 4 iterations to fit the GSoC timeline and do
> > >> 2 before half time, and 2 after. Perhaps the first half can also
> > >
> > > include spinning up Cassandra, getting client APIs working and getting
> > >> fully upto speed with that area of Sling.
> > >>
> > >
> > > +1 . Will make in to four iteration (generally 2 before midterm and 2
> > > after mid term) and will include getting client API working for
> Cassandra
> > > and related sling stuff as a part of first two iterations (which means
> > > before mid term ). And to meet deadlines, should target more to be
> > > completed before mid term compared to the work scheduled after the mid
> > > term. Will make it count in project proposal time line schedule. And
> > thank
> > > you for the aforementioned feedback so that I can provide a solid
> > proposal
> > > in this year as well.
> > > Will post as soon as when I got update. Meanwhile I will build sling
> and
> > > getting familiar with the code base with the help of the sling
> > > documentation.
> > >
> > >
> > >>
> > >>
> > >> Ian
> > >> >
> > >> >> I hope that gives you an idea of how a CassandraResourceProvider
> and
> > >> >> associated implementation should work. If you havent already, and
> are
> > >> >> still interested you should read up on how Sling and OSGi works.
> > >> >> Trying the "Sling in 15 minutes"[3] is a good place to start. And
> > then
> > >> >> reading everything you can about Declarative Services in OSGi. The
> 2
> > >> >> key things you are going to need to understand is how OSGi bundles
> > >> >> import and export packages and then how Declarative, declare
> services
> > >> >> that they depend on and declare services they implement, [4] is a
> > >> >> bunch of links.
> > >> >>
> > >> >
> > >> > Yes, I will go through the mentioned links. Specially like [3]
> which I
> > >> have
> > >> > not yet gone through. I also have some experience in using OSGi
> > >> importing
> > >> > exporting packages and using maven scr plugin in classes with "bind"
> > >> > "unbind" attributes to register and unregister OSGi services and
> etc.
> > >> >
> > >> >
> > >> >> HTH
> > >> >> Ian
> > >> >>
> > >> >>
> > >> >> 1
> > >> >>
> > >>
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> > >> >> 2
> > >> >>
> > >>
> >
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> > >> >> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
> > >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
> > >> >>
> > >> >>
> > >>
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> > >> >>
> > >> >>
> > >>
> >
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> > >> >>
> > >> >> On 31 March 2013 21:58, Dishara Wijewardana <
> ddwijewardana@gmail.com
> > >
> > >> >> wrote:
> > >> >> > Hi Ian,
> > >> >> > Thank you very much for the explanation. Before replying to this
> > >> mail, I
> > >> >> > revisited the facts you mentioned and try to comeup with a end to
> > >> end big
> > >> >> > picture and what are the challenges that has to face when
> > >> implementing
> > >> >> this
> > >> >> > project.
> > >> >> >
> > >> >> > Read/write with Cassandra data seems is pretty straight forward
> > with
> > >> few
> > >> >> > lines of code using a client API. But the tricky part is to make
> a
> > >> clean
> > >> >> > bridge between JCR wrapped sling resource API vs Cassendra column
> > >> family
> > >> >> > data storage. So I took some time and went through the JCR spec
> and
> > >> try
> > >> >> to
> > >> >> > understand how it deals with resources (I assumed sling resource
> is
> > >> >> > directly based on JCR node concept). And got a good understanding
> > of
> > >> how
> > >> >> > JCR thinks on resource and how they deal with it.
> > >> >> >
> > >> >> > Because we need to think of the mapping between the sling wrapper
> > >> >> interface
> > >> >> > for resources which is  org.apache.sling.api.resource.Resource
> > >> (which is
> > >> >> a
> > >> >> > JCR Node as I understand) and the Cassendra data layer. For
> > instance
> > >> >> > Cassandra provider will return a sling resource and it should be
> > >> enrich
> > >> >> > with the properties/attributes which helps the sling resource to
> > >> keep its
> > >> >> > state like resource meta data, resource type (which should be the
> > JCR
> > >> >> node
> > >> >> > type),  and etc.
> > >> >> >
> > >> >> > And the provider should only return a resource which only has
> such
> > >> very
> > >> >> > basic meta data. For instance, like
> > >> >>  org.apache.sling.api.resource.Resource
> > >> >> > #getChild() #getChildren() we should not keep those in memory. We
> > >> should
> > >> >> > return them on  the fly from Cassandra.
> > >> >> >
> > >> >> > I think we should write a separate Sling Cassandra Adapter layer
> > and
> > >> >> > provider should talk to Cassandra through Cassandra Adapter. I
> hope
> > >> this
> > >> >> > will make it more cleaner.
> > >> >> > Appreciate your valuable feedback. So that based on feedback I
> can
> > >> >> provide
> > >> >> > a patch which will reflect the basic architecture and keep on
> > >> patching
> > >> >> with
> > >> >> > future additions.
> > >> >> >
> > >> >> >
> > >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk>
> wrote:
> > >> >> >
> > >> >> >> Hi and welcome,
> > >> >> >> Some comments inline below.
> > >> >> >>
> > >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> > >> ddwijewardana@gmail.com>
> > >> >> >> wrote:
> > >> >> >> > Hi all,
> > >> >> >> > I am Dishara Wijewardana, a student who is willing to take
> part
> > in
> > >> >> this
> > >> >> >> > GSoC 2013 .
> > >> >> >> >
> > >> >> >> > I have successfully completed GSoC 2012 in Apache Velocity and
> > >> there I
> > >> >> >> have
> > >> >> >> > implemented JSR 223 support for Velocity. I found myself
> really
> > >> >> >> interested
> > >> >> >> > in this project since it covers very useful and interesting
> > >> topics. So
> > >> >> >> > thought of getting in to this project idea and provide a good
> > >> proposal
> > >> >> >> for
> > >> >> >> > this project.
> > >> >> >> >
> > >> >> >> > So I did some research around sling which might be useful for
> me
> > >> to
> > >> >> get
> > >> >> >> in
> > >> >> >> > to this project. I like sling as it sticks to community
> > standards
> > >> >> where
> > >> >> >> it
> > >> >> >> > uses a standard JCR2 repository to store resources which is a
> > >> really
> > >> >> good
> > >> >> >> > thing to have.
> > >> >> >> >
> > >> >> >> > I went through the information provided in the JIRA[1] and
> > >> according
> > >> >> to
> > >> >> >> > that at the end of this project what is expected to have
> > >> implemented
> > >> >> is a
> > >> >> >> > ResourceProvider for Sling which tunnels with a Cassandra
> > >> (standalone
> > >> >> >> > one/cluster).
> > >> >> >>
> > >> >> >> yes, correct.
> > >> >> >>
> > >> >> >> >
> > >> >> >> > As far as I got to know, sling directly calls to Apache
> > JackRabbit
> > >> >> APIs
> > >> >> >> > (JCR APIs) to store resources. So I found a bit complicated
> this
> > >> >> project
> > >> >> >> > idea in that sense. Because if we are to implement a Cassandra
> > >> backend
> > >> >> >> for
> > >> >> >> > Sling (as per this proposal), and Sling storage is on top of
> > >> >> JackRabbit,
> > >> >> >> > ideally what should happen is to make JackRabbit capable of
> > using
> > >> >> >> Cassandra
> > >> >> >> > as its resource persistent layer, and configure it through
> > Sling ?
> > >> >> Please
> > >> >> >> > correct me If I am wrong.
> > >> >> >>
> > >> >> >> Your right.
> > >> >> >> The idea is this, Sling resolves paths into Resources
> > >> >> >> ie /content/mywebsite/page1.html is resolved to a Resource with
> a
> > >> path
> > >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR
> repository
> > >> >> >> takes ownership of everything under /, so all Resources are JCR
> > >> >> >> Resources.
> > >> >> >>
> > >> >> >> However, with a ResourceProvider its possible to "mount" a
> > >> alternative
> > >> >> >> source of Resources at any location in the tree. eg:
> > >> >> >> If I create a ResourceProvider and configure it to respond to
> all
> > >> >> >> resource resolution operations at
> > >> >> >> /content/cassandra
> > >> >> >>
> > >> >> >> then
> > >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> > >> >> >>
> > >> >> >> will generate a Cassandra Resource instead of a JCR Resource.
> > >> >> >>
> > >> >> >> Initially the aim is to write a ResourceProvider that will allow
> > >> >> >> Readonly access to a Cassandra cluster (cluster of one is ok for
> > >> >> >> testing), but ultimately we would like to be able to write to
> that
> > >> >> >> cluster as well.
> > >> >> >>
> > >> >> >> Why Do it ?
> > >> >> >> Every storage platform has different characteristics, some are
> > ideal
> > >> >> >> for extreem volume writes of throw away data, some are ideal for
> > >> >> >> extreem volume reads of precious audited transactrional data.
> > Being
> > >> >> >> able to "mount" multiple stores in Sling enables Sling to
> > integrate
> > >> >> >> data from all types of sources using best of breed address each
> > use
> > >> >> >> case. (Thats the theory, anyway :))
> > >> >> >>
> > >> >> >
> > >> >> > +1 and this is a wonderful architecture interms of extensibility.
> > >> >> Something
> > >> >> > even a repository vendor like Jackrabbit also would want to
> follow.
> > >> >> Because
> > >> >> > they only have a JCR interfaced tree.
> > >> >> >
> > >> >> >
> > >> >> >>
> > >> >> >> I hope that makes things clearer.
> > >> >> >>
> > >> >> >> 1 http://sling.apache.org/site/resources.html
> > >> >> >>
> > >> >> >> >
> > >> >> >> > But if it is only to READ resources, this project is
> relatively
> > >> less
> > >> >> >> > complex (not quite sure though ;-) ) since what is required is
> > to
> > >> >> have a
> > >> >> >> > JCR/Sling Resource compatible wrapper layer interface on top
> of
> > >> >> Cassendra
> > >> >> >> > to read cassandra data.
> > >> >> >>
> > >> >> >> Initially, just read. Then read with access control. The
> > read/write
> > >> >> >> with access control.
> > >> >> >>
> > >> >> >
> > >> >> > Read/Write complexity will be more or less the same as I feel.
>  But
> > >> read
> > >> >> > write with access control is something we have to discuss
> > separately.
> > >> >> > Does sling maintaining access control directly with jackrabbit's
> > >> >> > javax.jcr.security module ? Or any inhouse access control layer ?
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >> >>
> > >> >> >> >
> > >> >> >> > Appreciate any feedback and guidance on how to proceed.
> > >> >> >>
> > >> >> >> If you havent already you need to checkout the information at:
> > >> >> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> > >> >> >> * http://community.apache.org/gsoc.html
> > >> >> >>
> > >> >> >> especially the timeline and dates.
> > >> >> >>
> > >> >> >> There is no guarantee that Apache will be a GSoC organisation
> > >> >> >> (although its highly likely), and there are currently 129
> project
> > >> >> >> proposals so there is no guarantee that you will get accepted
> as a
> > >> >> >> Student on this project, but the quality of your submission and
> > your
> > >> >> >> enthusiasm will go a long way to making that happen.
> > >> >> >>
> > >> >> >> Good luck and I look forward to seeing you on these lists over
> the
> > >> >> >> summer. If you do make it through, I and everyone in this
> > community
> > >> >> >> will try and make it fun and rewarding for you.
> > >> >> >>
> > >> >> >> Best Regards
> > >> >> >> Ian
> > >> >> >>
> > >> >> >>
> > >> >> >>
> > >> >> >> >
> > >> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> > >> >> >> >
> > >> >> >> > --
> > >> >> >> > Thanks
> > >> >> >> > /Dishara
> > >> >> >>
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >> > --
> > >> >> > Thanks
> > >> >> > /Dishara
> > >> >>
> > >> >
> > >> >
> > >> >
> > >> > --
> > >> > Thanks
> > >> > /Dishara
> > >>
> > >
> > >
> > >
> > > --
> > > Thanks
> > > /Dishara
> > >
> >
> >
> >
> > --
> > Thanks
> > /Dishara
> >
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
Hi
Hector looks good.

Sling wont ship a Cassandra instance, for this project it will uses a
Cassandra instance setup separately  Last time I spun up Cassandra it for
dev purposes it was just as easy as installing MySQL or PostgreSQL, so I
think that fine.

If using Hector, I think it would be good to do everything in CQL and keep
it all very simple and transparent. Remember the aim of the project is to
prove that the ResourceProvider API can support Cassandra as a repository
store, and that API is complete and usable all the way through to the
latest security related APIs that have just been developed. This project is
not an exercise in doing cool and complex things in Cassandra
with automated ORM mapping that binds the code forever to one Cassandra API.

Sound ok to you, or do you see problems ?
Ian


On 6 April 2013 16:55, Dishara Wijewardana <dd...@gmail.com> wrote:

> Hi Ian,
>
> In Sling, are we going to ship native Cassandra instance with the sling
> binary pack? ( is there already a native cassandra server starting at sling
> server start up ?)
> I am willing to use hector API to deal with Cassandra, as in most of
>  occasions around . Please let me know if there is any concerns on that
> aspect ?
>
>
> On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <
> ddwijewardana@gmail.com
> > wrote:
>
> > Hi Ian,
> >
> > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> >> On 2 April 2013 07:55, Dishara Wijewardana <dd...@gmail.com>
> >> wrote:
> >> > Hi Ian,
> >> > Thanks for the explanation. Really helped me to get several stuff
> >> cleared.
> >> >
> >> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >> >
> >> >> Hi Dishara,
> >> >>
> >> >> You should not think about implementing the JCR API classes
> >> >> (javax.jcr.*). You should think about implementing the Resource
> >> >> API[1]. When you need to perform something that the ResourceAPI
> doesnt
> >> >> support (say in a servlet), then you can use the
> >> >> Resource.adapTo(Class<?> clazz) method to adapt the resource into a
> >> >> class that supports that operation.
> >> >>
> >> >
> >> > Interesting.!! . If I got you correctly "adapTo" concept used to
> achieve
> >> > *kind of* dynamic multiple inheritance rather than extending a heavy
> >> > abstract class. if that is so, this is a wonderful idea and I really
> >> like
> >> > the concept.
> >>
> >> Calling it inheritance might be going too far as the class isn't
> >> necessarily the same, but in essence, yes.
> >>
> >> >
> >> >
> >> >>
> >> >> eg:
> >> >> The properties of the resource are exposed via ResourceMetadata [2],
> >> >> but lets say you want to find the underlying Cassandra object to copy
> >> >> it and create a child.
> >> >>
> >> >> So: CassandraResource implements Resource, which is what is returned
> >> >> when the CassandraResourceProvider resolves a Resource. A client
> >> >> should not bind to CassandraResource or mention it, since its almost
> >> >> certainly an implementation and not an API. However, the Cassandra
> >> >> bundle you have written also implements CassandraContent which has
> >> >> CassandraContent.copy(String copyLocation) and
> >> >> CassandraContent.createChild(String childName).
> >> >
> >> > To get to this you would do
> >> >> CassandraResource.adaptTo(CassandraContent.class)
> >> >> BTW, CassandraContent.class is an API exported by your bundle.
> >> >>
> >> >
> >> > If I got you correctly,
> >> >  after CassandraResource.adaptTo(CassandraContent.class) I should be
> >> able
> >> > to call
> >> > CassandraResource.copy(String copyLocation)
> >> > and CassandraResource.createChild(String childName).
> >> >
> >> > Then I will have to write an "Adaptable" class to
> >> > facilitate CassandraResource to deal with its corresponding cassandra
> >> > nodes.
> >> > In that sense I feel the best way to approach to this project when
> >> > implementing is an bottom-up approach. We start from the "Adaptable"
> >> class
> >> > (given the fact that it should be expanded during implementation) and
> >> then
> >> > goes to the sling Resource wrapper layer which is
> CassandraResourceImpl.
> >>
> >>
> >> Resource extends Adaptable, so you dont get much choice there, just
> >> implement the resource.
> >>
> >> >
> >> > What do you think ? And may I know the expected scope of this project
> by
> >> > the community (just a potential one, during the implementation we can
> >> > expand it as time permits) .i.e
> >> > READ,
> >> > READ with access control
> >> > READ/WRITE with access control and etc.
> >> >
> >>
> >> Yes, thats the idea.
> >> It would be nicer to have 4 iterations to fit the GSoC timeline and do
> >> 2 before half time, and 2 after. Perhaps the first half can also
> >
> > include spinning up Cassandra, getting client APIs working and getting
> >> fully upto speed with that area of Sling.
> >>
> >
> > +1 . Will make in to four iteration (generally 2 before midterm and 2
> > after mid term) and will include getting client API working for Cassandra
> > and related sling stuff as a part of first two iterations (which means
> > before mid term ). And to meet deadlines, should target more to be
> > completed before mid term compared to the work scheduled after the mid
> > term. Will make it count in project proposal time line schedule. And
> thank
> > you for the aforementioned feedback so that I can provide a solid
> proposal
> > in this year as well.
> > Will post as soon as when I got update. Meanwhile I will build sling and
> > getting familiar with the code base with the help of the sling
> > documentation.
> >
> >
> >>
> >>
> >> Ian
> >> >
> >> >> I hope that gives you an idea of how a CassandraResourceProvider and
> >> >> associated implementation should work. If you havent already, and are
> >> >> still interested you should read up on how Sling and OSGi works.
> >> >> Trying the "Sling in 15 minutes"[3] is a good place to start. And
> then
> >> >> reading everything you can about Declarative Services in OSGi. The 2
> >> >> key things you are going to need to understand is how OSGi bundles
> >> >> import and export packages and then how Declarative, declare services
> >> >> that they depend on and declare services they implement, [4] is a
> >> >> bunch of links.
> >> >>
> >> >
> >> > Yes, I will go through the mentioned links. Specially like [3] which I
> >> have
> >> > not yet gone through. I also have some experience in using OSGi
> >> importing
> >> > exporting packages and using maven scr plugin in classes with "bind"
> >> > "unbind" attributes to register and unregister OSGi services and etc.
> >> >
> >> >
> >> >> HTH
> >> >> Ian
> >> >>
> >> >>
> >> >> 1
> >> >>
> >>
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> >> >> 2
> >> >>
> >>
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> >> >> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
> >> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
> >> >>
> >> >>
> >>
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> >> >>
> >> >>
> >>
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> >> >>
> >> >> On 31 March 2013 21:58, Dishara Wijewardana <ddwijewardana@gmail.com
> >
> >> >> wrote:
> >> >> > Hi Ian,
> >> >> > Thank you very much for the explanation. Before replying to this
> >> mail, I
> >> >> > revisited the facts you mentioned and try to comeup with a end to
> >> end big
> >> >> > picture and what are the challenges that has to face when
> >> implementing
> >> >> this
> >> >> > project.
> >> >> >
> >> >> > Read/write with Cassandra data seems is pretty straight forward
> with
> >> few
> >> >> > lines of code using a client API. But the tricky part is to make a
> >> clean
> >> >> > bridge between JCR wrapped sling resource API vs Cassendra column
> >> family
> >> >> > data storage. So I took some time and went through the JCR spec and
> >> try
> >> >> to
> >> >> > understand how it deals with resources (I assumed sling resource is
> >> >> > directly based on JCR node concept). And got a good understanding
> of
> >> how
> >> >> > JCR thinks on resource and how they deal with it.
> >> >> >
> >> >> > Because we need to think of the mapping between the sling wrapper
> >> >> interface
> >> >> > for resources which is  org.apache.sling.api.resource.Resource
> >> (which is
> >> >> a
> >> >> > JCR Node as I understand) and the Cassendra data layer. For
> instance
> >> >> > Cassandra provider will return a sling resource and it should be
> >> enrich
> >> >> > with the properties/attributes which helps the sling resource to
> >> keep its
> >> >> > state like resource meta data, resource type (which should be the
> JCR
> >> >> node
> >> >> > type),  and etc.
> >> >> >
> >> >> > And the provider should only return a resource which only has such
> >> very
> >> >> > basic meta data. For instance, like
> >> >>  org.apache.sling.api.resource.Resource
> >> >> > #getChild() #getChildren() we should not keep those in memory. We
> >> should
> >> >> > return them on  the fly from Cassandra.
> >> >> >
> >> >> > I think we should write a separate Sling Cassandra Adapter layer
> and
> >> >> > provider should talk to Cassandra through Cassandra Adapter. I hope
> >> this
> >> >> > will make it more cleaner.
> >> >> > Appreciate your valuable feedback. So that based on feedback I can
> >> >> provide
> >> >> > a patch which will reflect the basic architecture and keep on
> >> patching
> >> >> with
> >> >> > future additions.
> >> >> >
> >> >> >
> >> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >> >> >
> >> >> >> Hi and welcome,
> >> >> >> Some comments inline below.
> >> >> >>
> >> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
> >> ddwijewardana@gmail.com>
> >> >> >> wrote:
> >> >> >> > Hi all,
> >> >> >> > I am Dishara Wijewardana, a student who is willing to take part
> in
> >> >> this
> >> >> >> > GSoC 2013 .
> >> >> >> >
> >> >> >> > I have successfully completed GSoC 2012 in Apache Velocity and
> >> there I
> >> >> >> have
> >> >> >> > implemented JSR 223 support for Velocity. I found myself really
> >> >> >> interested
> >> >> >> > in this project since it covers very useful and interesting
> >> topics. So
> >> >> >> > thought of getting in to this project idea and provide a good
> >> proposal
> >> >> >> for
> >> >> >> > this project.
> >> >> >> >
> >> >> >> > So I did some research around sling which might be useful for me
> >> to
> >> >> get
> >> >> >> in
> >> >> >> > to this project. I like sling as it sticks to community
> standards
> >> >> where
> >> >> >> it
> >> >> >> > uses a standard JCR2 repository to store resources which is a
> >> really
> >> >> good
> >> >> >> > thing to have.
> >> >> >> >
> >> >> >> > I went through the information provided in the JIRA[1] and
> >> according
> >> >> to
> >> >> >> > that at the end of this project what is expected to have
> >> implemented
> >> >> is a
> >> >> >> > ResourceProvider for Sling which tunnels with a Cassandra
> >> (standalone
> >> >> >> > one/cluster).
> >> >> >>
> >> >> >> yes, correct.
> >> >> >>
> >> >> >> >
> >> >> >> > As far as I got to know, sling directly calls to Apache
> JackRabbit
> >> >> APIs
> >> >> >> > (JCR APIs) to store resources. So I found a bit complicated this
> >> >> project
> >> >> >> > idea in that sense. Because if we are to implement a Cassandra
> >> backend
> >> >> >> for
> >> >> >> > Sling (as per this proposal), and Sling storage is on top of
> >> >> JackRabbit,
> >> >> >> > ideally what should happen is to make JackRabbit capable of
> using
> >> >> >> Cassandra
> >> >> >> > as its resource persistent layer, and configure it through
> Sling ?
> >> >> Please
> >> >> >> > correct me If I am wrong.
> >> >> >>
> >> >> >> Your right.
> >> >> >> The idea is this, Sling resolves paths into Resources
> >> >> >> ie /content/mywebsite/page1.html is resolved to a Resource with a
> >> path
> >> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR repository
> >> >> >> takes ownership of everything under /, so all Resources are JCR
> >> >> >> Resources.
> >> >> >>
> >> >> >> However, with a ResourceProvider its possible to "mount" a
> >> alternative
> >> >> >> source of Resources at any location in the tree. eg:
> >> >> >> If I create a ResourceProvider and configure it to respond to all
> >> >> >> resource resolution operations at
> >> >> >> /content/cassandra
> >> >> >>
> >> >> >> then
> >> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> >> >> >>
> >> >> >> will generate a Cassandra Resource instead of a JCR Resource.
> >> >> >>
> >> >> >> Initially the aim is to write a ResourceProvider that will allow
> >> >> >> Readonly access to a Cassandra cluster (cluster of one is ok for
> >> >> >> testing), but ultimately we would like to be able to write to that
> >> >> >> cluster as well.
> >> >> >>
> >> >> >> Why Do it ?
> >> >> >> Every storage platform has different characteristics, some are
> ideal
> >> >> >> for extreem volume writes of throw away data, some are ideal for
> >> >> >> extreem volume reads of precious audited transactrional data.
> Being
> >> >> >> able to "mount" multiple stores in Sling enables Sling to
> integrate
> >> >> >> data from all types of sources using best of breed address each
> use
> >> >> >> case. (Thats the theory, anyway :))
> >> >> >>
> >> >> >
> >> >> > +1 and this is a wonderful architecture interms of extensibility.
> >> >> Something
> >> >> > even a repository vendor like Jackrabbit also would want to follow.
> >> >> Because
> >> >> > they only have a JCR interfaced tree.
> >> >> >
> >> >> >
> >> >> >>
> >> >> >> I hope that makes things clearer.
> >> >> >>
> >> >> >> 1 http://sling.apache.org/site/resources.html
> >> >> >>
> >> >> >> >
> >> >> >> > But if it is only to READ resources, this project is relatively
> >> less
> >> >> >> > complex (not quite sure though ;-) ) since what is required is
> to
> >> >> have a
> >> >> >> > JCR/Sling Resource compatible wrapper layer interface on top of
> >> >> Cassendra
> >> >> >> > to read cassandra data.
> >> >> >>
> >> >> >> Initially, just read. Then read with access control. The
> read/write
> >> >> >> with access control.
> >> >> >>
> >> >> >
> >> >> > Read/Write complexity will be more or less the same as I feel.  But
> >> read
> >> >> > write with access control is something we have to discuss
> separately.
> >> >> > Does sling maintaining access control directly with jackrabbit's
> >> >> > javax.jcr.security module ? Or any inhouse access control layer ?
> >> >> >
> >> >> >
> >> >> >
> >> >> >>
> >> >> >> >
> >> >> >> > Appreciate any feedback and guidance on how to proceed.
> >> >> >>
> >> >> >> If you havent already you need to checkout the information at:
> >> >> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> >> >> >> * http://community.apache.org/gsoc.html
> >> >> >>
> >> >> >> especially the timeline and dates.
> >> >> >>
> >> >> >> There is no guarantee that Apache will be a GSoC organisation
> >> >> >> (although its highly likely), and there are currently 129 project
> >> >> >> proposals so there is no guarantee that you will get accepted as a
> >> >> >> Student on this project, but the quality of your submission and
> your
> >> >> >> enthusiasm will go a long way to making that happen.
> >> >> >>
> >> >> >> Good luck and I look forward to seeing you on these lists over the
> >> >> >> summer. If you do make it through, I and everyone in this
> community
> >> >> >> will try and make it fun and rewarding for you.
> >> >> >>
> >> >> >> Best Regards
> >> >> >> Ian
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> >
> >> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> >> >> >> >
> >> >> >> > --
> >> >> >> > Thanks
> >> >> >> > /Dishara
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Thanks
> >> >> > /Dishara
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks
> >> > /Dishara
> >>
> >
> >
> >
> > --
> > Thanks
> > /Dishara
> >
>
>
>
> --
> Thanks
> /Dishara
>

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian,

In Sling, are we going to ship native Cassandra instance with the sling
binary pack? ( is there already a native cassandra server starting at sling
server start up ?)
I am willing to use hector API to deal with Cassandra, as in most of
 occasions around . Please let me know if there is any concerns on that
aspect ?


On Thu, Apr 4, 2013 at 1:04 AM, Dishara Wijewardana <ddwijewardana@gmail.com
> wrote:

> Hi Ian,
>
> On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>
>> On 2 April 2013 07:55, Dishara Wijewardana <dd...@gmail.com>
>> wrote:
>> > Hi Ian,
>> > Thanks for the explanation. Really helped me to get several stuff
>> cleared.
>> >
>> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>> >
>> >> Hi Dishara,
>> >>
>> >> You should not think about implementing the JCR API classes
>> >> (javax.jcr.*). You should think about implementing the Resource
>> >> API[1]. When you need to perform something that the ResourceAPI doesnt
>> >> support (say in a servlet), then you can use the
>> >> Resource.adapTo(Class<?> clazz) method to adapt the resource into a
>> >> class that supports that operation.
>> >>
>> >
>> > Interesting.!! . If I got you correctly "adapTo" concept used to achieve
>> > *kind of* dynamic multiple inheritance rather than extending a heavy
>> > abstract class. if that is so, this is a wonderful idea and I really
>> like
>> > the concept.
>>
>> Calling it inheritance might be going too far as the class isn't
>> necessarily the same, but in essence, yes.
>>
>> >
>> >
>> >>
>> >> eg:
>> >> The properties of the resource are exposed via ResourceMetadata [2],
>> >> but lets say you want to find the underlying Cassandra object to copy
>> >> it and create a child.
>> >>
>> >> So: CassandraResource implements Resource, which is what is returned
>> >> when the CassandraResourceProvider resolves a Resource. A client
>> >> should not bind to CassandraResource or mention it, since its almost
>> >> certainly an implementation and not an API. However, the Cassandra
>> >> bundle you have written also implements CassandraContent which has
>> >> CassandraContent.copy(String copyLocation) and
>> >> CassandraContent.createChild(String childName).
>> >
>> > To get to this you would do
>> >> CassandraResource.adaptTo(CassandraContent.class)
>> >> BTW, CassandraContent.class is an API exported by your bundle.
>> >>
>> >
>> > If I got you correctly,
>> >  after CassandraResource.adaptTo(CassandraContent.class) I should be
>> able
>> > to call
>> > CassandraResource.copy(String copyLocation)
>> > and CassandraResource.createChild(String childName).
>> >
>> > Then I will have to write an "Adaptable" class to
>> > facilitate CassandraResource to deal with its corresponding cassandra
>> > nodes.
>> > In that sense I feel the best way to approach to this project when
>> > implementing is an bottom-up approach. We start from the "Adaptable"
>> class
>> > (given the fact that it should be expanded during implementation) and
>> then
>> > goes to the sling Resource wrapper layer which is CassandraResourceImpl.
>>
>>
>> Resource extends Adaptable, so you dont get much choice there, just
>> implement the resource.
>>
>> >
>> > What do you think ? And may I know the expected scope of this project by
>> > the community (just a potential one, during the implementation we can
>> > expand it as time permits) .i.e
>> > READ,
>> > READ with access control
>> > READ/WRITE with access control and etc.
>> >
>>
>> Yes, thats the idea.
>> It would be nicer to have 4 iterations to fit the GSoC timeline and do
>> 2 before half time, and 2 after. Perhaps the first half can also
>
> include spinning up Cassandra, getting client APIs working and getting
>> fully upto speed with that area of Sling.
>>
>
> +1 . Will make in to four iteration (generally 2 before midterm and 2
> after mid term) and will include getting client API working for Cassandra
> and related sling stuff as a part of first two iterations (which means
> before mid term ). And to meet deadlines, should target more to be
> completed before mid term compared to the work scheduled after the mid
> term. Will make it count in project proposal time line schedule. And thank
> you for the aforementioned feedback so that I can provide a solid proposal
> in this year as well.
> Will post as soon as when I got update. Meanwhile I will build sling and
> getting familiar with the code base with the help of the sling
> documentation.
>
>
>>
>>
>> Ian
>> >
>> >> I hope that gives you an idea of how a CassandraResourceProvider and
>> >> associated implementation should work. If you havent already, and are
>> >> still interested you should read up on how Sling and OSGi works.
>> >> Trying the "Sling in 15 minutes"[3] is a good place to start. And then
>> >> reading everything you can about Declarative Services in OSGi. The 2
>> >> key things you are going to need to understand is how OSGi bundles
>> >> import and export packages and then how Declarative, declare services
>> >> that they depend on and declare services they implement, [4] is a
>> >> bunch of links.
>> >>
>> >
>> > Yes, I will go through the mentioned links. Specially like [3] which I
>> have
>> > not yet gone through. I also have some experience in using OSGi
>> importing
>> > exporting packages and using maven scr plugin in classes with "bind"
>> > "unbind" attributes to register and unregister OSGi services and etc.
>> >
>> >
>> >> HTH
>> >> Ian
>> >>
>> >>
>> >> 1
>> >>
>> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
>> >> 2
>> >>
>> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
>> >> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
>> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
>> >>
>> >>
>> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
>> >>
>> >>
>> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
>> >>
>> >> On 31 March 2013 21:58, Dishara Wijewardana <dd...@gmail.com>
>> >> wrote:
>> >> > Hi Ian,
>> >> > Thank you very much for the explanation. Before replying to this
>> mail, I
>> >> > revisited the facts you mentioned and try to comeup with a end to
>> end big
>> >> > picture and what are the challenges that has to face when
>> implementing
>> >> this
>> >> > project.
>> >> >
>> >> > Read/write with Cassandra data seems is pretty straight forward with
>> few
>> >> > lines of code using a client API. But the tricky part is to make a
>> clean
>> >> > bridge between JCR wrapped sling resource API vs Cassendra column
>> family
>> >> > data storage. So I took some time and went through the JCR spec and
>> try
>> >> to
>> >> > understand how it deals with resources (I assumed sling resource is
>> >> > directly based on JCR node concept). And got a good understanding of
>> how
>> >> > JCR thinks on resource and how they deal with it.
>> >> >
>> >> > Because we need to think of the mapping between the sling wrapper
>> >> interface
>> >> > for resources which is  org.apache.sling.api.resource.Resource
>> (which is
>> >> a
>> >> > JCR Node as I understand) and the Cassendra data layer. For instance
>> >> > Cassandra provider will return a sling resource and it should be
>> enrich
>> >> > with the properties/attributes which helps the sling resource to
>> keep its
>> >> > state like resource meta data, resource type (which should be the JCR
>> >> node
>> >> > type),  and etc.
>> >> >
>> >> > And the provider should only return a resource which only has such
>> very
>> >> > basic meta data. For instance, like
>> >>  org.apache.sling.api.resource.Resource
>> >> > #getChild() #getChildren() we should not keep those in memory. We
>> should
>> >> > return them on  the fly from Cassandra.
>> >> >
>> >> > I think we should write a separate Sling Cassandra Adapter layer and
>> >> > provider should talk to Cassandra through Cassandra Adapter. I hope
>> this
>> >> > will make it more cleaner.
>> >> > Appreciate your valuable feedback. So that based on feedback I can
>> >> provide
>> >> > a patch which will reflect the basic architecture and keep on
>> patching
>> >> with
>> >> > future additions.
>> >> >
>> >> >
>> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>> >> >
>> >> >> Hi and welcome,
>> >> >> Some comments inline below.
>> >> >>
>> >> >> On 29 March 2013 06:02, Dishara Wijewardana <
>> ddwijewardana@gmail.com>
>> >> >> wrote:
>> >> >> > Hi all,
>> >> >> > I am Dishara Wijewardana, a student who is willing to take part in
>> >> this
>> >> >> > GSoC 2013 .
>> >> >> >
>> >> >> > I have successfully completed GSoC 2012 in Apache Velocity and
>> there I
>> >> >> have
>> >> >> > implemented JSR 223 support for Velocity. I found myself really
>> >> >> interested
>> >> >> > in this project since it covers very useful and interesting
>> topics. So
>> >> >> > thought of getting in to this project idea and provide a good
>> proposal
>> >> >> for
>> >> >> > this project.
>> >> >> >
>> >> >> > So I did some research around sling which might be useful for me
>> to
>> >> get
>> >> >> in
>> >> >> > to this project. I like sling as it sticks to community standards
>> >> where
>> >> >> it
>> >> >> > uses a standard JCR2 repository to store resources which is a
>> really
>> >> good
>> >> >> > thing to have.
>> >> >> >
>> >> >> > I went through the information provided in the JIRA[1] and
>> according
>> >> to
>> >> >> > that at the end of this project what is expected to have
>> implemented
>> >> is a
>> >> >> > ResourceProvider for Sling which tunnels with a Cassandra
>> (standalone
>> >> >> > one/cluster).
>> >> >>
>> >> >> yes, correct.
>> >> >>
>> >> >> >
>> >> >> > As far as I got to know, sling directly calls to Apache JackRabbit
>> >> APIs
>> >> >> > (JCR APIs) to store resources. So I found a bit complicated this
>> >> project
>> >> >> > idea in that sense. Because if we are to implement a Cassandra
>> backend
>> >> >> for
>> >> >> > Sling (as per this proposal), and Sling storage is on top of
>> >> JackRabbit,
>> >> >> > ideally what should happen is to make JackRabbit capable of using
>> >> >> Cassandra
>> >> >> > as its resource persistent layer, and configure it through Sling ?
>> >> Please
>> >> >> > correct me If I am wrong.
>> >> >>
>> >> >> Your right.
>> >> >> The idea is this, Sling resolves paths into Resources
>> >> >> ie /content/mywebsite/page1.html is resolved to a Resource with a
>> path
>> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR repository
>> >> >> takes ownership of everything under /, so all Resources are JCR
>> >> >> Resources.
>> >> >>
>> >> >> However, with a ResourceProvider its possible to "mount" a
>> alternative
>> >> >> source of Resources at any location in the tree. eg:
>> >> >> If I create a ResourceProvider and configure it to respond to all
>> >> >> resource resolution operations at
>> >> >> /content/cassandra
>> >> >>
>> >> >> then
>> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
>> >> >>
>> >> >> will generate a Cassandra Resource instead of a JCR Resource.
>> >> >>
>> >> >> Initially the aim is to write a ResourceProvider that will allow
>> >> >> Readonly access to a Cassandra cluster (cluster of one is ok for
>> >> >> testing), but ultimately we would like to be able to write to that
>> >> >> cluster as well.
>> >> >>
>> >> >> Why Do it ?
>> >> >> Every storage platform has different characteristics, some are ideal
>> >> >> for extreem volume writes of throw away data, some are ideal for
>> >> >> extreem volume reads of precious audited transactrional data. Being
>> >> >> able to "mount" multiple stores in Sling enables Sling to integrate
>> >> >> data from all types of sources using best of breed address each use
>> >> >> case. (Thats the theory, anyway :))
>> >> >>
>> >> >
>> >> > +1 and this is a wonderful architecture interms of extensibility.
>> >> Something
>> >> > even a repository vendor like Jackrabbit also would want to follow.
>> >> Because
>> >> > they only have a JCR interfaced tree.
>> >> >
>> >> >
>> >> >>
>> >> >> I hope that makes things clearer.
>> >> >>
>> >> >> 1 http://sling.apache.org/site/resources.html
>> >> >>
>> >> >> >
>> >> >> > But if it is only to READ resources, this project is relatively
>> less
>> >> >> > complex (not quite sure though ;-) ) since what is required is to
>> >> have a
>> >> >> > JCR/Sling Resource compatible wrapper layer interface on top of
>> >> Cassendra
>> >> >> > to read cassandra data.
>> >> >>
>> >> >> Initially, just read. Then read with access control. The read/write
>> >> >> with access control.
>> >> >>
>> >> >
>> >> > Read/Write complexity will be more or less the same as I feel.  But
>> read
>> >> > write with access control is something we have to discuss separately.
>> >> > Does sling maintaining access control directly with jackrabbit's
>> >> > javax.jcr.security module ? Or any inhouse access control layer ?
>> >> >
>> >> >
>> >> >
>> >> >>
>> >> >> >
>> >> >> > Appreciate any feedback and guidance on how to proceed.
>> >> >>
>> >> >> If you havent already you need to checkout the information at:
>> >> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
>> >> >> * http://community.apache.org/gsoc.html
>> >> >>
>> >> >> especially the timeline and dates.
>> >> >>
>> >> >> There is no guarantee that Apache will be a GSoC organisation
>> >> >> (although its highly likely), and there are currently 129 project
>> >> >> proposals so there is no guarantee that you will get accepted as a
>> >> >> Student on this project, but the quality of your submission and your
>> >> >> enthusiasm will go a long way to making that happen.
>> >> >>
>> >> >> Good luck and I look forward to seeing you on these lists over the
>> >> >> summer. If you do make it through, I and everyone in this community
>> >> >> will try and make it fun and rewarding for you.
>> >> >>
>> >> >> Best Regards
>> >> >> Ian
>> >> >>
>> >> >>
>> >> >>
>> >> >> >
>> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
>> >> >> >
>> >> >> > --
>> >> >> > Thanks
>> >> >> > /Dishara
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Thanks
>> >> > /Dishara
>> >>
>> >
>> >
>> >
>> > --
>> > Thanks
>> > /Dishara
>>
>
>
>
> --
> Thanks
> /Dishara
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian,

On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <ie...@tfd.co.uk> wrote:

> On 2 April 2013 07:55, Dishara Wijewardana <dd...@gmail.com>
> wrote:
> > Hi Ian,
> > Thanks for the explanation. Really helped me to get several stuff
> cleared.
> >
> > On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> >> Hi Dishara,
> >>
> >> You should not think about implementing the JCR API classes
> >> (javax.jcr.*). You should think about implementing the Resource
> >> API[1]. When you need to perform something that the ResourceAPI doesnt
> >> support (say in a servlet), then you can use the
> >> Resource.adapTo(Class<?> clazz) method to adapt the resource into a
> >> class that supports that operation.
> >>
> >
> > Interesting.!! . If I got you correctly "adapTo" concept used to achieve
> > *kind of* dynamic multiple inheritance rather than extending a heavy
> > abstract class. if that is so, this is a wonderful idea and I really like
> > the concept.
>
> Calling it inheritance might be going too far as the class isn't
> necessarily the same, but in essence, yes.
>
> >
> >
> >>
> >> eg:
> >> The properties of the resource are exposed via ResourceMetadata [2],
> >> but lets say you want to find the underlying Cassandra object to copy
> >> it and create a child.
> >>
> >> So: CassandraResource implements Resource, which is what is returned
> >> when the CassandraResourceProvider resolves a Resource. A client
> >> should not bind to CassandraResource or mention it, since its almost
> >> certainly an implementation and not an API. However, the Cassandra
> >> bundle you have written also implements CassandraContent which has
> >> CassandraContent.copy(String copyLocation) and
> >> CassandraContent.createChild(String childName).
> >
> > To get to this you would do
> >> CassandraResource.adaptTo(CassandraContent.class)
> >> BTW, CassandraContent.class is an API exported by your bundle.
> >>
> >
> > If I got you correctly,
> >  after CassandraResource.adaptTo(CassandraContent.class) I should be able
> > to call
> > CassandraResource.copy(String copyLocation)
> > and CassandraResource.createChild(String childName).
> >
> > Then I will have to write an "Adaptable" class to
> > facilitate CassandraResource to deal with its corresponding cassandra
> > nodes.
> > In that sense I feel the best way to approach to this project when
> > implementing is an bottom-up approach. We start from the "Adaptable"
> class
> > (given the fact that it should be expanded during implementation) and
> then
> > goes to the sling Resource wrapper layer which is CassandraResourceImpl.
>
>
> Resource extends Adaptable, so you dont get much choice there, just
> implement the resource.
>
> >
> > What do you think ? And may I know the expected scope of this project by
> > the community (just a potential one, during the implementation we can
> > expand it as time permits) .i.e
> > READ,
> > READ with access control
> > READ/WRITE with access control and etc.
> >
>
> Yes, thats the idea.
> It would be nicer to have 4 iterations to fit the GSoC timeline and do
> 2 before half time, and 2 after. Perhaps the first half can also

include spinning up Cassandra, getting client APIs working and getting
> fully upto speed with that area of Sling.
>

+1 . Will make in to four iteration (generally 2 before midterm and 2 after
mid term) and will include getting client API working for Cassandra and
related sling stuff as a part of first two iterations (which means before
mid term ). And to meet deadlines, should target more to be completed
before mid term compared to the work scheduled after the mid term. Will
make it count in project proposal time line schedule. And thank you for the
aforementioned feedback so that I can provide a solid proposal in this year
as well.
Will post as soon as when I got update. Meanwhile I will build sling and
getting familiar with the code base with the help of the sling
documentation.


>
>
> Ian
> >
> >> I hope that gives you an idea of how a CassandraResourceProvider and
> >> associated implementation should work. If you havent already, and are
> >> still interested you should read up on how Sling and OSGi works.
> >> Trying the "Sling in 15 minutes"[3] is a good place to start. And then
> >> reading everything you can about Declarative Services in OSGi. The 2
> >> key things you are going to need to understand is how OSGi bundles
> >> import and export packages and then how Declarative, declare services
> >> that they depend on and declare services they implement, [4] is a
> >> bunch of links.
> >>
> >
> > Yes, I will go through the mentioned links. Specially like [3] which I
> have
> > not yet gone through. I also have some experience in using OSGi importing
> > exporting packages and using maven scr plugin in classes with "bind"
> > "unbind" attributes to register and unregister OSGi services and etc.
> >
> >
> >> HTH
> >> Ian
> >>
> >>
> >> 1
> >>
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> >> 2
> >>
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> >> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
> >> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
> >>
> >>
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
> >>
> >>
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
> >>
> >> On 31 March 2013 21:58, Dishara Wijewardana <dd...@gmail.com>
> >> wrote:
> >> > Hi Ian,
> >> > Thank you very much for the explanation. Before replying to this
> mail, I
> >> > revisited the facts you mentioned and try to comeup with a end to end
> big
> >> > picture and what are the challenges that has to face when implementing
> >> this
> >> > project.
> >> >
> >> > Read/write with Cassandra data seems is pretty straight forward with
> few
> >> > lines of code using a client API. But the tricky part is to make a
> clean
> >> > bridge between JCR wrapped sling resource API vs Cassendra column
> family
> >> > data storage. So I took some time and went through the JCR spec and
> try
> >> to
> >> > understand how it deals with resources (I assumed sling resource is
> >> > directly based on JCR node concept). And got a good understanding of
> how
> >> > JCR thinks on resource and how they deal with it.
> >> >
> >> > Because we need to think of the mapping between the sling wrapper
> >> interface
> >> > for resources which is  org.apache.sling.api.resource.Resource (which
> is
> >> a
> >> > JCR Node as I understand) and the Cassendra data layer. For instance
> >> > Cassandra provider will return a sling resource and it should be
> enrich
> >> > with the properties/attributes which helps the sling resource to keep
> its
> >> > state like resource meta data, resource type (which should be the JCR
> >> node
> >> > type),  and etc.
> >> >
> >> > And the provider should only return a resource which only has such
> very
> >> > basic meta data. For instance, like
> >>  org.apache.sling.api.resource.Resource
> >> > #getChild() #getChildren() we should not keep those in memory. We
> should
> >> > return them on  the fly from Cassandra.
> >> >
> >> > I think we should write a separate Sling Cassandra Adapter layer and
> >> > provider should talk to Cassandra through Cassandra Adapter. I hope
> this
> >> > will make it more cleaner.
> >> > Appreciate your valuable feedback. So that based on feedback I can
> >> provide
> >> > a patch which will reflect the basic architecture and keep on patching
> >> with
> >> > future additions.
> >> >
> >> >
> >> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >> >
> >> >> Hi and welcome,
> >> >> Some comments inline below.
> >> >>
> >> >> On 29 March 2013 06:02, Dishara Wijewardana <ddwijewardana@gmail.com
> >
> >> >> wrote:
> >> >> > Hi all,
> >> >> > I am Dishara Wijewardana, a student who is willing to take part in
> >> this
> >> >> > GSoC 2013 .
> >> >> >
> >> >> > I have successfully completed GSoC 2012 in Apache Velocity and
> there I
> >> >> have
> >> >> > implemented JSR 223 support for Velocity. I found myself really
> >> >> interested
> >> >> > in this project since it covers very useful and interesting
> topics. So
> >> >> > thought of getting in to this project idea and provide a good
> proposal
> >> >> for
> >> >> > this project.
> >> >> >
> >> >> > So I did some research around sling which might be useful for me to
> >> get
> >> >> in
> >> >> > to this project. I like sling as it sticks to community standards
> >> where
> >> >> it
> >> >> > uses a standard JCR2 repository to store resources which is a
> really
> >> good
> >> >> > thing to have.
> >> >> >
> >> >> > I went through the information provided in the JIRA[1] and
> according
> >> to
> >> >> > that at the end of this project what is expected to have
> implemented
> >> is a
> >> >> > ResourceProvider for Sling which tunnels with a Cassandra
> (standalone
> >> >> > one/cluster).
> >> >>
> >> >> yes, correct.
> >> >>
> >> >> >
> >> >> > As far as I got to know, sling directly calls to Apache JackRabbit
> >> APIs
> >> >> > (JCR APIs) to store resources. So I found a bit complicated this
> >> project
> >> >> > idea in that sense. Because if we are to implement a Cassandra
> backend
> >> >> for
> >> >> > Sling (as per this proposal), and Sling storage is on top of
> >> JackRabbit,
> >> >> > ideally what should happen is to make JackRabbit capable of using
> >> >> Cassandra
> >> >> > as its resource persistent layer, and configure it through Sling ?
> >> Please
> >> >> > correct me If I am wrong.
> >> >>
> >> >> Your right.
> >> >> The idea is this, Sling resolves paths into Resources
> >> >> ie /content/mywebsite/page1.html is resolved to a Resource with a
> path
> >> >> of   /content/mywebsite/page1  See [1]. Normally a JCR repository
> >> >> takes ownership of everything under /, so all Resources are JCR
> >> >> Resources.
> >> >>
> >> >> However, with a ResourceProvider its possible to "mount" a
> alternative
> >> >> source of Resources at any location in the tree. eg:
> >> >> If I create a ResourceProvider and configure it to respond to all
> >> >> resource resolution operations at
> >> >> /content/cassandra
> >> >>
> >> >> then
> >> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> >> >>
> >> >> will generate a Cassandra Resource instead of a JCR Resource.
> >> >>
> >> >> Initially the aim is to write a ResourceProvider that will allow
> >> >> Readonly access to a Cassandra cluster (cluster of one is ok for
> >> >> testing), but ultimately we would like to be able to write to that
> >> >> cluster as well.
> >> >>
> >> >> Why Do it ?
> >> >> Every storage platform has different characteristics, some are ideal
> >> >> for extreem volume writes of throw away data, some are ideal for
> >> >> extreem volume reads of precious audited transactrional data. Being
> >> >> able to "mount" multiple stores in Sling enables Sling to integrate
> >> >> data from all types of sources using best of breed address each use
> >> >> case. (Thats the theory, anyway :))
> >> >>
> >> >
> >> > +1 and this is a wonderful architecture interms of extensibility.
> >> Something
> >> > even a repository vendor like Jackrabbit also would want to follow.
> >> Because
> >> > they only have a JCR interfaced tree.
> >> >
> >> >
> >> >>
> >> >> I hope that makes things clearer.
> >> >>
> >> >> 1 http://sling.apache.org/site/resources.html
> >> >>
> >> >> >
> >> >> > But if it is only to READ resources, this project is relatively
> less
> >> >> > complex (not quite sure though ;-) ) since what is required is to
> >> have a
> >> >> > JCR/Sling Resource compatible wrapper layer interface on top of
> >> Cassendra
> >> >> > to read cassandra data.
> >> >>
> >> >> Initially, just read. Then read with access control. The read/write
> >> >> with access control.
> >> >>
> >> >
> >> > Read/Write complexity will be more or less the same as I feel.  But
> read
> >> > write with access control is something we have to discuss separately.
> >> > Does sling maintaining access control directly with jackrabbit's
> >> > javax.jcr.security module ? Or any inhouse access control layer ?
> >> >
> >> >
> >> >
> >> >>
> >> >> >
> >> >> > Appreciate any feedback and guidance on how to proceed.
> >> >>
> >> >> If you havent already you need to checkout the information at:
> >> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> >> >> * http://community.apache.org/gsoc.html
> >> >>
> >> >> especially the timeline and dates.
> >> >>
> >> >> There is no guarantee that Apache will be a GSoC organisation
> >> >> (although its highly likely), and there are currently 129 project
> >> >> proposals so there is no guarantee that you will get accepted as a
> >> >> Student on this project, but the quality of your submission and your
> >> >> enthusiasm will go a long way to making that happen.
> >> >>
> >> >> Good luck and I look forward to seeing you on these lists over the
> >> >> summer. If you do make it through, I and everyone in this community
> >> >> will try and make it fun and rewarding for you.
> >> >>
> >> >> Best Regards
> >> >> Ian
> >> >>
> >> >>
> >> >>
> >> >> >
> >> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> >> >> >
> >> >> > --
> >> >> > Thanks
> >> >> > /Dishara
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks
> >> > /Dishara
> >>
> >
> >
> >
> > --
> > Thanks
> > /Dishara
>



-- 
Thanks
/Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Ian Boston <ie...@tfd.co.uk>.
On 2 April 2013 07:55, Dishara Wijewardana <dd...@gmail.com> wrote:
> Hi Ian,
> Thanks for the explanation. Really helped me to get several stuff cleared.
>
> On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>
>> Hi Dishara,
>>
>> You should not think about implementing the JCR API classes
>> (javax.jcr.*). You should think about implementing the Resource
>> API[1]. When you need to perform something that the ResourceAPI doesnt
>> support (say in a servlet), then you can use the
>> Resource.adapTo(Class<?> clazz) method to adapt the resource into a
>> class that supports that operation.
>>
>
> Interesting.!! . If I got you correctly "adapTo" concept used to achieve
> *kind of* dynamic multiple inheritance rather than extending a heavy
> abstract class. if that is so, this is a wonderful idea and I really like
> the concept.

Calling it inheritance might be going too far as the class isn't
necessarily the same, but in essence, yes.

>
>
>>
>> eg:
>> The properties of the resource are exposed via ResourceMetadata [2],
>> but lets say you want to find the underlying Cassandra object to copy
>> it and create a child.
>>
>> So: CassandraResource implements Resource, which is what is returned
>> when the CassandraResourceProvider resolves a Resource. A client
>> should not bind to CassandraResource or mention it, since its almost
>> certainly an implementation and not an API. However, the Cassandra
>> bundle you have written also implements CassandraContent which has
>> CassandraContent.copy(String copyLocation) and
>> CassandraContent.createChild(String childName).
>
> To get to this you would do
>> CassandraResource.adaptTo(CassandraContent.class)
>> BTW, CassandraContent.class is an API exported by your bundle.
>>
>
> If I got you correctly,
>  after CassandraResource.adaptTo(CassandraContent.class) I should be able
> to call
> CassandraResource.copy(String copyLocation)
> and CassandraResource.createChild(String childName).
>
> Then I will have to write an "Adaptable" class to
> facilitate CassandraResource to deal with its corresponding cassandra
> nodes.
> In that sense I feel the best way to approach to this project when
> implementing is an bottom-up approach. We start from the "Adaptable" class
> (given the fact that it should be expanded during implementation) and then
> goes to the sling Resource wrapper layer which is CassandraResourceImpl.


Resource extends Adaptable, so you dont get much choice there, just
implement the resource.

>
> What do you think ? And may I know the expected scope of this project by
> the community (just a potential one, during the implementation we can
> expand it as time permits) .i.e
> READ,
> READ with access control
> READ/WRITE with access control and etc.
>

Yes, thats the idea.
It would be nicer to have 4 iterations to fit the GSoC timeline and do
2 before half time, and 2 after. Perhaps the first half can also
include spinning up Cassandra, getting client APIs working and getting
fully upto speed with that area of Sling.


Ian
>
>> I hope that gives you an idea of how a CassandraResourceProvider and
>> associated implementation should work. If you havent already, and are
>> still interested you should read up on how Sling and OSGi works.
>> Trying the "Sling in 15 minutes"[3] is a good place to start. And then
>> reading everything you can about Declarative Services in OSGi. The 2
>> key things you are going to need to understand is how OSGi bundles
>> import and export packages and then how Declarative, declare services
>> that they depend on and declare services they implement, [4] is a
>> bunch of links.
>>
>
> Yes, I will go through the mentioned links. Specially like [3] which I have
> not yet gone through. I also have some experience in using OSGi importing
> exporting packages and using maven scr plugin in classes with "bind"
> "unbind" attributes to register and unregister OSGi services and etc.
>
>
>> HTH
>> Ian
>>
>>
>> 1
>> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
>> 2
>> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
>> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
>> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
>>
>> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
>>
>> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
>>
>> On 31 March 2013 21:58, Dishara Wijewardana <dd...@gmail.com>
>> wrote:
>> > Hi Ian,
>> > Thank you very much for the explanation. Before replying to this mail, I
>> > revisited the facts you mentioned and try to comeup with a end to end big
>> > picture and what are the challenges that has to face when implementing
>> this
>> > project.
>> >
>> > Read/write with Cassandra data seems is pretty straight forward with few
>> > lines of code using a client API. But the tricky part is to make a clean
>> > bridge between JCR wrapped sling resource API vs Cassendra column family
>> > data storage. So I took some time and went through the JCR spec and try
>> to
>> > understand how it deals with resources (I assumed sling resource is
>> > directly based on JCR node concept). And got a good understanding of how
>> > JCR thinks on resource and how they deal with it.
>> >
>> > Because we need to think of the mapping between the sling wrapper
>> interface
>> > for resources which is  org.apache.sling.api.resource.Resource (which is
>> a
>> > JCR Node as I understand) and the Cassendra data layer. For instance
>> > Cassandra provider will return a sling resource and it should be enrich
>> > with the properties/attributes which helps the sling resource to keep its
>> > state like resource meta data, resource type (which should be the JCR
>> node
>> > type),  and etc.
>> >
>> > And the provider should only return a resource which only has such very
>> > basic meta data. For instance, like
>>  org.apache.sling.api.resource.Resource
>> > #getChild() #getChildren() we should not keep those in memory. We should
>> > return them on  the fly from Cassandra.
>> >
>> > I think we should write a separate Sling Cassandra Adapter layer and
>> > provider should talk to Cassandra through Cassandra Adapter. I hope this
>> > will make it more cleaner.
>> > Appreciate your valuable feedback. So that based on feedback I can
>> provide
>> > a patch which will reflect the basic architecture and keep on patching
>> with
>> > future additions.
>> >
>> >
>> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk> wrote:
>> >
>> >> Hi and welcome,
>> >> Some comments inline below.
>> >>
>> >> On 29 March 2013 06:02, Dishara Wijewardana <dd...@gmail.com>
>> >> wrote:
>> >> > Hi all,
>> >> > I am Dishara Wijewardana, a student who is willing to take part in
>> this
>> >> > GSoC 2013 .
>> >> >
>> >> > I have successfully completed GSoC 2012 in Apache Velocity and there I
>> >> have
>> >> > implemented JSR 223 support for Velocity. I found myself really
>> >> interested
>> >> > in this project since it covers very useful and interesting topics. So
>> >> > thought of getting in to this project idea and provide a good proposal
>> >> for
>> >> > this project.
>> >> >
>> >> > So I did some research around sling which might be useful for me to
>> get
>> >> in
>> >> > to this project. I like sling as it sticks to community standards
>> where
>> >> it
>> >> > uses a standard JCR2 repository to store resources which is a really
>> good
>> >> > thing to have.
>> >> >
>> >> > I went through the information provided in the JIRA[1] and according
>> to
>> >> > that at the end of this project what is expected to have implemented
>> is a
>> >> > ResourceProvider for Sling which tunnels with a Cassandra (standalone
>> >> > one/cluster).
>> >>
>> >> yes, correct.
>> >>
>> >> >
>> >> > As far as I got to know, sling directly calls to Apache JackRabbit
>> APIs
>> >> > (JCR APIs) to store resources. So I found a bit complicated this
>> project
>> >> > idea in that sense. Because if we are to implement a Cassandra backend
>> >> for
>> >> > Sling (as per this proposal), and Sling storage is on top of
>> JackRabbit,
>> >> > ideally what should happen is to make JackRabbit capable of using
>> >> Cassandra
>> >> > as its resource persistent layer, and configure it through Sling ?
>> Please
>> >> > correct me If I am wrong.
>> >>
>> >> Your right.
>> >> The idea is this, Sling resolves paths into Resources
>> >> ie /content/mywebsite/page1.html is resolved to a Resource with a path
>> >> of   /content/mywebsite/page1  See [1]. Normally a JCR repository
>> >> takes ownership of everything under /, so all Resources are JCR
>> >> Resources.
>> >>
>> >> However, with a ResourceProvider its possible to "mount" a alternative
>> >> source of Resources at any location in the tree. eg:
>> >> If I create a ResourceProvider and configure it to respond to all
>> >> resource resolution operations at
>> >> /content/cassandra
>> >>
>> >> then
>> >> /content/cassandra/columnFamilyA/cassandraRowIDB
>> >>
>> >> will generate a Cassandra Resource instead of a JCR Resource.
>> >>
>> >> Initially the aim is to write a ResourceProvider that will allow
>> >> Readonly access to a Cassandra cluster (cluster of one is ok for
>> >> testing), but ultimately we would like to be able to write to that
>> >> cluster as well.
>> >>
>> >> Why Do it ?
>> >> Every storage platform has different characteristics, some are ideal
>> >> for extreem volume writes of throw away data, some are ideal for
>> >> extreem volume reads of precious audited transactrional data. Being
>> >> able to "mount" multiple stores in Sling enables Sling to integrate
>> >> data from all types of sources using best of breed address each use
>> >> case. (Thats the theory, anyway :))
>> >>
>> >
>> > +1 and this is a wonderful architecture interms of extensibility.
>> Something
>> > even a repository vendor like Jackrabbit also would want to follow.
>> Because
>> > they only have a JCR interfaced tree.
>> >
>> >
>> >>
>> >> I hope that makes things clearer.
>> >>
>> >> 1 http://sling.apache.org/site/resources.html
>> >>
>> >> >
>> >> > But if it is only to READ resources, this project is relatively less
>> >> > complex (not quite sure though ;-) ) since what is required is to
>> have a
>> >> > JCR/Sling Resource compatible wrapper layer interface on top of
>> Cassendra
>> >> > to read cassandra data.
>> >>
>> >> Initially, just read. Then read with access control. The read/write
>> >> with access control.
>> >>
>> >
>> > Read/Write complexity will be more or less the same as I feel.  But read
>> > write with access control is something we have to discuss separately.
>> > Does sling maintaining access control directly with jackrabbit's
>> > javax.jcr.security module ? Or any inhouse access control layer ?
>> >
>> >
>> >
>> >>
>> >> >
>> >> > Appreciate any feedback and guidance on how to proceed.
>> >>
>> >> If you havent already you need to checkout the information at:
>> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
>> >> * http://community.apache.org/gsoc.html
>> >>
>> >> especially the timeline and dates.
>> >>
>> >> There is no guarantee that Apache will be a GSoC organisation
>> >> (although its highly likely), and there are currently 129 project
>> >> proposals so there is no guarantee that you will get accepted as a
>> >> Student on this project, but the quality of your submission and your
>> >> enthusiasm will go a long way to making that happen.
>> >>
>> >> Good luck and I look forward to seeing you on these lists over the
>> >> summer. If you do make it through, I and everyone in this community
>> >> will try and make it fun and rewarding for you.
>> >>
>> >> Best Regards
>> >> Ian
>> >>
>> >>
>> >>
>> >> >
>> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
>> >> >
>> >> > --
>> >> > Thanks
>> >> > /Dishara
>> >>
>> >
>> >
>> >
>> > --
>> > Thanks
>> > /Dishara
>>
>
>
>
> --
> Thanks
> /Dishara

Re: Apache Cassandra backend for Sling: GSoC2013 Project

Posted by Dishara Wijewardana <dd...@gmail.com>.
Hi Ian,
Thanks for the explanation. Really helped me to get several stuff cleared.

On Mon, Apr 1, 2013 at 7:57 AM, Ian Boston <ie...@tfd.co.uk> wrote:

> Hi Dishara,
>
> You should not think about implementing the JCR API classes
> (javax.jcr.*). You should think about implementing the Resource
> API[1]. When you need to perform something that the ResourceAPI doesnt
> support (say in a servlet), then you can use the
> Resource.adapTo(Class<?> clazz) method to adapt the resource into a
> class that supports that operation.
>

Interesting.!! . If I got you correctly "adapTo" concept used to achieve
*kind of* dynamic multiple inheritance rather than extending a heavy
abstract class. if that is so, this is a wonderful idea and I really like
the concept.


>
> eg:
> The properties of the resource are exposed via ResourceMetadata [2],
> but lets say you want to find the underlying Cassandra object to copy
> it and create a child.
>
> So: CassandraResource implements Resource, which is what is returned
> when the CassandraResourceProvider resolves a Resource. A client
> should not bind to CassandraResource or mention it, since its almost
> certainly an implementation and not an API. However, the Cassandra
> bundle you have written also implements CassandraContent which has
> CassandraContent.copy(String copyLocation) and
> CassandraContent.createChild(String childName).

To get to this you would do
> CassandraResource.adaptTo(CassandraContent.class)
> BTW, CassandraContent.class is an API exported by your bundle.
>

If I got you correctly,
 after CassandraResource.adaptTo(CassandraContent.class) I should be able
to call
CassandraResource.copy(String copyLocation)
and CassandraResource.createChild(String childName).

Then I will have to write an "Adaptable" class to
facilitate CassandraResource to deal with its corresponding cassandra
nodes.
In that sense I feel the best way to approach to this project when
implementing is an bottom-up approach. We start from the "Adaptable" class
(given the fact that it should be expanded during implementation) and then
goes to the sling Resource wrapper layer which is CassandraResourceImpl.

What do you think ? And may I know the expected scope of this project by
the community (just a potential one, during the implementation we can
expand it as time permits) .i.e
READ,
READ with access control
READ/WRITE with access control and etc.


> I hope that gives you an idea of how a CassandraResourceProvider and
> associated implementation should work. If you havent already, and are
> still interested you should read up on how Sling and OSGi works.
> Trying the "Sling in 15 minutes"[3] is a good place to start. And then
> reading everything you can about Declarative Services in OSGi. The 2
> key things you are going to need to understand is how OSGi bundles
> import and export packages and then how Declarative, declare services
> that they depend on and declare services they implement, [4] is a
> bunch of links.
>

Yes, I will go through the mentioned links. Specially like [3] which I have
not yet gone through. I also have some experience in using OSGi importing
exporting packages and using maven scr plugin in classes with "bind"
"unbind" attributes to register and unregister OSGi services and etc.


> HTH
> Ian
>
>
> 1
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/Resource.html
> 2
> http://sling.apache.org/apidocs/sling6/org/apache/sling/api/resource/ResourceMetadata.html
> 3 http://sling.apache.org/site/discover-sling-in-15-minutes.html
> 4 http://www.osgi.org/download/r4v42/r4.cmpn.pdf  (chapter 112)
>
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html
>
> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/extending-scr-annotations.html
>
> On 31 March 2013 21:58, Dishara Wijewardana <dd...@gmail.com>
> wrote:
> > Hi Ian,
> > Thank you very much for the explanation. Before replying to this mail, I
> > revisited the facts you mentioned and try to comeup with a end to end big
> > picture and what are the challenges that has to face when implementing
> this
> > project.
> >
> > Read/write with Cassandra data seems is pretty straight forward with few
> > lines of code using a client API. But the tricky part is to make a clean
> > bridge between JCR wrapped sling resource API vs Cassendra column family
> > data storage. So I took some time and went through the JCR spec and try
> to
> > understand how it deals with resources (I assumed sling resource is
> > directly based on JCR node concept). And got a good understanding of how
> > JCR thinks on resource and how they deal with it.
> >
> > Because we need to think of the mapping between the sling wrapper
> interface
> > for resources which is  org.apache.sling.api.resource.Resource (which is
> a
> > JCR Node as I understand) and the Cassendra data layer. For instance
> > Cassandra provider will return a sling resource and it should be enrich
> > with the properties/attributes which helps the sling resource to keep its
> > state like resource meta data, resource type (which should be the JCR
> node
> > type),  and etc.
> >
> > And the provider should only return a resource which only has such very
> > basic meta data. For instance, like
>  org.apache.sling.api.resource.Resource
> > #getChild() #getChildren() we should not keep those in memory. We should
> > return them on  the fly from Cassandra.
> >
> > I think we should write a separate Sling Cassandra Adapter layer and
> > provider should talk to Cassandra through Cassandra Adapter. I hope this
> > will make it more cleaner.
> > Appreciate your valuable feedback. So that based on feedback I can
> provide
> > a patch which will reflect the basic architecture and keep on patching
> with
> > future additions.
> >
> >
> > On Fri, Mar 29, 2013 at 3:48 AM, Ian Boston <ie...@tfd.co.uk> wrote:
> >
> >> Hi and welcome,
> >> Some comments inline below.
> >>
> >> On 29 March 2013 06:02, Dishara Wijewardana <dd...@gmail.com>
> >> wrote:
> >> > Hi all,
> >> > I am Dishara Wijewardana, a student who is willing to take part in
> this
> >> > GSoC 2013 .
> >> >
> >> > I have successfully completed GSoC 2012 in Apache Velocity and there I
> >> have
> >> > implemented JSR 223 support for Velocity. I found myself really
> >> interested
> >> > in this project since it covers very useful and interesting topics. So
> >> > thought of getting in to this project idea and provide a good proposal
> >> for
> >> > this project.
> >> >
> >> > So I did some research around sling which might be useful for me to
> get
> >> in
> >> > to this project. I like sling as it sticks to community standards
> where
> >> it
> >> > uses a standard JCR2 repository to store resources which is a really
> good
> >> > thing to have.
> >> >
> >> > I went through the information provided in the JIRA[1] and according
> to
> >> > that at the end of this project what is expected to have implemented
> is a
> >> > ResourceProvider for Sling which tunnels with a Cassandra (standalone
> >> > one/cluster).
> >>
> >> yes, correct.
> >>
> >> >
> >> > As far as I got to know, sling directly calls to Apache JackRabbit
> APIs
> >> > (JCR APIs) to store resources. So I found a bit complicated this
> project
> >> > idea in that sense. Because if we are to implement a Cassandra backend
> >> for
> >> > Sling (as per this proposal), and Sling storage is on top of
> JackRabbit,
> >> > ideally what should happen is to make JackRabbit capable of using
> >> Cassandra
> >> > as its resource persistent layer, and configure it through Sling ?
> Please
> >> > correct me If I am wrong.
> >>
> >> Your right.
> >> The idea is this, Sling resolves paths into Resources
> >> ie /content/mywebsite/page1.html is resolved to a Resource with a path
> >> of   /content/mywebsite/page1  See [1]. Normally a JCR repository
> >> takes ownership of everything under /, so all Resources are JCR
> >> Resources.
> >>
> >> However, with a ResourceProvider its possible to "mount" a alternative
> >> source of Resources at any location in the tree. eg:
> >> If I create a ResourceProvider and configure it to respond to all
> >> resource resolution operations at
> >> /content/cassandra
> >>
> >> then
> >> /content/cassandra/columnFamilyA/cassandraRowIDB
> >>
> >> will generate a Cassandra Resource instead of a JCR Resource.
> >>
> >> Initially the aim is to write a ResourceProvider that will allow
> >> Readonly access to a Cassandra cluster (cluster of one is ok for
> >> testing), but ultimately we would like to be able to write to that
> >> cluster as well.
> >>
> >> Why Do it ?
> >> Every storage platform has different characteristics, some are ideal
> >> for extreem volume writes of throw away data, some are ideal for
> >> extreem volume reads of precious audited transactrional data. Being
> >> able to "mount" multiple stores in Sling enables Sling to integrate
> >> data from all types of sources using best of breed address each use
> >> case. (Thats the theory, anyway :))
> >>
> >
> > +1 and this is a wonderful architecture interms of extensibility.
> Something
> > even a repository vendor like Jackrabbit also would want to follow.
> Because
> > they only have a JCR interfaced tree.
> >
> >
> >>
> >> I hope that makes things clearer.
> >>
> >> 1 http://sling.apache.org/site/resources.html
> >>
> >> >
> >> > But if it is only to READ resources, this project is relatively less
> >> > complex (not quite sure though ;-) ) since what is required is to
> have a
> >> > JCR/Sling Resource compatible wrapper layer interface on top of
> Cassendra
> >> > to read cassandra data.
> >>
> >> Initially, just read. Then read with access control. The read/write
> >> with access control.
> >>
> >
> > Read/Write complexity will be more or less the same as I feel.  But read
> > write with access control is something we have to discuss separately.
> > Does sling maintaining access control directly with jackrabbit's
> > javax.jcr.security module ? Or any inhouse access control layer ?
> >
> >
> >
> >>
> >> >
> >> > Appreciate any feedback and guidance on how to proceed.
> >>
> >> If you havent already you need to checkout the information at:
> >> * http://www.google-melange.com/gsoc/homepage/google/gsoc2013
> >> * http://community.apache.org/gsoc.html
> >>
> >> especially the timeline and dates.
> >>
> >> There is no guarantee that Apache will be a GSoC organisation
> >> (although its highly likely), and there are currently 129 project
> >> proposals so there is no guarantee that you will get accepted as a
> >> Student on this project, but the quality of your submission and your
> >> enthusiasm will go a long way to making that happen.
> >>
> >> Good luck and I look forward to seeing you on these lists over the
> >> summer. If you do make it through, I and everyone in this community
> >> will try and make it fun and rewarding for you.
> >>
> >> Best Regards
> >> Ian
> >>
> >>
> >>
> >> >
> >> > [1] - https://issues.apache.org/jira/browse/SLING-2798
> >> >
> >> > --
> >> > Thanks
> >> > /Dishara
> >>
> >
> >
> >
> > --
> > Thanks
> > /Dishara
>



-- 
Thanks
/Dishara