2013-06-14 5 views
0

Я работаю с Apache Jackrabbit.Apache Jackrabbit: RepositoryException: эта сессия была закрыта

Я нашел исключение, я много пробовал, но не понял причины этого исключения.

Пожалуйста, помогите мне в решении этого вопроса.

Исключение: -

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

код выглядит следующим образом,

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()); 

} 

Исключение

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) 

линия 111 является

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

В Jackrabbit, узел и дети все строп: типа orderedFolder.

+0

Элемент stacktrace четко указывает на SessionImpl.java:922, где состояние сеанса закрыто ... исправить это, и вам хорошо идти. – AurA

+0

Опубликовать короткий, самосохраненный, правильный пример (http://sscce.org/), пожалуйста, чтобы показать нам источник проблемы. Здесь вы видите только следствие. Мы оба можем представить причину. – Aubin

+0

@Aura Да, это ясно показывает, что сеанс закончился. Я попытался res buve bu я не понял, почему эта сессия закрывается. – devsda

ответ

1

Просто откройте сеанс JCR, пока вы обращаетесь к узлам, которые он предоставляет.

Вы должны перенести вызов Session.logout() в предложение finally, это после всего кода, который использует то, что предоставляет Session.

+0

Actuallt Я решил эту проблему. И я собираюсь ответить на этот вопрос. Но вы даете ответ. В любом случае спасибо за ответ. – devsda

0

Вы должны проверить session.isLive() перед повторным использованием сохраненного Session и повторно приобрести его, если этот метод возвращает false.

Смежные вопросы