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 <[email protected] > wrote: > Hi Ian, > > On Tue, Apr 2, 2013 at 4:44 AM, Ian Boston <[email protected]> wrote: > >> On 2 April 2013 07:55, Dishara Wijewardana <[email protected]> >> 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 <[email protected]> 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 <[email protected]> >> >> 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 <[email protected]> wrote: >> >> > >> >> >> Hi and welcome, >> >> >> Some comments inline below. >> >> >> >> >> >> On 29 March 2013 06:02, Dishara Wijewardana < >> [email protected]> >> >> >> 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
