get resource from session | Community
Skip to main content
shaheenas113483
Level 3
May 8, 2019 8:23 AM UTC
Solved

get resource from session

i made a connection to repository using JCRUtils and got session. Next, I need the resource but, when I am trying to fetch resource using resourceResolver, I am getting null. Whereas, if I use session.getNode, i am getting the node (not null). I also tried to use AdaptManager to convert the node to resource, but I am getting null in this case also.

How do I get the resource from the node? or How do I fetch resource directly from session?

[I need to use valueMap, thus I need resource]

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
aemmarc2Accepted solution
Employee
May 8, 2019 1:24 PM UTC

final ResourceResolver resource_resolver = request.getResourceResolver();

Iterator<Resource> some_it = resource_resolver.findResources("select * from [dam:Asset] as asset", "JCR-SQL2");

some_it.forEachRemaining(object_from_iterator -> {

        Node jcr_node = object_from_iterator.adaptTo(Node.class);

        try {

              String someProperty = jcr_node.getProperty("some:Property").getString();

              jcr_node.getSession().getWorkspace().getObservationManager().setUserData("changedByWorkflowProcess");

              jcr_node.setProperty("some:Property", "some new value");

              logger.info("blah blah made some changes");

              jcr_node.getSession().save();

         }

        catch { ... }

        finally { ... }

}

9 replies

arunpatidar
New Participant
May 9, 2019 8:21 AM UTC

You can adapt resource to ValueMap

Example :

Map<String, Object> paramMap = new HashMap<String, Object>();

paramMap.put("user.jcr.session", session);

resourceResolver = resourceFactory.getResourceResolver(paramMap);

Resource resource=resourceResolver.getResource("/content/AEM64App/en/jcr:content/par/mycomponent");

ValueMap prop = resource.adaptTo(ValueMap.class);

String lastModified = prop.get("jcr:lastModified", String.class);

Translate
Arun Patidar
shaheenas113483
Level 3
May 9, 2019 6:51 AM UTC

yes, I am getting null

Translate
shaheenas113483
Level 3
May 9, 2019 6:49 AM UTC

the requirement is that i make use of value map

Translate
arunpatidar
New Participant
May 8, 2019 1:52 PM UTC

You can get Resource from from jcr session like below:

Map<String, Object> paramMap = new HashMap<String, Object>();

paramMap.put("user.jcr.session", session);

resourceResolver = resourceFactory.getResourceResolver(paramMap);

Resource resource=resourceResolver.getResource("/apps/AEM64App");

where session is JCR Session object

Translate
Arun Patidar
New Participant
Mar 24, 2021 9:28 PM UTC
Shouldn't you close that resourceResolver after the use?
Translate
smacdonald2008
Level 10
May 8, 2019 1:30 PM UTC

WHen using the JCR API - you can get props - as Marc as shown.

Translate
aemmarc2Accepted solution
Employee
May 8, 2019 1:24 PM UTC

final ResourceResolver resource_resolver = request.getResourceResolver();

Iterator<Resource> some_it = resource_resolver.findResources("select * from [dam:Asset] as asset", "JCR-SQL2");

some_it.forEachRemaining(object_from_iterator -> {

        Node jcr_node = object_from_iterator.adaptTo(Node.class);

        try {

              String someProperty = jcr_node.getProperty("some:Property").getString();

              jcr_node.getSession().getWorkspace().getObservationManager().setUserData("changedByWorkflowProcess");

              jcr_node.setProperty("some:Property", "some new value");

              logger.info("blah blah made some changes");

              jcr_node.getSession().save();

         }

        catch { ... }

        finally { ... }

}

Translate
Level 2
May 8, 2019 9:23 AM UTC

When you try to get resource this way (adapterManager.getAdapter(nodeObj, Resource.class)) are getting null ?

Translate
Level 2
May 8, 2019 9:04 AM UTC

Hi, Are you trying to get ValueMap to fetch properties?  if so you can use session.getNode("path to the node you wanna access").getProperties();

Translate