Expand my Community achievements bar.

SOLVED

Open CRX Sessions

Avatar

Former Community Member

Hi,

We were see quite a number of issues within the error logs about sessions that aren't closing. I went through Adobe's article about debugging the sessions issues and we then decided to test the application over qa environment with debug enabled. We do quite a number or reverse replications and we also open sessions in case needed be but close them within the finally block. After running the application for few minutes and filtering the logs with session_analyzer jar below is the excerpt of the file. Should i be worried about it? Should i open a day care for the same? Any guidance would be appreciated.

ystemSession.<init>(CRXSystemSession.java:72)create(CRXSystemSession.java:60)sling.server.impl.jmx.ManagedRepository.activate(ManagedRepository.java:186)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)(NativeMethodAccessorImpl.java:57)DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:606)org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:236)access$500(BaseMethod.java:37)$Resolved.invoke(BaseMethod.java:613).invoke(BaseMethod.java:496)ActivateMethod.invoke(ActivateMethod.java:149)manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:251)Component(ImmediateComponentManager.java:119)AbstractComponentManager$Registered.getService(AbstractComponentManager.java:1694)ImmediateComponentManager.getService(ImmediateComponentManager.java:681)framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:308)Service(ServiceRegistrationImpl.java:219)y.getService(ServiceRegistry.java:320)Felix.getService(Felix.java:3556)BundleContextImpl.getService(BundleContextImpl.java:468)osgi.util.tracker.ServiceTracker.addingService(ServiceTracker.java:411)apache.aries.jmx.whiteboard.Activator$MBeanTracker.addingService(Activator.java:101)osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)864)AbstractTracked.trackAdding(AbstractTracked.java:256)(AbstractTracked.java:229)ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)fireEventImmediately(EventDispatcher.java:793)ServiceEvent(EventDispatcher.java:543)Felix.fireServiceEvent(Felix.java:4401)registerService(Felix.java:3411)BundleContextImpl.registerService(BundleContextImpl.java:346)scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:660)44)ComponentService(AbstractComponentManager.java:688)$Unsatisfied.activate(AbstractComponentManager.java:1481).activateInternal(AbstractComponentManager.java:550)enable(AbstractComponentManager.java:261)config.ImmediateComponentHolder.enableComponents(ImmediateComponentHolder.java:328)BundleComponentActivator.initialize(BundleComponentActivator.java:158)<init>(BundleComponentActivator.java:113)Activator.loadComponents(Activator.java:261)bundleChanged(Activator.java:179)framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)fireEventImmediately(EventDispatcher.java:789)BundleEvent(EventDispatcher.java:514)Felix.fireBundleEvent(Felix.java:4385)startBundle(Felix.java:2080)etActiveStartLevel(Felix.java:1279)rameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)java.lang.Thread.run(Thread.java:744): session# 0

Thanks

1 Accepted Solution

Avatar

Correct answer by
Employee

Yes this should be a concerned. Make sure when you open a session or resourceresolver you also close it.

View solution in original post

2 Replies

Avatar

Correct answer by
Employee

Yes this should be a concerned. Make sure when you open a session or resourceresolver you also close it.

Avatar

Level 10

Its best practice to close the Session when you are done with it. For example - consider this code:
 

public String SearchCQForContent() {
try {
              
 //Invoke the adaptTo method to create a Session
    ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
    session = resourceResolver.adaptTo(Session.class);
             
    String fulltextSearchTerm = "Geometrixx";
                  
    // create query description as hash map (simplest way, same as form post)
    Map<String, String> map = new HashMap<String, String>();
 
 // create query description as hash map (simplest way, same as form post)
               
    map.put("path", "/content");
    map.put("type", "cq:Page");
    map.put("group.p.or", "true"); // combine this group with OR
    map.put("group.1_fulltext", fulltextSearchTerm);
    map.put("group.1_fulltext.relPath", "jcr:content");
    map.put("group.2_fulltext", fulltextSearchTerm);
    map.put("group.2_fulltext.relPath", "jcr:content/@cq:tags");
    // can be done in map or with Query methods
    map.put("p.offset", "0"); // same as query.setStart(0) below
    map.put("p.limit", "20"); // same as query.setHitsPerPage(20) below
                    
    Query query = builder.createQuery(PredicateGroup.create(map), session);
                      
    query.setStart(0);
    query.setHitsPerPage(20);
              
    SearchResult result = query.getResult();
                  
    // paging metadata
    int hitsPerPage = result.getHits().size(); // 20 (set above) or lower
    long totalMatches = result.getTotalMatches();
    long offset = result.getStartIndex();
    long numberOfPages = totalMatches / 20;
                 
    //Place the results in XML to return to client
    DocumentBuilderFactory factory =         DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
                              
    //Start building the XML to pass back to the AEM client
    Element root = doc.createElement( "results" );
    doc.appendChild( root );
                 
                 
    // iterating over the results
    for (Hit hit : result.getHits()) {
           String path = hit.getPath();
            //Create a result element
            Element resultel = doc.createElement( "result" );
            root.appendChild( resultel );
                     
            Element pathel = doc.createElement( "path" );
            pathel.appendChild( doc.createTextNode(path ) );
            resultel.appendChild( pathel );
                                   
    }
 
    //close the session
    session.logout();            

 

 

This is from the article:

http://helpx.adobe.com/experience-manager/using/using-query-builder-api1.html