Hi Ian,
OK, I can populate the resource (one row) related data in to the map as you
mention. Also it makes sense to make it dynamic.
I have a question. At what time should I be making it dynamic and
populating data.  i.e when  /content/cassandra/foo is getting called, the
MAP should be pre populated.

i.e I am doing a HTTP call  to a new Node
http://localhost:8080/content/cassandra/pnode10/cnode10.
- So at the moment, the information of /content/cassandra/pnode10/cnode10
not in the Map.
- Before Provider.getResource(/content/cassandra/pnode10/cnode10) getting
called, I have to populate the Map with the key "
/content/cassandra/pnode10/cnode10".
- Question is when I should be doing this ?

- One option is
When Provider.getResource(/content/cassandra/pnode10/cnode10) called, first
thing I should do is check the Map of the existence of the key "
/content/cassandra/pnode10/cnode10" and populate the data. Then proceed
with the rest of the code which will obtain the resource from cassandra and
return the CassandraResource ? Is this OK?

On Thu, Aug 22, 2013 at 12:54 PM, Ian Boston <i...@tfd.co.uk> wrote:

> Hi,
> Ahh sorry, I misunderstood the question.
>
> Initially, when adaptTo(ValueMap.class) is called, just return a small
> static map. In every instance adapTo(ValueMap.class) should return a
> small map with 2 values in it, perhaps the same values every time.
> Which I think you do already so thats cool.
>
> Next, make the map dynamic and load it with the values of a columns
> associated with a row.
>
> IIRC your Cassandra layout is 1 resource per row, the properties of
> the resource as values in the row, the name of each property is the
> name of the column and the value is the value. If thats not your
> Cassandra layout, tell me what is is.
>
>
> eg
>
> Columns: rowid, name, fullpath, lastModfified, lastModifiedBy
> A Row:    232342342, blogpost, blogposts/2011/12/20/blogpost, 12312312312,
> ieb
>
> the map would be
> {
>    rowid: 232342342,
>    name: blogpost,
>    fullpath: blogposts/2011/12/20/blogpost,
>    lastModified: 12312312312,
>    lastModifiedBy: ieb
> }
>
>
>
>
> Best Regards
> Ian
>
> On 22 August 2013 04:36, Dishara Wijewardana <ddwijeward...@gmail.com>
> wrote:
> > Hi Ian,
> > Need a small clarification. May be you have ,misunderstood me. Correct,
> on
> > request, my provider always returns one row. What I meant was, the
> > CASSANDRA_MAP (similar to PLANETS hash map) should be populated 1M
> entries
> > with properties (key/values) prior to read 1M records. So my Map size is
> 1M
> > at that time. Did you got me ?
> >
> > i.e if I want to read
> > http://localhost:8080/content/cassandra/pnode5/cnode5.json , my provider
> > CASSANDRA_MAP should consists with the key
> > "/content/cassandra/pnode5/cnode5" and value with be a ValueMap.
> >
> > So this should be same if I want to insert 1M records.
> >
> >
> > On Tue, Aug 20, 2013 at 12:31 PM, Ian Boston <i...@tfd.co.uk> wrote:
> >
> >> Hi,
> >>
> >> Try adding a .json to the end of the url.
> >> That should cause the json renderer to show you the properties.
> >>
> >> If you have any hierarchical content in Cassandra you can also test
> >> that by specifying the number of levels to show.
> >> Add .2.json
> >>
> >> That will cause the listChildren methods to be called.
> >> There is more information on the Sling tutorial [1]. Try following the
> >> tutorial again to remind yourself how JCR behaves.
> >>
> >> Your ResourceProvider should get a row from Cassandra on request, it
> >> should not get all the rows from Cassandra, so you should never have
> >> all 1M records in memory.
> >>
> >> Ian
> >>
> >>
> >> 1
> >>
> http://sling.apache.org/documentation/getting-started/discover-sling-in-15-minutes.html
> >>
> >>
> >> On 20 August 2013 04:22, Dishara Wijewardana <ddwijeward...@gmail.com>
> >> wrote:
> >> > Hi Ian,
> >> > Thank you very much for the explanation.
> >> > I did the changes and commited it. If you see on CassandraResource and
> >> > CassandraResourceProvider,  you will see I have done similar to Planet
> >> > Resource.  And when I do a
> >> http://localhost:8080/cassandra/pnode1/cnode1/ I
> >> > am not seeing any errors in BE and either nothing get seen on the
> >> browser.
> >> >  It's a  blank page with no errors.
> >> >
> >> > So apparently it seems work. And when I evaluated followings they
> worked
> >> > fine :-). I currently only added "path" property only for the map.
> >> >
> >> >   ValueMap vm =
> >> >
> >>
> resourceResolver.get("/content/cassandra/testitem").adapTo(ValueMap.class);
> >> >     Assert.assertNotNull(vm.get("path"));
> >> >     Assert.assertTrue(((String)vm.get("path")).length()>0);
> >> >
> >> >
> >> > So how should we test 1M record test on top of this  (because I am
> >> getting
> >> > a blank response on the browser) ?. Even in that case I think I have
> to
> >> > populate the Map with 1M records for instance. (Correct me if I am
> >> wrong).
> >> > But if it is the case, this will consume quite a lot of memory to
> keep a
> >> 1M
> >> > size hash map.
> >> > Please advice how to proceed.
> >> >
> >> > Thanks
> >> >
> >> >
> >> > On Mon, Aug 19, 2013 at 1:40 PM, Ian Boston <i...@tfd.co.uk> wrote:
> >> >
> >> >> Hi,
> >> >> Initially, just to verify that you can get the
> >> >> CassandraResourceProvider to work, just take the code from the
> >> >> PlanetProvider and send back a Map with 1 value (eg path).
> >> >>
> >> >> Once you have that working and can perform a get on the resource,
> then
> >> >> you need to populate that map with the values associated with the
> >> >> columns in the Cassandra row that represents the Cassandra resource.
> >> >> To give the data in Cassandra some reality you can get you data
> >> >> population code to add the following columns to every cassandra row.
> >> >>
> >> >> path : the path of the resource
> >> >> created : a long representing the time (System.currentTimeMillis())
> >> >> when the resource was created.
> >> >>
> >> >> when you have done that the following test code should be pass.
> >> >>
> >> >>     ValueMap vm =
> >> >>
> >>
> resourceResolver.get("/content/cassandra/testitem").adapTo(ValueMap.class);
> >> >>     Assert.assertNotNull(vm.get("path"));
> >> >>     Assert.assertTrue(((String)vm.get("path")).length()>0);
> >> >>     Assert.assertNotNull(vm.get("created"));
> >> >>     Assert.assertTrue(((Long)vm.get("path")) <
> >> System.currentTimeMillis());
> >> >>
> >> >> Best Regards
> >> >> Ian
> >> >>
> >> >>
> >> >> On 18 August 2013 22:35, Dishara Wijewardana <
> ddwijeward...@gmail.com>
> >> >> wrote:
> >> >> > Hi Ian ,
> >> >> > Thanks for the clarification.
> >> >> >
> >> >> > Each PlanetResource value map has two predefined properties (keys)
> in
> >> its
> >> >> > Map. "name" and "distance".  I looked in to the code of
> >> >> > PlanetResource/Provider end to end.
> >> >> > I am trying the understand the rationale behind this so that I can
> >> >> > incooperate this to CassandraResource.
> >> >> >
> >> >> > - To obtain a PlanetResource, the implementation always returns a
> >> >> > PlanetResource on the availability of the Map it maintains
> "PLANETS".
> >> >> (can
> >> >> > see in getResource/listResource)
> >> >> > - The content of the planet map ONLY has a Pre-Defined number of
> >> >> > key/values. (some planet names and its distances). Because PLANETS
> map
> >> >> only
> >> >> > populated from the static code block from the provider.
> >> >> > - After server starts the ONLY keys "PLANETS" map have is i.e
> >> >> >  /planets/mercury/
> >> >> > /planets/earth/ and etc. Also for some test there is also
> >> >> > /planets/earth/moon.  And its corresponding PlanetValueMap.
> >> >> >
> >> >> >
> >> >> > - As per current code in planet resource;  if I do a
> >> >> > PlanetResouceProvide#getResource(/planets/myplanet/moon1) this
> returns
> >> >> > NULL. It returns something only when we pass those pre defined
> paths.
> >> i.e
> >> >> >   /planets/mercury/.
> >> >> >
> >> >> > In CassandraResourceProvider I do not refer any map, but rather
> >> directly
> >> >> > deals with the Cassandra DB, after decoding the path to column
> family
> >> >> key.
> >> >> > Is this PlanetResource provider behavior correct ? If so how my
> >> Cassandra
> >> >> > Provider/Resource should map to this? Should I define pre defined
> >> column
> >> >> > families like this.
> >> >> >
> >> >> > Thanks
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > On Sun, Aug 18, 2013 at 1:43 PM, Ian Boston <i...@tfd.co.uk> wrote:
> >> >> >
> >> >> >> Hi,
> >> >> >> The annotations in PlanetResource add OSGi properties and code
> that
> >> >> >> registers the class as adatable from a PlanetResource to a
> ValueMap.
> >> >> >> You need to do the same for CassandraResource. The contents of the
> >> >> >> ValueMap (backed by a Map), should be selected properties of the
> >> >> >> Cassandra row. (ie the names and values of the columns).
> >> >> >>
> >> >> >> Ian
> >> >> >>
> >> >> >> On 17 August 2013 06:16, Dishara Wijewardana <
> >> ddwijeward...@gmail.com>
> >> >> >> wrote:
> >> >> >> > Hi all,
> >> >> >> > Seems the error I have posted is wrong. The above error is
> correct,
> >> >> >> because
> >> >> >> > I am trying to acquire a non existing resource. (I saw in the
> doc,
> >> the
> >> >> >> way
> >> >> >> > jcr resources get resolved, there it defines a resourcePathInfo
> as
> >> >> >> > .html/.json where if you add a node as "/foo/bar") you can view
> the
> >> >> >> content
> >> >> >> > of it through /foo/bar.html or /foo/bar.json.
> >> >> >> >
> >> >> >> > In my case If I do the same, the resource that I have stored is
> >> >> >> > "/content/cassandra/1K/0" , but above NPE comes when I tried *
> >> >> >> > http://localhost:8080/content/cassandra/1K/0.html*. (NOTE: I
> have
> >> >> also
> >> >> >> set
> >> >> >> > resourcePathInfo =.html in resource meta data). I am getting
> >> following
> >> >> >> when
> >> >> >> > I do the correct sample path *
> >> >> >> http://localhost:8080/content/cassandra/1K/0.
> >> >> >> >   *The unsupported exception is thrown by me on resource.adaptTo
> >> >>  since I
> >> >> >> > did not see any requirement of implementing that. Is it
> required to
> >> >> >> > implement adaptTo method ? What does it suppose to do ? ( I
> believe
> >> >> now
> >> >> >> up
> >> >> >> > to this error point, my request has come in the correct path
> >> >> >> > , and this is something I should fix)
> >> >> >> >
> >> >> >> > I checked on PlanetResource impl class. There I found following
> >> which
> >> >> I
> >> >> >> do
> >> >> >> > not have in my CassandraResource class. What these annotations
> >> means ?
> >> >> >> > @Adaptable(adaptableClass=Resource.class, adapters={
> >> >> >> >     @Adapter({ValueMap.class})
> >> >> >> > })  * *
> >> >> >> >
> >> >> >> > Internal Server Error (500)
> >> >> >> >
> >> >> >> > The requested URL /content/cassandra/num4K/0 resulted in an
> error
> >> in
> >> >> >> > org.apache.sling.servlets.get.DefaultGetServlet.
> >> >> >> > Exception:
> >> >> >> >
> >> >> >> > java.lang.UnsupportedOperationException
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.cassandra.resource.provider.CassandraResource.adaptTo(CassandraResource.java:186)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.servlets.get.impl.helpers.HtmlRendererServlet.doGet(HtmlRendererServlet.java:63)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:268)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:344)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:375)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.servlets.get.impl.DefaultGetServlet.doGet(DefaultGetServlet.java:252)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:268)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:344)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:375)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:508)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:261)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.filter.RequestSlingFilterChain.render(RequestSlingFilterChain.java:49)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:64)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter.doFilter(RequestProgressTrackerLogFilter.java:64)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:60)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.SlingRequestProcessorImpl.processRequest(SlingRequestProcessorImpl.java:151)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:207)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:96)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:79)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:42)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:49)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.sling.engine.impl.log.RequestLoggerFilter.doFilter(RequestLoggerFilter.java:75)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:48)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:39)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67)
> >> >> >> >         at
> >> >> javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> >> >> >> >         at
> >> >> >>
> >> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
> >> >> >> >         at
> >> >> >>
> >> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
> >> >> >> >         at
> >> >> >>
> >> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
> >> >> >> >         at
> >> >> >>
> >> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
> >> >> >> >         at
> >> >> >>
> >> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> >> >> >> >         at org.mortbay.jetty.Server.handle(Server.java:326)
> >> >> >> >         at
> >> >> >>
> >> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
> >> >> >> >         at
> >> org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
> >> >> >> >         at
> >> >> >> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
> >> >> >> >         at
> >> >> >> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
> >> >> >> >         at
> >> >> >>
> >> >>
> >>
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> >> >> >> >
> >> >> >> > Request Progress:
> >> >> >> >
> >> >> >> >       0 (2013-08-17 10:25:10) TIMER_START{Request Processing}
> >> >> >> >       0 (2013-08-17 10:25:10) COMMENT timer_end format is
> {<elapsed
> >> >> >> > msec>,<timer name>} <optional message>
> >> >> >> >       0 (2013-08-17 10:25:10) LOG Method=GET,
> >> >> >> > PathInfo=/content/cassandra/num4K/0
> >> >> >> >       0 (2013-08-17 10:25:10) TIMER_START{ResourceResolution}
> >> >> >> >      11 (2013-08-17 10:25:10) TIMER_END{11,ResourceResolution}
> >> >> >> > URI=/content/cassandra/num4K/0 resolves to
> >> >> >> >
> >> >> >>
> >> >>
> >>
> Resource=org.apache.sling.cassandra.resource.provider.CassandraResource@52ecb5eb
> >> >> >> >      17 (2013-08-17 10:25:10) LOG Resource Path Info:
> >> >> >> > SlingRequestPathInfo: path='/content/cassandra/num4K/0',
> >> >> >> > selectorString='null', extension='html', suffix='null'
> >> >> >> >      17 (2013-08-17 10:25:10) TIMER_START{ServletResolution}
> >> >> >> >      17 (2013-08-17 10:25:10)
> >> >> >> >
> >> >> >>
> >> >>
> >>
> TIMER_START{resolveServlet(org.apache.sling.cassandra.resource.provider.CassandraResource@52ecb5eb
> >> >> >> )}
> >> >> >> >      26 (2013-08-17 10:25:10)
> >> >> >> >
> >> >> >>
> >> >>
> >>
> TIMER_END{9,resolveServlet(org.apache.sling.cassandra.resource.provider.CassandraResource@52ecb5eb
> >> >> >> )}
> >> >> >> > Using servlet org.apache.sling.servlets.get.DefaultGetServlet
> >> >> >> >      26 (2013-08-17 10:25:10) TIMER_END{9,ServletResolution}
> >> >> >> > URI=/content/cassandra/num4K/0 handled by
> >> >> >> > Servlet=org.apache.sling.servlets.get.DefaultGetServlet
> >> >> >> >      26 (2013-08-17 10:25:10) LOG Applying Requestfilters
> >> >> >> >      26 (2013-08-17 10:25:10) LOG Calling filter:
> >> >> >> >
> org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
> >> >> >> >      26 (2013-08-17 10:25:10)
> >> >> >> > TIMER_START{org.apache.sling.servlets.get.DefaultGetServlet#0}
> >> >> >> >      29 (2013-08-17 10:25:10) LOG Using
> >> >> >> > org.apache.sling.servlets.get.impl.helpers.HtmlRendererServlet
> to
> >> >> >> > render for extension=html
> >> >> >> >      32 (2013-08-17 10:25:10)
> >> >> >> > TIMER_END{6,org.apache.sling.servlets.get.DefaultGetServlet#0}
> >> >> >> >      33 (2013-08-17 10:25:10)
> >> >> >> >
> >> >> >>
> >> >>
> >>
> TIMER_START{handleError:throwable=java.lang.UnsupportedOperationException}
> >> >> >> >      72 (2013-08-17 10:25:10)
> >> >> >> >
> >> >> >>
> >> >>
> >>
> TIMER_END{39,handleError:throwable=java.lang.UnsupportedOperationException}
> >> >> >> > Using handler
> >> >> >>
> >> >>
> >>
> org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet
> >> >> >> >      73 (2013-08-17 10:25:10) TIMER_END{73,Request Processing}
> >> Dumping
> >> >> >> > SlingRequestProgressTracker Entries
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> > On Fri, Aug 16, 2013 at 11:58 AM, Bertrand Delacretaz <
> >> >> >> > bdelacre...@apache.org> wrote:
> >> >> >> >
> >> >> >> >> On Fri, Aug 16, 2013 at 4:12 AM, Dishara Wijewardana
> >> >> >> >> <ddwijeward...@gmail.com> wrote:
> >> >> >> >> > ...java.lang.NullPointerException
> >> >> >> >> >         at
> >> >> >> >>
> >> >> >>
> >> >>
> >>
> org.apache.sling.servlets.resolver.internal.SlingServletResolver.resolveServlet(SlingServletResolver.java:581)...
> >> >> >> >>
> >> >> >> >> duplicated question...I replied in the other thread.
> >> >> >> >> -Bertrand
> >> >> >> >>
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> > --
> >> >> >> > Thanks
> >> >> >> > /Dishara
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Thanks
> >> >> > /Dishara
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks
> >> > /Dishara
> >>
> >
> >
> >
> > --
> > Thanks
> > /Dishara
>



-- 
Thanks
/Dishara

Reply via email to