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) 

편집 제 코드는 다음과 같다 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()); 

이며, 아이들은 슬링의 모두 : orderedFolder 유형입니다.

+0

stacktrace를 사용하면 SessionImpl.java:922가 세션 상태가 닫힌 지점임을 분명하게 나타낼 수 있습니다 ...이를 바로 잡으면 좋겠어요. – AurA

+0

문제의 원인을 알려주기 위해 짧은 내용, 자체 포함, 올바른 예 (http://sscce.org/)를 보내주십시오. 여기서 결과 만 보여줍니다. 둘 다 우리는 그 원인을 상상할 수 있습니다. – Aubin

+0

@Aura 네, 세션이 끝났음을 분명히 보여줍니다. 나는이 세션이 왜 닫히는지 이해하지 못했다. – devsda

답변

1

제공하는 노드에 액세스하는 동안 JCR 세션을 열어 두십시오.

Session.logout() 호출을 Session이 제공하는 코드를 사용하는 finally 절로 이동해야합니다.

+0

Actuallt이 문제를 해결했습니다. 그리고 저는이 질문에 답할 것입니다. 그러나 당신은 답을줍니다. 어쨌든 답변 해 주셔서 감사합니다. – devsda

0

Session을 다시 사용하기 전에 session.isLive()을 테스트하고이 메서드가 false을 반환하는 경우 다시 획득해야합니다.