Question

I am working with Apache Jackrabbit.

I found an exception, I tried a lot but didn't get the reason behind this exception.

Please help me in solving this.

Exception :-

javax.jcr.RepositoryException: This session has been closed.
    at org.apache.jackrabbit.jcr2spi.SessionImpl.checkIsAlive(SessionImpl.java:922)
    at org.apache.jackrabbit.jcr2spi.ItemImpl.checkStatus(ItemImpl.java:436)
    at org.apache.jackrabbit.jcr2spi.NodeImpl.getProperties(NodeImpl.java:489)
    at edu.uci.ics.crawler4j.frontier.DocIDServer.getDocId(DocIDServer.java:112)
    at edu.uci.ics.crawler4j.crawler.WebCrawler.processPage(WebCrawler.java:286)
    at edu.uci.ics.crawler4j.crawler.WebCrawler.run(WebCrawler.java:189)
    at java.lang.Thread.run(Thread.java:722)

Edit No. 1

Code is as follows,

Repository repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

// Obtain the query manager for the session via the workspace ...
QueryManager queryManager = session.getWorkspace().getQueryManager();

// Create a query object ...
String expression = "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISDESCENDANTNODE([/docIDsDB])";
Query query = queryManager.createQuery(expression, javax.jcr.query.Query.JCR_SQL2);

// Execute the query and get the results ...
QueryResult result = query.execute();

// Iterate over the nodes in the results ...
NodeIterator nodeIter = result.getNodes();

session.logout();

while(nodeIter.hasNext()){
    Node node = nodeIter.nextNode();
    System.out.println(node.getProperty("url").getString());
    System.out.println(node.getProperty("docid").getString());

}

Exception

javax.jcr.RepositoryException: This session has been closed.
    at org.apache.jackrabbit.jcr2spi.SessionImpl.checkIsAlive(SessionImpl.java:922)
    at org.apache.jackrabbit.jcr2spi.ItemImpl.checkStatus(ItemImpl.java:436)
    at org.apache.jackrabbit.jcr2spi.NodeImpl.getProperty(NodeImpl.java:471)
    at jackrabbit.JackRabbit.main(JackRabbit.java:111)

Line 111 is

System.out.println(node.getProperty("url").getString());

In Jackrabbit, node and children are all of sling:orderedFolder type.

Was it helpful?

Solution

Just keep the JCR Session open as long as you access the Nodes that it provides.

You should move your Session.logout() call to a finally clause that's after all the code that uses what the Session provides.

OTHER TIPS

You should test session.isLive() before you reuse a stored Session, and re-acquire it if this method returns false.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top